吴恩达Machine Learning第二周作业——线性回归

几个重点,引入损失函数、梯度下降法(不断沿着梯度方向进行下降)、正规方程法(直接求解)、特征缩放(使每个特征的区间范围尽量一致)

接下来是在写题时遇到的问题:

  1. 为什么我们的特征向量,也就是X向量,要进行增添一列全1的操作?

    在提供的代码里面,有这么一句X = [ones(m, 1), data(:,1)]; % Add a column of ones to x,当时困惑了题主很久。尤其是当我写完第一部分的单特征的线性回归的时候,完全没有用到第一列、它的值也没有改变的时候。后来当我开始写多特征的线性回归的时候,发现直接对于单特征我直接就暴力展开J(θ)进行梯度下降的做法是不具有推广性的,因此需要进行向量化。在进行向量化的时候,譬如我们要计算h(θ) = Xθ,此时我们发现h(θ)函数中带有一个常数项,所以θ的向量是比特征个数多1个的,因此为了保证计算的一致性,我们需要增添一列代表截距项(intercept term),即h(θ) = 1θ0 + X1θ1+ … Xn*θn.

  2. J(θ)如何对θi进行求导?

    $$J(\theta) =\frac{1}{2m} \sum_{i=1}^m(h_\theta(X^{i}) -y^{i})^2 $$

    $$\frac{\partial J(\theta)}{\partial \theta} = (h_\theta(X) – y)X^i $$

    这个的关键点就是在于理解J(θ)是关于θ的函数,而我们的h(θ) = θ0 + θ1X1 + θ2X2 +…,所以h(θ)关于θi的求导就是Xi,所以就直接关于平方整体求导之后再乘上h(θ)关于θi的导数即可。

  3. 关于h(θ)究竟等于θTX还是Xθ?

    这个不起眼的问题当时缠绕了题主一会,不得不说线性代数确实有些生疏了。如果θ写成的是n*1的形式,即[1;100;2.4]这种形式,h(θ) = Xθ;如果θ是行向量的形式,即[1,100,2.4]这种,那么h(θ) = θTX.

  4. 为什么已经AC的代码,用梯度下降分析预测多特征的房价和正规方程法的差这么多?

    题目让我们predict the price of a house with 1650 square feet and 3 bedrooms, 因此我们很自然地写出下面的代码

    问题就出在这,因为梯度下降使用了特征缩放,这里测试时也一定记得要做同样的特征缩放。

    加上对特征的缩放即可,注意由于第一列是我们新增的全1的截距项,因此第一列不需要缩放,代码如下:

    然后我们就可以看到两种方法预测的结果是很相似的,这是学习率alpha=0.01时的结果,当alpha大一点的时候,两者的值是完全相等的,大家不妨试一下。

    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

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注