摘要
本节笔记主要记录梯度下降算法和最小二乘法的相同点和不同点,为了简单的理解和推导,我们暂只讨论一元线性回归下的梯度下降算法和最小二乘。从实现++代码上的最大不同就是梯度下降采用了迭代算法—预先给一个参数设置初始值,然后通过迭代和学习率实现线性方程直线的无限靠近理想函数。最小二乘采用了高中数学求凸函数(下凹)的最小值—即求导数为零的参数方程。
- [x] Edit By Porter, 积水成渊,蛟龙生焉。
梯度下降和最小二乘发的相同点和不同点如下:
第一部分、最小二乘法
1.1 狭义的最小二乘法:
指的是在线性回归下采用最小二乘准则(或者说叫做最小平方),进行线性拟合参数求解的、矩阵形式的公式方法,是线性假设下的一种有闭式解的参数求解方法,最终结果为全局最优;
1.2 广义的最小二乘法:
是最小二乘准则,本质上是一种evaluation rule或者说objective funcion。是一种对于偏差程度的评估准则。
- 梯度下降法,是假设条件更为广泛(无约束)的,一种通过迭代更新来逐步进行的参数优化方法,最终结果为局部最优;
1.3 最小二乘与极大似然的区别
- 二乘法:即观测值与实际数据误差平方和最小,其没有假设,几何意义上就是距离最小
- 最大似然估计:估计参数可能值,使样本发生概率最大
1.4 对于回归问题,两者对于最优参数的不同解法
假设一元回归方程为
实际中我们会采样得到关于[x,y]的很多样本,此时我们会通过损失函数loss,来求最优的最优解。
假设,于是:
为求得最优的,即求解的最小取值下的 最优解。
- 注意此时的是一个凸函数,注意也就是对应国内教材下凹函数曲线。
1.5 最小二乘法的求解最优的的方法
直接通过对 对 分别求偏导,并将偏导设为0,求取凸函数取得最小值下的对应 参数。
1.6 最小二乘法的局限性和适用场景
从上面可以看出,最小二乘法适用简洁高效,比梯度下降这样的迭代法似乎方便很多。但是这里我们就聊聊最小二乘法的局限性。
首先,最小二乘法需要计算的逆矩阵,有可能它的逆矩阵不存在,这样就没有办法直接用最小二乘法了,此时梯度下降法仍然可以使用。当然,我们可以通过对样本数据进行整理,去掉冗余特征。让的行列式不为0,然后继续使用最小二乘法。
第二,当样本特征n非常的大的时候,计算的逆矩阵是一个非常耗时的工作(nxn的矩阵求逆),甚至不可行。此时以梯度下降为代表的迭代法仍然可以使用。那这个n到底多大就不适合最小二乘法呢?如果你没有很多的分布式大数据计算资源,建议超过10000个特征就用迭代法吧。或者通过主成分分析降低特征的维度后再用最小二乘法。
第三,如果拟合函数不是线性的,这时无法使用最小二乘法,需要通过一些技巧转化为线性才能使用,此时梯度下降仍然可以用。
第四,讲一些特殊情况。当样本量m很少,小于特征数n的时候,这时拟合方程是欠定的,常用的优化方法都无法去拟合数据。当样本量m等于特征说n的时候,用方程组求解就可以了。当m大于n时,拟合方程是超定的,也就是我们常用与最小二乘法的场景了。
原文地址:http://www.cnblogs.com/pinard/p/5976811.html
第二部分、梯度下降算法
2.1 梯度下降算法的求解最优的的方法
同样,梯度下降算法也是要求最小损失函数
但是方法不一样了,梯度下降算法,在上面的基础上设定一个学习率的参数,假设为:
对于待求解的参数 则转化为 --> 求最终待求的 关于前一时刻的 的函数,如下
2.2 梯度下降算法的算法核心公式
对于和 , 算法的核心在于如何更新这两个参数,这两个参数的更新不是能用公式可以简单的推到的,但是可以用下面的举例进行理解
和 参数更新的理解,首先我们需要的是最小化这个loss代价函数,这个代价函数是一个下凸函数,所以我们按照凸函数的特点来理解,类似于一个山,人闭着眼往山下走小碎步(这个小碎步就是学习率乘梯度,如下公式)
我们要求解的是,找这个loss的局部最优解,由于我们是针对线性一元的,所以loss是只有一个极小值点,也就是局部解就是最优解,所以接下来理解。
人要走到山下,那么问题来了,我怎么怎么确保我们一直是朝向山谷走的呢,(比如人走在山谷的左边,应该接着忘右边走,才能到达山谷;又如,我们走超了,小碎步跨大了,跨到山谷的左边去了,我们应该要要朝山谷的左边走才能到山谷),这里就需要个方向,这个在局部最优点的左边还是右边的方向由 确定。
第三个问题是,人走小碎步时,要的方向是朝着局部最优点(山谷)走的,即loss数值(代价函数)减少的方向,所以我们要在小碎步前乘以负数,来确保,取(点,人)在(山)左边时(左边时梯度=斜率,就是loss的导数为负数,负数乘以负数,就为正数)我们要确保我们需要预测的所确定的
接近原数据y,所以对于价值函数,人在左边时 , 我们要确保人是往loss梯度下降(loss减少)的方向移动, 此时 就可以看作走碎步的人,方向都已确定
,现在就是在前一步 的基础上,走下一步得到 即有
进一步简化为
同理:
人,走碎步(小碎步的步长是),上一步是b, 方向是 ,走到的下一步就是 ,即得到
- 根据上面的式子,假设学习率lr的初始值为0,然后通过for循环进行迭代,此时求解的关于 的曲线会随着迭代的次数增加,一步步无限的靠近最优的解,理论上会求解到最优的 。
这里我相信题主对梯度下降法的整体理念是认可的,只是不清楚这个更新公式的实质含义。首先这个梯度更新公式确实不是推导而是创造出来的,所以只能从概念上去理解。设想下有个函数,你的目标是:找到一个参数 使得它的值 最小。但它很复杂,你无法找到这个参数的解析解,所以你希望通过梯度下降法去猜这个参数。 问题是怎么猜?对于多数有连续性的函数来说,显然不可能把每个 都试一遍。所以只能先随机取一个 ,然后看看怎么调整它最有可能使得 变小。把这个过程重复n遍,自然最后得到的 的估值会越来越小。
作者:老董
链接:https://www.zhihu.com/question/57747902/answer/240695458
来源:知乎
针对上面的一元回归梯度下降算法的代码实现,如下:
1 | import numpy as np |
对应的数据集如下(data.csv):
1 | 32.502345269453031,31.70700584656992 |
总结
以上就是关于简单的一元回归的关于梯度下降和最小二乘的区别,对于代码中,的迭代的实现下一小节中会有详细的介绍,会通过代码来直观例说迭代算法和递归算法的差异和原理。
无聊时刻看部综艺: