机器学习-线性回归问题
西瓜书中的一个例子,若在西瓜问题中学得:
则意味着可通过综合考虑色泽、根蒂和敲声来判断瓜好不好,其中根蒂最要紧,而敲声比色泽更重要,这里的0.2、0.5、0.3直观的表达了各属性在判断西瓜好坏的重要性。
所谓的线性回归,就是利用数理统计中的回归分析,来确定两种或两种以上变量间,相互依赖的定量关系的一种统计分析方法。
这里根据特征和输入变量的数目,将线性回归问题分为两种:单变量线性回归和多变量线性回归,即和.
1、单变量线性回归
首先,来看下单变量线性回归
即由样本(x,y),推断y=wx+b的过程。其中w,b为需要推断的常量。这里有两个问题。
(1)为什么是"y=wx+b"型的一元一次结构?而非其它一元N次结构?
(2)如何推算出w,b?
1.1 假设函数
先来回答上一小节的问题(1)。可以使用其它一元N次结构。选择一元一次结构只是为了方便。之后的学习,可以换为更复杂的拟合结构。由于我们假设x,y之间存在"y=wx+b"型的映射关系,所以函数f(x)=wx+b被称为假设函数,hypothesis function。
对于假设函数中的参数w,b,我们没有办法直接算出正确的值。也无法让所有样本,都映射到假设函数上。因此,只能推算出对于样本集合整体来说,最佳的w,b取值。
1.2 代价函数
如何评断参数w,b最佳?最佳w,b应使得假设函数求得的数据,与实际数据之间误差的平方和为最小。这种基于误差平方和最小化来进行线性模型的求解方法称为“最小二乘法”。在线性回归中,最小二乘法就是试图找到一条直线,使所有样本到直线上的欧式距离之和最小。求解w和b使均方误差最小化的过程,称为线性回归模型的最小二乘“参数估计。
注:关于为何使用1/2m,而非1/m,因为在后面的求导运算中,“1/2”可以直接被约掉。因此,代价函数之所以取“1/2m”作为参数,是为来运算方便。
由于样本集中的每个样本(x,y)已知,算式中w和b成为了变量,算式可以看作是w,b作为变量的函数。即
该函数,被称为代价函数,cost function,或者平方误差代价函数,squared error cost function。有了代价函数,推算w,b的问题就演化为,求代价函数何时取到最小值的问题。
当然,除了平方误差代价函数外,还存在其它代价函数。只是平方误差代价函数,是解决线性回归问题最常用的手段罢了。但不管使用何种代价函数,我们的目的终归是要推算最佳的w,b。那么,如何推算呢?
推算出w和b的解如下:
2、多变量线性回归
对于多变量线性回归,我们试图学得:
为了便于讨论,把w和b吸收入向量形式=(w;b),相应的,把数据集D表示为一个m×(n+1)大小的矩阵X,其中每一行对应一个示例,该行前n个元素对应示例的n个属性值,最后一个元素恒置为1,即公式由变成 ,可以简化成
同样的用最小二乘法来对进行估计,
令上式等于零可得最优解的闭式解
3、正规方程
这种求解参数w的方法也被称为正规方程。
当存在矩阵不可逆的情况时(多发生在 n>= m 时),可采用:
删除冗余的特征,如其中两个变量间存在线性关系
对于太多的特征 (m<= n),删除部分特征,或采用正则化(regularization)
注:矩阵逆运算的时间复杂度通常为 O(n^{3}),所以当 n 较大时,建议使用梯度下降。
4、梯度下降法
接下来我们使用梯度下降法来求解上文中关于w最优解的函数 J(θ)(这里的θ即为w) ,步骤如下
1、随机初始化 θ
2、沿着负梯度方向迭代,使更新后的 θ 令 J(θ) 更小,公式如下
α 为学习率、步长
3、当下降到无法下降或某个定义的极小值时,则停止下降。
注:梯度下降的最终点并非是全局最小点,可能是一个局部最小点
梯度方向,偏导数计算:
4.1 批量梯度下降法(Batch Gradient Descent)
批量梯度下降法,是梯度下降法最常用的形式,具体做法也就是在更新参数时使用所有的样本来进行更新,也就是上文中的计算方法
4.2 随机梯度下降法(Stochastic Gradient Descent)
随机梯度下降法,其实和批量梯度下降法原理类似,区别在与求梯度时没有用所有的m个样本的数据,而是仅仅选取一个样本来求梯度。
对于训练速度来说,随机梯度下降法由于每次仅仅采用一个样本来迭代,训练速度很快,而批量梯度下降法在样本量很大的时候,训练速度不能让人满意。对于准确度来说,随机梯度下降法用于仅仅用一个样本决定梯度方向,导致解很有可能不是最优。对于收敛速度来说,由于随机梯度下降法一次迭代一个样本,导致迭代方向变化很大,不能很快的收敛到局部最优解。
5、梯度下降和正规方程的比较
总结一下,只要特征变量的数目并不大,正规方程是一个很好的计算参数的替代方法。具体地说,只要特征变量数量小于一万,我通常使用正规方程法,而不使用梯度下降法。
代码实现参见下篇机器学习-线性回归实战