您的位置:首页 > 其它

吴恩达机器学习线性回归练习题:多变量线性回归(octave实现)

2018-12-28 17:18 1086 查看

单变量的线性回归模型就不再细说了,这里只记录多变量线性回归中几个需要实现的步骤和函数,其他内容在课程中的讲义和习题中都有详细描述。

  • 特征标准化,对应featureNormalize函数 作用:消除不同特征间的量纲,提高梯度下降的速度,缩短收敛时间
  • 需要在featureNormalize.m文件中填充的代码:
[code]mu = mean(X);    % 计算每个特征的均值
sigma = std(X);    % 计算每个特征的标准差
X_norm = (X - mu) ./ sigma;    % 计算标准化后的特征矩阵
  • 多变量损失函数,对应computeCostMulti函数 作用:评估误差
  • 损失函数定义: ,其中:
  • 这个公式可以有多种方式实现,这里根据习题中的介绍,使用矩阵计算
  • 需要在computeCostMulti.m中填充的代码:
[code]J = (X * theta - y)' * (X * theta - y) / (2 * m);    % 在进行矩阵计算的过程中,很自然的就实现了求和,也可以使用其他方式实现,比如:J = sum(power(X * theta - y, 2)) / (2 * m);
  • 梯度下降 作用:最小化损失函数 ,得到 中的所有参数 ,从而求得最佳拟合函数
  • 更新规则:
  • 梯度下降中迭代更新 的实现方式有很多,这里采用矩阵计算的方式,一次计算,更新所有的
  • 需要在gradientDescentMulti.m中填充的代码:
[code]theta = theta - ((X * theta -y)' * X)' * (alpha / m);
  • 正规方程 作用:不通过梯度下降的方式计算出 中的所有参数 ,从而求得最佳拟合函数
  • 实现公式:
  • 根据公式直接实现即可
  • 需要在normalEqn.m中填充的代码:
[code]theta = inv(X' * X) * X' * y;    % 如果X' * X是奇异的,则需要使用pinv函数计算伪逆

到这里,所有的函数中确实的代码部分都完成了填充,但是,在主程序中,还有两个预测价格的地方需要填充代码,分别是:

  • 在通过梯度下降方式计算出所有的 后,要填充一下代码进行1650 sq-ft, 3 br 房屋的价格预测:
[code]x_pre = [1650 3];    % 构建样本
x_pre_norm = (x_pre - mu) ./ sigma;    % 标准化数据
x_pre_norm = [ones(size(x_pre, 1)), x_pre_norm];    % 添加一个为1的特征

price = x_pre_norm * theta;    % 预测房屋价格
  • 在通过正规方程计算出所有的 后,要填充一下代码进行1650 sq-ft, 3 br 房屋的价格预测:
[code]x_pre = [1 1650 3];
price = x_pre * theta;

到这里,就已经完成了所有的多变量线性回归,下面是执行主程序ex1_multi的部分结果:

[code]Loading data ...
First 10 examples from the dataset:
x = [2104 3], y = 399900
x = [1600 3], y = 329900
x = [2400 3], y = 369000
x = [1416 2], y = 232000
x = [3000 4], y = 539900
x = [1985 4], y = 299900
x = [1534 3], y = 314900
x = [1427 3], y = 198999
x = [1380 3], y = 212000
x = [1494 3], y = 242500
Program paused. Press enter to continue.
Normalizing Features ...
Running gradient descent ...
Theta computed from gradient descent:
334302.063993
100087.116006
3673.548451

Predicted price of a 1650 sq-ft, 3 br house (using gradient descent):
$289314.620338
Program paused. Press enter to continue.
Solving with normal equations...
Theta computed from the normal equations:
89597.909543
139.210674
-8738.019112

Predicted price of a 1650 sq-ft, 3 br house (using normal equations):
$293081.464335

如果需要已经填充好代码的所有习题文件,请点这里

也可以发邮件至294562919@qq.com

Python实现代码

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: