线性回归算法
3.1 线性回归基本概念
3.1.1 线性模型
机器学习将一个形如
h
w
,
b
(
x
)
=
<
x
,
y
>
+
b
(3.1)
h_{w,b}(x) = <x,y>+b \tag{3.1}
hw,b(x)=<x,y>+b(3.1)
的
R
n
→
R
\mathbb{R^n}\to\mathbb{R}
Rn→R 的函数称为一个线性模型,上式中
w
,
b
∈
R
n
w,b\in\mathbb{R^n}
w,b∈Rn 均为
n
n
n 维向量,
b
∈
R
b\in\mathbb{R}
b∈R 为偏置项。
<
w
,
x
>
<w,x>
<w,x>表示
w
w
w与
x
x
x的内积。当
n
=
1
n=1
n=1时,线性模型表示一条直线;
n
=
2
n=2
n=2时,线性模型表示个超平面;当
n
≥
3
n\geq3
n≥3时,表示
n
n
n维空间的超平面。
一般情况下,线性回归算法实际上是一个经验损失最小化算法
线性回归算法
样本空间 X ⊆ R n X\subseteq\mathbb{R^n} X⊆Rn
输入: m m m条训练数据 S = { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , . . . , ( x ( m ) , y ( m ) ) } S=\{(x^{(1) },y^{(1)}),(x^{(2) },y^{(2)}),...,(x^{(m) },y^{(m)}) \} S={(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))}
输出:线性模型 h w ∗ , b ∗ ( x ) = < w ∗ , x > + b ∗ h_{w^*,b^*}(x)=<w^*,x>+b^* hw∗,b∗(x)=<w∗,x>+b∗,使得 w ∗ 、 b ∗ w^*、b^* w∗、b∗为优化问题
m i n w ∈ R , b ∈ R 1 m ∑ i = 1 m ( < w , x ( i ) > + b − y ( i ) ) 2 \underset{w\in \mathbb{R},b\in \mathbb{R}}{min}{1\over m}\sum_{i=1}^m(<w,x^{(i)}>+b-y^{(i)})^2 w∈R,b∈Rminm1i=1∑m(<w,x(i)>+b−y(i))2
的最优解
3.1.2 均方误差
均方误差:将线性回归目标函数
m
i
n
w
∈
R
,
b
∈
R
1
m
∑
i
=
1
m
(
<
w
,
x
(
i
)
>
+
b
−
y
(
i
)
)
2
(3.2)
\underset{w\in \mathbb{R},b\in \mathbb{R}}{min}{1\over m}\sum_{i=1}^m(<w,x^{(i)}>+b-y^{(i)})^2 \tag{3.2}
w∈R,b∈Rminm1i=1∑m(<w,x(i)>+b−y(i))2(3.2)
称为均方误差
下面是均方误差线性模型的结果:
首先解释以下均方误差的几何意义,在几何学中将一点
P
P
P与直线
L
L
L之间纵向距离
d
d
d的平方称为直线
L
L
L对
P
P
P点的拟合误差。
P
P
P到
L
L
L的纵向距离为
P
P
P在
L
L
L上沿纵轴方向的投影点
Q
Q
Q与
P
P
P之间的距离。(文字看不懂直接看图doge)
这里可能就会产生疑问,为什么要加平方?
因为误差有正负,不平方会相互抵消掉。
那为什么不使用绝对值的和作为误差,其实完全可以使用绝对值,形式如下:
m
i
n
w
∈
R
,
b
∈
R
1
m
∑
i
=
1
m
∣
<
w
,
x
(
i
)
>
+
b
−
y
(
i
)
∣
\underset{w\in \mathbb{R},b\in \mathbb{R}}{min}{1\over m}\sum_{i=1}^m|<w,x^{(i)}>+b-y^{(i)}|
w∈R,b∈Rminm1i=1∑m∣<w,x(i)>+b−y(i)∣
不采用上面形式的原因我知道的是,绝对值函数不是处处可微,在迭代计算梯度时需要消耗额外的资源开销
3.1.3 似然函数
似然函数:给定随变量
Y
Y
Y,定义
L
i
k
e
(
w
∣
y
(
1
)
,
y
(
2
)
,
⋯
,
y
(
m
)
)
=
∏
i
=
1
n
p
w
(
Y
=
y
(
i
)
)
(3.3)
Like(w|y^{(1)},y^{(2)}, \cdots ,y^{(m)})=\prod_{i=1}^np_w(Y=y^{(i)}) \tag{3.3}
Like(w∣y(1),y(2),⋯,y(m))=i=1∏npw(Y=y(i))(3.3)
为
Y
Y
Y的
m
m
m个独立采样恰为
y
(
1
)
,
y
(
2
)
,
.
.
.
,
y
(
m
)
y^{(1)},y^{(2)},...,y^{(m)}
y(1),y(2),...,y(m)的概率,称其为概率分布
p
w
p_w
pw关于
y
(
1
)
,
y
(
2
)
,
.
.
.
,
y
(
m
)
y^{(1)},y^{(2)},...,y^{(m)}
y(1),y(2),...,y(m)的似然函数。
以下是概率统计中最大似然原则:如果
y
(
1
)
,
y
(
2
)
,
.
.
.
,
y
(
m
)
y^{(1)},y^{(2)},...,y^{(m)}
y(1),y(2),...,y(m)为
Y
Y
Y的
m
m
m个独立采样,而
w
∗
w^*
w∗是使得似然函数最大化的一组参数即:
w
∗
=
a
r
g
m
a
x
w
∈
R
n
L
i
k
e
(
w
∣
y
(
1
)
,
y
(
2
)
,
⋯
,
y
(
m
)
)
(3.4)
w^*=\underset{w\in \mathbb{R^n}}{argmax} Like(w|y^{(1)},y^{(2)}, \cdots ,y^{(m)})\tag{3.4}
w∗=w∈RnargmaxLike(w∣y(1),y(2),⋯,y(m))(3.4)
则可以判定
Y
Y
Y的概率分布是
p
w
∗
p_{w^*}
pw∗
就是说取定一组参数
w
w
w可以使所有样本在这组参数下的概率之积最大
用一个例子解释:
eg:抛三枚硬币三次的结果是 正,正,反
正面朝上则
Y
=
1
Y=1
Y=1;否则,
Y
=
0
Y=0
Y=0,其中
p
w
(
Y
=
1
)
=
w
p_w(Y=1)=w
pw(Y=1)=w。则似然函数为
L
i
k
e
(
w
∣
正正反
)
=
w
2
(
1
−
w
)
(3.5)
Like(w|正正反)=w^2(1-w)\tag{3.5}
Like(w∣正正反)=w2(1−w)(3.5)
求导容易解出
w
∗
=
2
/
3
w^*=2/3
w∗=2/3时似然函数取得最大值,根据似然函数判断出正面的概率为
2
/
3
2/3
2/3。
3.1.4 均方误差的统计学意义
明白似然函数之后来看以下均方误差的统计意义
在线性回归中,有一个对标签分布的基本假设。也就是说,对任意样本
x
x
x,标签分布
D
x
D_x
Dx都是一个正态分布。因此,如果模型
h
w
,
b
(
x
)
=
<
w
,
x
>
+
b
h_{w,b}(x)=<w,x>+b
hw,b(x)=<w,x>+b为标签的期望,则
D
x
=
N
(
h
w
,
b
(
x
)
,
σ
)
D_x=N(h_{w,b}(x),\sigma)
Dx=N(hw,b(x),σ),为简化记号,这里假设
σ
=
1
\sigma=1
σ=1,所以标签分布属于参数化的概率分布族
P
=
{
N
(
h
w
,
b
(
x
)
,
1
)
:
w
∈
R
n
,
b
∈
R
}
(3.6)
P=\{N(h_{w,b}(x),1):w\in\mathbb{R^n},b\in\mathbb{R} \}\tag{3.6}
P={N(hw,b(x),1):w∈Rn,b∈R}(3.6)
根据线性模型的定义,可以得出似然函数为
L
i
k
e
(
w
,
b
∣
y
(
1
)
,
y
(
2
)
,
⋯
,
y
(
m
)
)
=
∏
i
=
1
n
1
2
π
e
−
(
h
w
,
b
(
x
(
i
)
)
−
y
(
i
)
)
2
(3.7)
Like(w,b|y^{(1)},y^{(2)}, \cdots ,y^{(m)})=\prod_{i=1}^n\frac{1}{\sqrt{2\pi}}e^{-(h_{w,b}(x^{(i)})-y^{(i)})^2} \tag{3.7}
Like(w,b∣y(1),y(2),⋯,y(m))=i=1∏n2π1e−(hw,b(x(i))−y(i))2(3.7)
上式中的似然函数与均方误差有以下关系:
a
r
g
m
a
x
w
,
b
L
i
k
e
(
w
,
b
∣
y
(
1
)
,
y
(
2
)
,
⋯
,
y
(
m
)
)
=
a
r
g
m
i
n
w
,
b
1
m
∑
i
=
1
m
(
h
w
,
b
(
x
(
i
)
)
−
y
(
i
)
)
2
(3.8)
\underset{w,b}{argmax}Like(w,b|y^{(1)},y^{(2)}, \cdots ,y^{(m)})=\underset{w,b}{argmin}\frac{1}{m}\sum_{i=1}^m(h_{w,b}(x^{(i)})-y^{(i)})^2 \tag{3.8}
w,bargmaxLike(w,b∣y(1),y(2),⋯,y(m))=w,bargminm1i=1∑m(hw,b(x(i))−y(i))2(3.8)
上式是由(3.7)式的似然函数取对数,可将乘积转化为更简单的和式
最后让 x ~ = ( 1 , x ) , w ~ = ( b , w ) \widetilde{x}=(1,x),\widetilde{w}=(b,w) x =(1,x),w =(b,w),然后还将 x ~ , w ~ \widetilde{x},\widetilde{w} x ,w 表示成 x , w x,w x,w
线性回归算法(简化记号)
样本空间 X ⊆ R n X\subseteq\mathbb{R^n} X⊆Rn每个样本首位是1
输入: m m m条训练数据 S = { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , . . . , ( x ( m ) , y ( m ) ) } S=\{(x^{(1) },y^{(1)}),(x^{(2) },y^{(2)}),...,(x^{(m) },y^{(m)}) \} S={(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))}
输出:线性模型 h w ∗ , b ∗ ( x ) = < w ∗ , x > h_{w^*,b^*}(x)=<w^*,x> hw∗,b∗(x)=<w∗,x>,使得 w ∗ 、 b ∗ w^*、b^* w∗、b∗为优化问题
m i n w ∈ R 1 m ∑ i = 1 m ( < w , x ( i ) > − y ( i ) ) 2 \underset{w\in \mathbb{R}}{min}{1\over m}\sum_{i=1}^m(<w,x^{(i)}>-y^{(i)})^2 w∈Rminm1i=1∑m(<w,x(i)>−y(i))2
的最优解
3.1.5 决定系数
决定系数就是用来评价模型好坏的一个指标
决定系数:设
y
‾
=
1
m
∑
i
=
1
m
y
(
i
)
\overline{y}=\frac1m\sum_{i=1}^my^{(i)}
y=m1∑i=1my(i),定义
R
2
=
1
−
∑
i
=
1
m
(
h
(
x
(
i
)
)
−
y
(
i
)
)
2
∑
i
=
1
m
(
y
‾
−
y
(
i
)
)
2
(3.11)
R^2=1-\frac{\sum_{i=1}^m(h(x^{(i)}) - y^{(i)})^2}{\sum_{i=1}^m(\overline{y}-y^{(i)})^2}\tag{3.11}
R2=1−∑i=1m(y−y(i))2∑i=1m(h(x(i))−y(i))2(3.11)
决定系数是将平均值模型作为标尺
R
2
R^2
R2值越接近于1拟合效果越好
3.2 线性回归优化算法
线性回归的均方误差:
F
(
w
)
=
1
m
∑
i
=
1
m
(
<
w
,
x
(
i
)
>
−
y
(
i
)
)
2
(3.13)
F(w)=\frac1m\sum_{i=1}^m(<w,x^{(i)}>-y^{(i)})^2 \tag{3.13}
F(w)=m1i=1∑m(<w,x(i)>−y(i))2(3.13)
这是关于
w
w
w的可微凸函数,所以线性回归是一个凸优化问题。
凸集的定义为: 其几何意义表示为:如果集合C中任意2个元素连线上的点也在集合C中,则C为凸集。
凸函数可以理解为函数上任意两点的连线在函数上方。
凸优化问题就上在凸集和凸函数条件下的优化问题。
3.2.1 线性回归求解
首先定义
X
X
X和
y
y
y为如下矩阵:
X
=
[
x
(
1
)
T
x
(
2
)
T
⋮
x
(
m
)
T
]
,
y
=
[
y
(
1
)
y
(
2
)
⋮
y
(
m
)
]
X=\begin{bmatrix}x^{(1)T} \\ x^{(2)T}\\ \vdots \\x^{(m)T} \end{bmatrix},\quad y=\begin{bmatrix}y^{(1)} \\ y^{(2)}\\ \vdots \\y^{(m)} \end{bmatrix}
X=⎣
⎡x(1)Tx(2)T⋮x(m)T⎦
⎤,y=⎣
⎡y(1)y(2)⋮y(m)⎦
⎤
X
X
X是一个
m
×
n
m\times n
m×n矩阵,
y
y
y是一个
m
×
1
m\times 1
m×1矩阵,
X
X
X称为特征矩阵,
y
y
y称为标签向量。
n
n
n表示每个数据有n个特征,
m
m
m表示有m条数据
所以线性回归的目标函数等价于:
m
i
n
w
∈
R
n
F
(
w
)
=
∥
X
w
−
y
∥
2
(3.14)
\underset{w\in\mathbb{R^n}}{min}F(w)=\begin{Vmatrix} Xw-y \end{Vmatrix}^2 \tag{3.14}
w∈RnminF(w)=∥
∥Xw−y∥
∥2(3.14)
然后求出最优解就比较容易了,因为是凸函数,并且集合是全集,所以对(3.14)求导,导数值等于0的点就是最优解。
∇
F
(
w
)
=
2
X
T
X
w
−
2
X
T
y
=
0
(3.15)
\nabla F(w)=2X^TXw-2X^Ty=0 \tag{3.15}
∇F(w)=2XTXw−2XTy=0(3.15)
整理即可得出:
w
∗
=
(
X
T
X
)
−
1
X
T
y
(3.16)
w^*=(X^TX)^{-1}X^Ty \tag{3.16}
w∗=(XTX)−1XTy(3.16)
(3.15)式也成为正规方程。在
X
T
X
X^TX
XTX可逆时方程有唯一解(3.16)
3.2.2 特征标准化
例如在房价预测问题中人口数与卧室数,这两个特征分量的量级是不同的,量级较大的特征将主导模型的训练,可能忽视较小量级的特征分量。特征标准化就是把每个特征都转化到同一个量级。
在概率论中公式
x
j
(
i
)
←
x
j
(
i
)
−
μ
j
σ
j
x_j^{(i)}\leftarrow \frac{x_j^{(i)}-\mu_j }{\sqrt{\sigma_j}}
xj(i)←σjxj(i)−μj
x
j
(
i
)
∼
N
(
0
,
1
)
x_j^{(i)} \sim N(0,1)
xj(i)∼N(0,1)这只是一种方法,在实际应用中可根据情况选择
3.3 多项式回归
首先多项式回归和线性回归的区别如果模型中
x
x
x都是一次就是线性回归,大于一次就是多项式回归。下面就是多项式回归
多项式回归真的和线性回归没啥区别直接举个例子就能理解
eg:
x
=
(
1
,
x
1
,
x
2
)
x=(1,x_1,x_2)
x=(1,x1,x2),对x进行拟合就是线性模型,结果是一个平面
对
x
x
x处理一下变成
x
=
(
1
,
x
1
,
x
2
,
x
1
x
2
,
x
1
2
,
x
2
2
)
x=(1,x_1,x_2,x_1x_2,x_1^2,x_2^2)
x=(1,x1,x2,x1x2,x12,x22),再对
x
x
x拟合结果就是一个曲面,
from sklearn.preprocessing import PolynomialFeatures
#这个函数可以将数据变为指定的n次多项式
3.4 线性回归的正则化算法
3.4.1 L 2 L2 L2正则化|岭回归
线性回归的
L
2
L_2
L2正则化:
m
i
n
w
∈
R
n
F
(
w
)
=
1
m
∑
i
=
1
m
∥
X
w
−
y
∥
2
+
λ
∥
w
∥
2
\underset{w\in\mathbb{R^n}}{min}F(w)=\frac1m\sum_{i=1}^m\begin{Vmatrix} Xw-y \end{Vmatrix}^2 +\lambda\begin{Vmatrix} w \end{Vmatrix}^2
w∈RnminF(w)=m1i=1∑m∥
∥Xw−y∥
∥2+λ∥
∥w∥
∥2
前面有说到正规方程的解
w
∗
=
(
X
T
X
)
−
1
X
T
y
w^*=(X^TX)^{-1}X^Ty
w∗=(XTX)−1XTy,必须要
X
T
X
X^TX
XTX可逆,当特征个数n大于训练数据数m时,
X
T
X
X^TX
XTX不可逆,而当
X
T
X
X^TX
XTX不可逆时均方误差函数图像会呈现山岭状。
而在加入
L
2
L_2
L2正则化项之后
函数从凸函数变成严格凸函数,最优解变得唯一。
严格凸函数的证明可以去搜Hessian矩阵半正定。
当然这里只是说了加上正则化项的函数凸性的变化,其实加入正则化项的目的主要是减小过拟合。
3.4.2 L 2 L2 L2正则化|岭回归求解
岭回归目标函数:
m
i
n
w
∈
R
n
F
(
w
)
=
1
m
∑
i
=
1
m
∥
X
w
−
y
∥
2
+
λ
∥
w
∥
2
\underset{w\in\mathbb{R^n}}{min}F(w)=\frac1m\sum_{i=1}^m\begin{Vmatrix} Xw-y \end{Vmatrix}^2 +\lambda\begin{Vmatrix} w \end{Vmatrix}^2
w∈RnminF(w)=m1i=1∑m∥
∥Xw−y∥
∥2+λ∥
∥w∥
∥2
对上式求导:
∇
F
(
w
)
=
X
T
(
X
w
∗
−
y
)
+
m
λ
w
∗
=
0
\nabla F(w)=X^T(Xw^*-y)+m\lambda w^*=0
∇F(w)=XT(Xw∗−y)+mλw∗=0
最优解:
w
∗
=
(
X
T
X
+
m
λ
I
)
−
1
X
T
y
w^*=(X^TX+m\lambda I)^{-1}X^Ty
w∗=(XTX+mλI)−1XTy
其中
I
I
I是单位阵,并且
X
T
X
+
m
λ
I
X^TX+m\lambda I
XTX+mλI是可逆的
3.4.3 L 1 L_1 L1正则化|Lasso回归,弹性网回归
Lasso回归:
m
i
n
w
∈
R
n
F
(
w
)
=
1
m
∑
i
=
1
m
∥
X
w
−
y
∥
2
+
λ
∣
w
∣
\underset{w\in\mathbb{R^n}}{min}F(w)=\frac1m\sum_{i=1}^m\begin{Vmatrix} Xw-y \end{Vmatrix}^2 +\lambda |w |
w∈RnminF(w)=m1i=1∑m∥
∥Xw−y∥
∥2+λ∣w∣
弹性网回归:
m
i
n
w
∈
R
n
F
(
w
)
=
1
m
∑
i
=
1
m
∥
X
w
−
y
∥
2
+
r
λ
∥
w
∥
2
+
(
1
−
r
)
λ
∣
w
∣
\underset{w\in\mathbb{R^n}}{min}F(w)=\frac1m\sum_{i=1}^m\begin{Vmatrix} Xw-y \end{Vmatrix}^2 +r\lambda\begin{Vmatrix} w \end{Vmatrix}^2 + (1-r)\lambda |w|
w∈RnminF(w)=m1i=1∑m∥
∥Xw−y∥
∥2+rλ∥
∥w∥
∥2+(1−r)λ∣w∣
带绝对值的优化问题在后面搜索算法中会讲到,这里就不过多的说。
3.5 线性回归的特征选择算法
3.5.1 向前逐步回归|向后逐步回归
向前逐步回归:
简单来说就是在引入一个特征后能显著的减小模型的均方误差,则认为该特征与标签有关联;否则认为该特征与标签无关联。
#完成文件放到最后
#向前逐步回归算法
def forward_selection(self, X, y):
m,n = X.shape
A, C = [0], [i for i in range(1,n)]#初始化,A开始只有一个特征
for i in range(n-1):
MSE_A = self.compute_mse(X[:,A], y)
MSE_min, j_min = float("inf"), -1
j_min = -1
for j in C: #找出使均方误差下降最大的特征
MSE_j = self.compute_mse(X[:, A+[j]], y)
if MSE_j < MSE_min:
MSE_min, j_min = MSE_j, j
if self.f_test(MSE_A, MSE_min, m):#这里是一个f检验,判断是否接受
A.append(j_min) # 接受就在A中加入特征
C.remove(j_min)
else:
break
self.w = self.fit(X[:, A], y)
self.A = A
向后逐步回归:
和向前逐步回归相反,首先选择所有特征,然后根据均方误差受否显著增大来剔除已选择的特征。
3.5.2 分段回归
先说以下相关系数
u
,
v
∈
R
n
u,v\in \mathbb{R^n}
u,v∈Rn定义
c
o
r
r
(
u
,
v
)
=
<
u
,
v
>
∥
u
∥
∥
v
∥
corr(u,v)=\frac{<u,v>}{\begin{Vmatrix} u\end{Vmatrix}\begin{Vmatrix} v \end{Vmatrix}}
corr(u,v)=∥
∥u∥
∥∥
∥v∥
∥<u,v>
为
u
,
v
u,v
u,v之间的相关系数(其实就是余弦cos)
如果相关系数的绝对值越大即越接近于1,则
u
,
v
u,v
u,v之间的相关性越强,相关系数正负,表明正相关还是负相关。
分段回归就是在每一次循环中,首先计算当前参数对应模型的误差
r
=
y
−
X
w
r=y-Xw
r=y−Xw然后找出与
r
r
r相关系数的绝对值最高的特征
j
∗
j^*
j∗(特征矩阵
X
X
X的一列),然后根据正负相关使参数
w
w
w的沿着特征
j
∗
j^*
j∗(
w
w
w的第j个分量)前进一步。
下面是迭代过程中参数
w
w
w分量的变化。