线性回归建模
首先考虑一个情景,假设我们希望用线性回归预测房屋的售价。一般网上公开的房价预测数据集都至少包含房屋的面积、厅室数量等特征以及房屋的售价:
面积(x1) |
厅室数量(x2) |
价格(万元)(y) |
64 |
3 |
225 |
59 |
3 |
185 |
65 |
3 |
208 |
116 |
4 |
508 |
…… |
…… |
…… |
对此数据,我们可以建立售价和特征属性之间的关系:
f(x)=w0+w1x1+w2x2
更一般的,假如我们有数据集:
{(x(1),y(1),((x(2),y(2)),...,((x(n),y(n))}xi=(x1;x2;x3;...;xd),yi∈R
其中,n 表示样本的个数,d表示特征的个数。则y与样本x的特征之间的关系为:
f(x)=w0+w1x1+w2x2+...+wdxd=i=0∑dwixi
其中,我们假设x0=1,下文都作此假设。
线性回归损失函数、代价函数、目标函数
- 损失函数:度量单个样本的错误程度。常用的损失函数有:0-1损失函数、平方损失函数、绝对损失函数、对数损失函数等。
- 代价函数:度量所有样本的平均错误程度,也就是所有样本损失函数的均值。常用的代价函数包括均方误差(MSE)、均方根误差(RMSE)、平均绝对误差(MAE)等。
- 目标函数:代价函数与正则化函数的结合,也是最终要优化的函数。
我们的目标是找到一组合适的w,使得 f(x)≈y 。对于回归问题,有许多性能度量方法,其中常用的一个是均方误差(MSE),即:
J(w)=21j=1∑n(fw(x(j))−y(j))2
我们称J(w)为代价函数。注意到式子的系数不是1/n而是1/2,数是因为求导后的 J′(w) 系数为1,方便后续计算。为什么均方误差可以作为性能度量?可以从极大似然估计(概率角度)入手。
为了能够能精确的表达特征和目标值y的关系,引入了误差项ϵ,表示模型受到的未观测到的因素的影响。于是我们可以假设:
y(i)=wTx(i)+ϵ(i)
使用回归模型需要满足许多前提假设,其中一个是要求ϵ独立同分布,且服从N(0,σ2)的高斯分布(正态分布):
p(ϵ(i))=2πσ1exp(−2σ2(ϵ(i))2)
所以在给定w和x的前提下,y(i) 服从N(wTx(i),σ2)的正态分布。
p(y(i)∣x(i);w)=2πσ1exp(−2σ2(y(i)−wTx(i))2)
现在我们已经知道$y^{(i)} $的分布,但是我们不知道他的参数 wTx(i),σ2 ,极大似然估计法来正是用来解决此类问题的,假设样本独立同分布,最大化似然函数,来进行参数估计。最大化似然函数的原理说简单点就是在一次观测中,发生了的事件其概率应该大。概率大的事在观测中容易发生,所以我们希望让每一个p(y(i)∣x(i);w)都最大化,这等效于他们的乘积最大化。于是不难得到似然函数:
L(w)=i=1∏n2πσ1exp(−2σ2(y(i)−wTx(i))2)
现在,目标转换为找到最佳的w,使得L(w)最大化,这就是极大似然估计的思想。我们通常对L(w)取对数,转换成加法的形式来方便计算:
L(w)=logL(w)=logi=1∏n2πσ1exp(−2σ2(y(i)−wTx(i))2)=i=1∑nlog2πσ1exp(−2σ2(y(i)−wTx(i))2)=nlog2πσ1−σ21⋅21i=1∑n((y(i)−wTx(i))2
因此,要最大化L(w)只需要最小化:
21i=1∑n((y(i)−wTx(i))2
这一结果即为均方误差的形式,因此使用J(w)作为代价函数是合理的。
线性回归模型的求解方法
1. 梯度下降法
随机初始化参数w,不端迭代,直到w达到收敛的状态,此时J(w)达到了最小值(有时候是局部最小值) :
wj=wj−α∂w∂J(w)
上式中α为学习率,其中,
∂wj∂J(w)=∂wj∂21i=1∑n(fw(x)(i)−y(i))2=2∗21i=1∑n(fw(x)(i)−y(i))∗∂wj∂(fw(x)(i)−y(i))=i=1∑n(fw(x)(i)−y(i))∗∂wj∂(j=0∑dwjxj(i)−y(i)))=i=1∑n(fw(x)(i)−y(i))xj(i)
于是有:
wj=wj+αi=1∑n(y(i)−fw(x)(i))xj(i)
将上式向量化后得到:
w=w+αi=1∑n(y(i)−fw(x)(i))x(i)
可以看到上面的式子每次都迭代所有的样本,完成w的梯度下降,迭代过程如下图所示(越靠近内部,代价函数的值越小):

有时候我们不能将所有数据一次性加载到内存中,那么可以每次只用部分样本(例如16,32,64等)进行梯度下降,此时的梯度下降法又叫做批梯度下降法。
极端情况下,我们每次只对一个样本进行梯度下降,此时的梯度下降法又叫做随机梯度下降法(SGD)。好处是相对于使用多个样本的梯度下降法,SGD每次迭代计算量都比较小,因此迭代速度很快。缺点是容易受到噪声点的干扰,导致梯度下降的方向不稳定,如下图所示:

因此要结合实际场景选择合适的梯度下降算法。
2. 最小二乘法
令:
x(i)=⎣⎢⎢⎢⎢⎢⎡x0(i)x1(i)x2(i)…xd(i)⎦⎥⎥⎥⎥⎥⎤
X=⎣⎢⎢⎢⎢⎡(x(0))T(x(1))T(x(2))T…(x(n))T⎦⎥⎥⎥⎥⎤
Y=⎣⎢⎢⎡y(1)y(2)…y(n)⎦⎥⎥⎤
则有:
fw(x)=Xw
且每个样本的误差组成的矩阵为:
Xw−Y
进而有:
J(w)=21(Xw−Y)T(Xw−Y)
由于这是个存在最小值的凸函数,故对w求导可得:
∂w∂J(w)=∂w∂21(Xw−Y)T(Xw−Y)=21∂w∂(wTXTXw−YTXw−wTXTY−YTY)=21(∂w∂(Xw)TXw+∂w∂(Xw)TXw−XTY−XTY−0)=XTXw−XTY
可能用到的向量和矩阵求导公式:
∂x∂aTx=∂x∂xTa=a∂x∂xTAx=(A+AT)x
令导数等于0,得到:
w=(XTX)−1XTY
注意到上式存在矩阵的逆运算,一般样本数量大于维度的时候矩阵可逆,利用最小二乘法可以得到目标函数的闭式解。但是,当数据维度大于样本数时,X 非满秩,则XTX的结果根据:
rank(AB)≤min(rankA,rankB)
可知XTX也不是满秩的,故不可逆,此时会有无穷多个解。
带有正则化项的回归模型
为了简化模型复杂程度,缓解过拟合,可以引入正则化项。根据使用的正则项,回归模型又可以细分为:lasso回归、岭回归(ridge回归)、ElasticNet回归。
Lasso回归使用L1范数(向量中各个元素绝对值之和)来约束模型:
J(w)=21i=1∑n((y(i)−wTx(i))2+λ∥w∥1(1)
岭回归使用L2范数(向量各元素平方和的平方根)的平方来约束模型:
J(w)=21i=1∑n((y(i)−wTx(i))2+λ∥w∥22(2)
L1,L2都有助于减缓过拟合,但是前者可以使得部分不重要的特征xj对应的权重wj变为0,可以起到特征选择的作用。
为了更好的理解,我们假设模型只有两个参数x1,x2, 对应的权重为w1,w2,将公式(1),(2)等号右边的两项分别绘制图像可以得到:

公式(1),(2)的最优解应该是均方误差项和正则化项的折中,即出现在均方误差项和正则化项的交点处。从上图可以看到,采用L1范数时,交点出现在w2等于0的坐标轴上,意味着对于此模型特征x2并没有起到作用,可以舍去。而采用L2范数的话,交点更容易落在某个象限中,即$w_1, w_2 不等于0。总的来说,就是L_1范数比L_2$范数更容易得到稀疏的解。
ElasticNet回归则是同时使用了L1,L2来约束模型:
J(w)=21i=1∑n((y(i)−wTx(i))2+λ1∥w∥1+λ2∥w∥22
ElasticNet回归在具有多个特征,并且在特征之间具有一定关联的数据中比较有用。
回归任务的评价指标
1. 平均绝对误差(MAE)
平均绝对误差也叫L1范数损失,公式为:
MAE=n1i=1∑n∣(y(i)−y^(i)∣
其中n为样本的个数,y^(i) 表示第i个样本的预测值。MAE能很好的刻画预测值和真实值的偏差,因为偏差有正有负,为了防止正负误差抵消,MAE计算的是误差绝对值的平均值。MAE 也可以作为损失函数,但是有些模型(如XGboost)必须要求损失函数有二阶导数,所以不能使用MAE进行优化。
加权平均绝对误差(WMAE)是MAE的变形,比如考虑时间因素,离当前时间越久的样本权重越低。公式为:
WMAE=n1i=1∑nw(i)∣(y(i)−y^(i)∣
其中,w(i)为第i个样本的权重。
2. 均方误差(MSE)
MSE 计算的是误差平方和的均值,公式如下:
MSE=n1i=1∑n(y(i)−y^(i))2
MSE 它对误差有着更大的惩罚,但是他也对离群点敏感,健壮性可能不如MAE。
3. 均方根误差(RMSE)
MSE公式有一个问题是会改变量纲。因为公式平方了,比如说 y 值的单位是万元,MSE 计算出来的是万元的平方,对于这个值难以解释它的含义。RMSE 其实就是对MSE开平方根,公式如下:
RMSE=n1i=1∑n(y(i)−y^(i))2
可以看到 MSE 和 RMSE 二者是呈正相关的,MSE 值大,RMSE 值也大,所以在评价线性回归模型效果的时候,使用 RMSE 就可以了。
4. 决定系数(R2)
当数据集不同时,或者说数据集预测目标的量纲不同时,上面三种评估方式的结果就不好比较了。R2把预测目标的均值作为参照,例如房价数据集的房价均值,学生成绩的成绩均值。现在我们把这个均值当成一个基准参照模型,也叫 baseline model。这个均值模型对任何数据的预测值都是一样的,可以想象该模型效果自然很差。基于此我们才会想从数据集中寻找规律,建立更好的模型。
R2公式如下:
R2=1−∑i=1n(yˉ−y^(i))2∑i=1n(y(i)−y^(i))2=1−n1∑i=1n(yˉ−y^(i))2n1∑i=1n(y(i)−y^(i))2=1−VARMSE
R2= 1,达到最大值。即分子为 0 ,意味着样本中预测值和真实值完全相等,没有任何误差。也就是说我们建立的模型完美拟合了所有真实数据,是效果最好的模型,R2值也达到了最大。但通常模型不会这么完美,总会有误差存在,当误差很小的时候,分子小于分母,模型会趋近 1,仍然是好的模型,随着误差越来越大,$R^2 $也会离最大值 1 越来越远,直到出现下面的情况。
R2= 0,此时分子等于分母,样本的每项预测值都等于均值。也就是说我们辛苦训练出来的模型和前面说的均值模型完全一样,还不如不训练,直接让模型的预测值全去均值。当误差越来越大的时候就出现了第三种情况。
R2< 0 ,分子大于分母,训练模型产生的误差比使用均值产生的还要大,也就是训练模型反而不如直接去均值效果好。出现这种情况,通常是模型本身不是线性关系的,而我们误使用了线性模型,导致误差很大。
参考资料:
【机器学习12】线性回归算法评价指标:MSE、RMSE、R2_score
周志华 《机器学习》
李航 《统计学习方法 第二版》