从这篇博客开始将介绍机器学习中的比较重要的内容——回归,期间会穿插着涉及到的知识点,如正则化。
什么是回归(及线性回归)
概念
说到回归,一般都是指线性回归(linear regression),但从广义上来说线性回归是回归家族中的一种,也是最简单的一种。简单来说, 假设现在有一些数据点,我们用一条直线对这些点进行拟合(该线称为最佳拟合直线),这个拟合过程就称作回归。
回归算法是一种比较常用的机器学习算法,属于有监督算法,用来建立“解释”变量(自变量X)和观测值(因变量Y)之间的关系;从机器学习的角度来讲,用于构建一个算法模型(函数)来做属性(X)与标签(Y)之间的映射关系,在算法的学习过程中,试图寻找一个函数
h:R2→R 使得参数之间的关系拟合性最好。
回归算法中算法(函数)的最终结果是一个连续的数据值,输入值(属性值)是一个d维度的属性/数值向量。
“回归”一词的来历 :
今天我们所知道的回归是由达尔文(Charles Darwin)的表兄弟Francis Galton发明的。Galton于1877年完成了第一次回归预测,目的是根据上一代豌豆种子(双亲)的尺寸来预测下一代豌豆种子(孩子)的尺寸。Galton在大量对象上应用了回归分析,甚至包括人的身高。他注意到,如果双亲的高度比平均高度高,他们的子女也倾向于比平均高度高,但尚不及双亲。孩子的高度向着平均高度回退(回归)。Galton在多项研究上都注意到这个现象,所以尽管这个英文单词跟数值预测没有任何关系,但这种研究方法仍被称作回归 。
举例
举个房价预测的例子,现在有房屋面积及其对应的租赁价格如下
房屋面积(
m2) |
租赁价格(1000¥) |
10 |
0.8 |
15 |
1 |
20 |
1.8 |
30 |
2 |
50 |
3.2 |
60 |
3 |
60 |
3.1 |
70 |
3.5 |
请问,如果现在有一个房屋面积为55平,最终的租赁价格是多少比较合适?
比如近似满足y = ax + b。求得a b,代入55,就可得到大概价格。大致的函数图像如下:
当不仅仅考虑面积,还要考虑房间数数量。可在三维坐标系中表示。即:
h(x)=θ0+θ1x1+θ2x2
房屋面积(
m2) |
房间数量 |
租赁价格(1000¥) |
10 |
1 |
0.8 |
20 |
1 |
1.8 |
30 |
1 |
2.2 |
30 |
2 |
2.5 |
70 |
3 |
5.5 |
70 |
2 |
5.2 |
… |
… |
… |
如果考虑的因素更多,也就是有更多的维度呢?此时的表达式:
hθ(x)=θ0+θ1x1+…+θnxn=θ01+θ1x1+…+θnxn=θ0x0+θ1x1+…+θnxn=i=0∑nθixi=θTx
最终要求是计算出
θ 的值,并选择最优的
θ值构成算法公式。其中
x0=1,
θ0为偏置项,也就是截距。
ps:(线性回归的本质)
- 线性:θ最高次项为一次(
θ是我们最终要求得的值)
- 回归:Y(或者
hθ(x))连续
最小二乘法公式推导
误差
上面例子中找到的最终表达式就一定是正确的吗?不一定,往往存在误差,即每个样本的误差。就像上图中,那个平面是我们找到表达式,每个红点是真实的值,他们之间就可能会存在误差,记为
εn。
面积为10平和面积为70平之间有关系吗?没有。所以产生的误差
ε1和
ε2有关系吗?没有,也就是独立的。(独立同分布)
ε是在各个特征上的误差的叠加。
ε=(ε1,ε2,…,εn)根据中心极限定理,服从高斯正态分布,而且是均值为0。
y(i)=θTx(i)+ε(i)(1)
对于每个样本
x(i) 代入 h(x) 得到的估计值
y^(i) 与真实值
y(i) 存在的差值
ε(i)
总结一下,就是误差
ε(i)(1≤i≤n) 是独立同分布的,服从均值为0,方差为某定值
σ2 的高斯正态分布。(原因:中心极限定理)。实际问题中,很多随机现象可以看做众多因素的独立影响的综合反应,往往服从正态分布.
观察上面的(1)式,
y(i) 就是真实值,并且
ε(i) 满足均值为0的高斯正态分布,所以:
p(ε(i))=σ2π
1e−2σ2(ε(i))2(2)
把(1)式代入(2)式,得:
p(y(i)∣x(i);θ)=σ2π
1exp⎝⎜⎛−2σ2(y(i)−θTx(i))2⎠⎟⎞(3)
注:
ex 与
exp(x) 是一样的。
似然函数
构建似然函数。为什么要这样构建,可以参考《【最透彻】13_最大似然估计【小元老师】考研数学,概率论与数理统计》,小元老师讲得确实很透彻。
L(θ)=i=1∏mp(y(i)∣x(i);θ)=i=1∏mσ2π
1exp⎝⎜⎛−2σ2(y(i)−θTx(i))2⎠⎟⎞(4)
对数似然
初始目的是让似然函数
L(θ) 最大化,但不方便计算。现在把(4)式取对数(因为取对数不改变单调性,即
L(θ) 和
l(θ)单调性一致,并且能把上面的“累积”变成“累和”,从而简化运算)
l(θ)=logL(θ)=logi=1∏mσ2π
1exp⎝⎜⎛−2σ2(y(i)−θTx(i))2⎠⎟⎞=mlogσ2π
1−σ21∙21i=1∑m(y(i)−θTx(i))2(5)
目标函数
通过上面取对数,把似然函数
L(θ) 最大化问题转换成
l(θ)最大化问题。
因为(5)式中
mlogσ2π
1 与
σ21 是定值,所以
l(θ)的大小取决于
21∑i=1m(y(i)−θTx(i))2。当
21∑i=1m(y(i)−θTx(i))2 最小时
l(θ) 取得最大值。所以,似然函数
L(θ) 最大化等价于
21∑i=1m(y(i)−θTx(i))2 最小化。即得到最终的目标函数:
loss(yj,y^j)=J(θ)=21i=1∑m(hθ(x(i))−y(i))2(6)
我们的最终目的,就是让目标函数
J(θ)最小化。(这里给出
21的目的就是为了方便求导时化简用)
求解
θ
我们的基本思路就是,因为
J(θ) 是凸函数,在导数为0时,取得极值,所以重点就是求导。
J(θ)=21i=1∑m(hθ(x(i))−y(i))2=21(Xθ−y)T(Xθ−y)(7)
对(7)式((7)式的详细推导在文章最后有介绍)
J(θ) 求导(用到了矩阵求导,详细内容文章最后有介绍):
∇θJ(θ)=∇θ(21(Xθ−y)T(Xθ−y))=∇θ(21(θTXT−yT)(Xθ−y))=∇θ(21(θTXTXθ−θTXTy−yTXθ+yTy))=21(2XTXθ−XTy−XTy)=XTXθ−XTy(8)
导求为0,即
XTXθ−XTy=0,求得最优解
XTXθ−XTy=0⇓XTXθ=XTy⇓(XTX)−1XTXθ=(XTX)−1XTy⇓θ=(XTX)−1XTy
所以,最小二乘法(最小二乘法的定义文章最后有介绍)的参数最优解为:
θminJ(θ)=(XTX)−1XTy(9)
参数解析式优化
最小二乘法的使用要求矩阵
XTX 是可逆的;为了防止不可逆或者过拟合的问题存在,可以增加额外数据影响,使得最终的矩阵是可逆的:
θ=(XTX+λI)−1XTy(10)
(10)式(文章最后有推导,来帮助理解)其实是引入L2正则化的岭回归(后续博客会有专门介绍)的解。
由于矩阵的逆的求解是一个难处,尤其对数据量特别大的时候。所以实际中很少用最小二乘法。
总结
上面讲的线性回归,直观来讲就是找出自变量X和因变量Y的线性关系,也就我们要训练出来的就是这样一个模型:
hθ(x)=θ0+θ1x1+…+θnxn
实际上就是训练出
θ 值。通过模型,就能得到预测值,我们最终要做的就是预测值和真实值之间的差最小,可通过误差来反映,得到一个损失函数:
J(θ)=m1i=1∑m(y(i)−y^(i))
上文中是通过最大似然估计得到的目标函数:
J(θ)=21i=1∑m(hθ(x(i))−y(i))2
效果是一样的,这也是最小二乘法。
由于目标函数是一个凸函数的形式,那么在极值处取得最小值,也就是导数为0的时候。最终得到:
θminJ(θ)=(XTX)−1XTy
但有个要求,就是
XTX 必须可逆,此时保证不了,但正定矩阵一定可逆。而
XTX 是一个半正定矩阵,可以给他的对角线加一个偏移量,得到一个正定矩阵,即:
θ=(XTX+λI)−1XTy
这个式子,也是加上L2正则,即岭回归求解得到的式子,因此这个式子也能解决过拟合的问题。
补充
式子(7)的推导
对于列向量
α=(a1,a2,a3,…,am)T :
αTα=α∙α=a12+a22+a32+…+am2=i=1∑mai2
α∙α为向量点乘,也称为数量积或内积。
注意,我们在机器学习公式推导中用到的数据表示:
x(i):表示第 i 个样本;
xi:x 向量的第 i 维度的值。
对于真实的值构成的列向量
y=(y(1),y(2),y(3),…,y(m))T
以及对应的预测值构成的列向量
y^=(y^(1),y^(2),3^(1),…,y^(m))T
求得的参数解列向量
θ=(θ0,θ1,θ2,…,θn)T
而样本X(m条样本,样本的维度为n)为:
X=⎝⎜⎜⎜⎛x01x02⋮x0mx11x12⋮x1mx21x22⋮x2m⋯⋯⋱⋯xn1xn2⋮xnm⎠⎟⎟⎟⎞
其中
θ是未知数,可以写出关于
θ的方程组:
⎩⎪⎪⎪⎨⎪⎪⎪⎧x0(1)θ0+x1(1)θ1+x2(1)θ2+x0(2)θ0+x1(2)θ1+x2(2)θ2+x0(m)θ0+x1(m)θ1+x2(m)θ2+⋯⋯⋯⋯+xn(1)θn=y^(1)+xn(2)θn=y^(2)+xn(m)θn=y^(m)
也就是:
Xθ=y^
并且:
hθ(x(i))=x0(i)θ0+x1(i)θ1+x2(i)θ2+⋯+xn(i)θn=x(i)θ=y^(i)
所以:
J(θ)=21i=1∑m(hθ(x(i))−y(i))2=21i=1∑m(y^(i)−y(i))2=21((y^(1)−y(1))2+(y^(1)−y(1))2+⋯+(y^(n)−y(n))2)=21(y^−y)2=21(y^−y)∙(y^−y)=21(y^−y)T(y^−y)=21(Xθ−y)T(Xθ−y)
矩阵求导
式子(8)中用到了矩阵求导,常见的几个求导公式:
详细内容可参考《矩阵求导法则与性质》
对于上面的第2个式子,
f(x)=xTAx,当
A 为对称矩阵,即
A=AT时:
∂x∂f(x)=∂x∂(xTAx)=Ax+ATx=2Ax
在式子(8)中,
XTX 为对称矩阵,所以:
∂θ∂(θTXTXθ)=2XTXθ
对于式于(8)中的
θTXTy ,可以参考上面第4个式子中的第一个,即:
∂θ∂(θTXTy)=XTy
对于式子(8)中的
yTXθ,可以参考上面的第3个式子,即:
∂θ∂(yTXθ)=∂θ∂((XTy)Tθ)=XTy
而式子(8)的
yTy 为常数,求导为0,即:
∂θ∂(yTy)=0
所以有式子(8)中的:
∇θ(21(θTXTXθ−θTXTy−yTXθ+yTy))=21(2XTXθ−XTy−XTy)
式子(10)式的推导
上面的式子(9):
θminJ(θ)=(XTX)−1XTy
对于
(XTX)−1 ,如果存在,则必须行列式
∣XTX∣ > 0
而
∣XTX∣ 无法保证大于 0,可进行一下变换,引入非零向量
μ
μTXTXμ=(Xμ)T(Xμ)=(Xμ)∙(Xμ)≥0
可得
XTX 为半正定矩阵。而对于非零向量
μ,有
μTμ > 0
所以
μTXTXμ+μTμ>0μTXTXμ+μTIμ>0μTXTXμ+μTλIμ>0μT(XTX+λI)μ>0
所以
XTX+λI 为正定矩阵,即可逆。(因:正定矩阵可逆)
所以式子(9)转换为了式子(10)
θ=(XTX+λI)−1XTy
这样就一定能得最优解。同时,引入了 “
λI” 能有效防止过拟合。
对于式子(9),还可以从以下角度来理解(仅仅是为了帮助记忆):
原式子
Xθ=y, 要解出
θ ,必须消掉 X,即:
X−1Xθ=X−1y
如果 X 可逆,首先得满足 X 为方阵,而
XTX 为方阵, 所以,原式子
Xθ=y 两边同乘上
XT:
XTXθ=XTy
现在出现了
XTX ,两边再同乘
(XTX)−1 :
(XTX)−1(XTX)θ=(XTX)−1XTy
得到最终的解:
θ=(XTX)−1XTy
最小二乘法
我们都学过求解关于
x 的方程
Ax=y ,线性回归中是关于
θ 的方程
Xθ=y ,都是一样的。方程有时是没有解或多解的情况,这时,我们采取如下方针:
- 无解的情况下,至少给出一个答案
x ,使得
Ax 尽量“接近
y”
- 有很多解的情况下,从中选出一个最“合理”的解
要注意,这里我们说的“接近”“合理”都是没有定义的。根据要解决的问题的不同,对这些概念进行度量的方法也有所不同,这就不单单是数学能解决的问题了。
实际中我们经常采用以下标准:
-
Ax−y 的长度越小,我们认为越“接近”
-
x 的长度越小,我们认为越“合理”
(上面提到的长度,就是模长的意思)在这样的标准下,基于以上方针求解问题答案的方法,称为最小二乘法。最小二乘法作为常用的道具,在奇异值分解、广义逆矩阵等的计算中发挥着重要作用。
很显然,线性回归属于上面的第一种情况,是无解的情况。我们的目标就是解出
θ 使得
Xθ=y^ 尽量接近
y,也就是使误差
ε 尽量小。