吴恩达机器学习个人笔记(一)-线性回归

1单变量线性回归(Linear Regression with One Variable)

1.1 假设方程(Hypothesis)

       线性回归属于监督学习,大致是根据给定的数据集训练出一个线性模型,构造成功后,输入一个新的数据后,会输出一个确却的值。比如预测一个地区的房价,给定一个数据集包含房子的大小和房价,当需要预测一个房子的价格时,模型就会预测出一个确却的值。回归一词指的是,我们根据之前的数据预测出一个准确的输出值,对于这个例子就是价格,同时,还有另一种最常见的监督学习方式,叫做分类问题,当我们想要预测离散的输出值,例如,我们正在寻找癌症肿瘤,并想要确定肿瘤是良性的还是恶性的,这就是 0/1 离散输出的问题。线性回归的假设方程为

                                                               h_{\theta }\left ( x \right )=\theta _{0}+\theta _{1}x

\theta _{0} 和 \theta _{1} 都是具体的值,后面一系列工作就是求出 \theta _{0} 和 \theta _{1} 这两个合适的值

1.2 代价函数(Cost Function

      代价函数也被称作平方误差函数,有时也被称为平方误差代价函数。我们之所以要求出误差的平方和,是因为误差平方代价函数,对于大多数问题,特别是回归问题,都是一个合理的选择。代价函数依个人理解为一个标准,即评判我们选择的具体的线性方程的误差大小。由于上述假设方程我们所未知的是 \theta _{0} 和 \theta _{1} ,因此要选择合适的\theta _{0} 和 \theta _{1}使得代价函数最小,定义如下 

                                                     

既然目的为寻找合适的\theta _{0} 和 \theta _{1}使得代价函数最小,那么就要有一种算法来选择\theta _{0} 和 \theta _{1},那就是梯度下降算法。

1.3 梯度下降(Gradient Descent)

      梯度下降是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出代价函数j\left ( \theta _{0},\theta _{1} \right ) 的最小值。梯度下降是一个迭代的过程,我们不断进行迭代,知道找到合适的值。梯度下降的公式为

                                                  

       其中\alpha是学习率(learning rate),它决定了我们沿着能让代价函数下降程度最大的方向向下迈出的步子有多大,这是我们自己决定的,太小或太大都不行。如果太小那么迭代次数就会过多,相反太大的话就可能想不好,错过局部最小值。梯度下降算法如下所示

                                   

      我们即不断更新\theta _{0} 和 \theta _{1},直到收敛。在梯度下降算法中,还有一个更微妙的问题,梯度下降中,我们要更新\theta _{0} 和 \theta _{1} ,当j=0j=1时,会产生更新,所以你将更新j\left (\theta _{0} \right )j\left (\theta _{1} \right )。实现梯度下降算法的微妙之处是,在这个表达式中,如果你要更新这个等式,你需要同时更新\theta _{0} 和 \theta _{1}

2多变量线性回归(Linear Regression with Multiple Variables)

      多元线性回归的假设方程如下所示:

                                               h_{\theta }\left ( x \right )=\theta _{0}+\theta _{1}x _{1}+\theta _{2}x _{2}+\theta _{3}x _{3}+\cdots +\theta _{n}x _{1}

      相比较于之前的单元线性方程  h_{\theta }\left ( x \right )=\theta _{0}+\theta _{1}x _{1} 后面多有几个\theta x的组合,后续x_{i}\left ( i= 1,2,3\cdots \right )表示数据集的多个特征。比如预测房屋价格,那么这几个特征可能为房屋的大小,房屋所处地区和房屋的年纪等。

为了简化与更方便的用矩阵表示上述多元线性回归的方程,将\theta与x各用矩阵表述,并且两个矩阵相乘即为h_{\theta }\left ( x \right )

在此假设\theta = \begin{bmatrix} \theta _{0}\\ \theta _{1}\\ \theta _{2}\\ \vdots \\ \theta _{n}\end{bmatrix}   ,x= \begin{bmatrix} x_{0}\\ x_{1}\\ x_{2}\\ \vdots \\ x_{n}\end{bmatrix}  最重要的是  x_{0}=1,这样\theta 和 x 的元素个数即为一致。那么 h_{\theta }\left ( x \right ) 就可以用 \theta 的转置矩阵 \theta ^{T}x 相乘得到即

                                                                h_{\theta }\left ( x \right )= \theta ^{T}x

2.1 多元线性回归方程的梯度下降算法

       之前的代价函数在多元下为

                               J\left (\theta _{0},\theta _{1},\cdots ,\theta _{n}\right )= \frac{1}{2m}\sum_{i=1}^{m} \left ( h_{\theta }\left ( x^{i} \right ) -y^{i}\right )^{2}

          此时 \left ( \theta _{0}, \theta _{1},\cdots , \theta _{n} \right ) 为一个 n+1 列的矩阵\theta ,那么各个 \theta _{i} 的更新流程如下所示

                         

  总的来讲即为下列公式

                

3 梯度下降算法中的特征缩放

      特征缩放的目的是使特征值的取值在一个相似的范围内。假设预测房屋的价格,房屋有两个特征,大小和房间数量。那么大小一般取值在 0-1000,而房间数量一般在0-10之内。这两者取值的范围相差太大,那么梯度下降算法就会很艰难的进行,这并不是想要的结果,所以我们将两个特征值的取值范围变成相似。

        最简单的方法是令           x_{n}=\frac{x_{n}-\mu _{n}}{s_{n}},其中 \mu _{n}是平均值,x_{n}是标准差一般为取值的范围

4 学习率的选择

      梯度下降算法的每次迭代受到学习率的影响,如果学习率过小,则达到收敛所需的迭代次数会非常高;如果学习率过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛。

      通常可以考虑尝试些学习率:\alpha =0.01,0.03,0.1,0.3,1,3

5 正规方程(Normal Equation)

      对于某些线性回归问题,正规方程方法是更好的解决方案。正规方程是通过求解下面的方程来找出使得代价函数最小的参数的   

                                                         \frac{\partial }{\partial \theta_{j}}J\left ( \theta _{j}\right )=0

    假设我们的训练集特征矩阵为X(包含了x_{0}=1),并且我们的训练集结果为向量y,则利用正规方程解出向量    \theta =\left ( X^{T}X \right )^{-1}X^{T}y上标T代表矩阵转置,上标-1 代表矩阵的逆。如下图所示

                     

运用正规方程方法求解参数

                            

      总结一下,只要特征变量的数目并不大,标准方程是一个很好的计算参数的替代方法。具体地说,只要特征变量数量小于一万,我通常使用标准方程法,而不使用梯度下降法。对于那些更复杂的学习算法,我们将不得不仍然使用梯度下降法。因此,梯度下降法是一个非常有用的算法,可以用在有大量特征变量的线性回归问题。对于这个特定的线性回归模型,标准方程法是一个比梯度下降法更快的替代算法

猜你喜欢

转载自blog.csdn.net/Huang_cainiao/article/details/82711071