在介绍线性回归模型前,先统一一些等式的表达式。
= 第 i 个训练样本中的第 j 个属性值
= 第 i 个训练样本所有属性组成的向量
m = 样本数
n = 属性数(数学表达为 )
给定数据集 D = {},「线性回归 」试图学得一个通过属性的线性组合来进行预测的函数,即「假设函数」为
一元线性回归
假设函数
首先,介绍最简单的一种情况:只有一个输入变量,即只有一个属性。那么上面的假设函数(预测函数)将简化为:
这称为「一元线性回归」。假设有如下的训练集
输入 x | 输出 y |
---|---|
0 | 4 |
1 | 7 |
2 | 7 |
3 | 8 |
现在,我们假设 ,即假设函数为。但是如何衡量这个假设函数的精确程度,即预测值与真实值 y 之间的差别呢。这就涉及到了「代价函数」。
代价函数
通过代价函数来衡量我们的假设函数的准确性。这里,代价函数用的是「均方误差」,即
公式理解:均方误差有非常好的几何意义,代表预测点与真实点之间的欧氏距离。所有点距离平方之和除以样本数 m 就是均方误差。而再除以 2 是为了方便计算。代价函数值越小越好。
此时,我们能够具体计算出假设函数的精确度,下面的问题就是「如何提高假设函数的精确度」,即「寻找令代价函数取最小值」,而这种基于均方误差最小化来进行模型求解的方法称为「最小二乘法」。
梯度下降算法
梯度下降算法就是最常用的求代价函数最小值的算法。该算法的思想是通过一步步迭代找到代价函数的最小值。
想象着, 为 x 轴, 为 y 轴。代价函数 为 z 轴。图上的点将是代价函数的结果,使用我们的假设和那些特定的θ参数。如下图所示。
梯度下降算法过程示意图算法过程:假设初始参数产生的代价值为图中右边红圈的点,通过梯度下降算法,修改参数的值让代价函数取值就会一步一步下降,比如沿着图中黑线下降。当将最低点(如箭头指示的点)时,算法将不会再改变参数的值(即算法收敛),此时得到的参数让代价函数取值最小。
需要注意的是, 起始点的位置略有不同,你会得到一个不同的局部最优解,这就是梯度下降算法的一个特点。同时,只有代价函数为凸函数时,代价函数定能取全局最小值。
在只有两个参数下,算法公式如下:
两个参数下的梯度下降算法公式的理解:对代价函数求偏导数,就是求出该点的切线的斜率,它将为我们提供一个朝向的方向。我们在最陡下降的方向上降低代价函数。每个步骤的大小由参数 α 确定,该参数称为学习率。当梯度下降算法到达最小点(不管是局部还是全局)时,算法再也无法改变参数(因为导数为 0),此时即收敛。
计算过程需要注意同步更新,具体如下图:
梯度下降算法计算过程多元线性回归
理解了单元线性回归,我们来讲更一般情况下的线性回归,即多个属性的线性回归,称为「多元线性回归」。
假设函数
当输入值有多个(即)时,线性回归的假设函数将变成
其中,约定 。这里,将公式转换成向量描述,有利于编程实现。在很多编程语言中,内部集成了线性代数的计算并运算速度很快。
代价函数
多元线性回归的代价函数还有一样。
梯度下降算法
相比于单元线性回归,需要计算的 ,从 变成 。
同样,可以使用向量表示。
向量描述多元线性回归梯度下降算法这里,说一下梯度下降算法几个建议
- 调试梯度下降,以迭代次数为 x 轴,以代价函数值 为 y 值,绘制图表。如果 增加,则需要降低 值;
- 如果 在一次迭代中减少小于一个很小的值(比如)时,可以视为收敛,停止迭代。然而,事实证明这个很小的值很难选择;
- 当 足够小并且每次迭代都在下降时,建议将 减少3的倍数。如 0.3 变为 0.1。
正规方程
正规方程可以得到代价函数最小值并且不需要通过迭代,一步即可求得。同时,正规方程得到了充分的证明.
正规方程公式 :
其中, 均为向量。需要注意的是, 可能出现不可逆的情况,具体参考线性代数。这里提及常见的两种不可逆的情况:
正规方程与梯度下降算法的比较
梯度下降算法 | 正规方程 |
---|---|
需要选择 | 不需要选择 |
需要迭代 | 不需要迭代 |
时间复杂度 | 时间复杂度,因为需要计算 |
当 n 较大时,效果很好 | 当 n 较大时,运行慢 |
根据经验,两种算法适用范围:
- 当 n 大的时候(大概量级超过),使用梯度下降算法,因为正规方程需要计算 n*n 逆矩阵耗时巨大;
- 当 n 小的时候(大概量级不超过),使用正规方程。
网友评论