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

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

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

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

  • 在通过梯度下降方式计算出所有的\theta后,要填充一下代码进行1650 sq-ft, 3 br 房屋的价格预测:
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;    % 预测房屋价格
  • 在通过正规方程计算出所有的\theta后,要填充一下代码进行1650 sq-ft, 3 br 房屋的价格预测:
x_pre = [1 1650 3];   
price = x_pre * theta;

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

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

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

也可以发邮件至[email protected]

Python实现代码

你可能感兴趣的:(机器学习)