文章目录
1. 线性回归公式
线性回归算法就是找到一条直线(一元线性回归)或一个平面(多元线性回归)能够根据输入的特征向量 X X X 来更好的预测输出 Y Y Y 的值,本质上 X X X 与 Y Y Y 是线性相关的。
输入数据:
(
Y
i
,
X
i
1
,
⋯
,
X
i
p
)
,
i
=
1
,
⋯
,
n
\left(Y_{i}, X_{i 1}, \cdots, X_{i p}\right), \quad i=1, \cdots, n
(Yi,Xi1,⋯,Xip),i=1,⋯,n
假设函数 (hypotheses function):
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
…
+
θ
n
x
n
=
∑
i
=
1
n
θ
i
x
i
h_{\theta}(x)=\theta_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}+\ldots+\theta_{n} x_{n}=\sum_{i=1}^{n} \theta_{i} x_{i}
hθ(x)=θ0+θ1x1+θ2x2+…+θnxn=∑i=1nθixi
损失函数 (loss function):
L
(
θ
)
=
(
h
θ
(
x
)
−
y
)
2
L(\theta)=\left(h_{\theta}(x)-y\right)^{2}
L(θ)=(hθ(x)−y)2 (单个样本)
代价函数 (cost function):
J
(
θ
)
=
1
2
n
∑
i
=
1
n
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
=
1
2
n
∑
i
=
1
n
(
θ
T
x
(
i
)
−
y
(
i
)
)
2
=
1
2
n
(
X
θ
−
y
)
T
(
X
θ
−
y
)
\begin{aligned} J(\theta) &=\frac{1}{2 n} \sum_{i=1}^{n}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2} \\ &=\frac{1}{2 n} \sum_{i=1}^{n}\left(\theta^{T} x^{(i)}-y^{(i)}\right)^{2} \\ &=\frac{1}{2 n}(X \theta-y)^{T}(X \theta-y) \end{aligned}
J(θ)=2n1i=1∑n(hθ(x(i))−y(i))2=2n1i=1∑n(θTx(i)−y(i))2=2n1(Xθ−y)T(Xθ−y)
最小二乘法是因为用“差的平方”来表示点和直线的误差,而不是“差的绝对值”,因为它是 最佳线性无偏估计。证明 - 链接
参考链接 - 马同学 - 如何理解最小二乘法?
- 使用梯度下降法[第2章节],使代价函数损失值最小
∂ ∂ θ j J ( θ ) = ∂ ∂ θ j 1 2 n ∑ i = 1 n ( h θ ( x ( i ) ) − y ( i ) ) 2 = 2 ∗ 1 2 n ∑ i = 1 n [ ( h θ ( x ( i ) ) − y ( i ) ) ∂ ∂ θ j ( h θ ( x ( i ) ) − y ( i ) ) ] = 1 n ∑ i = 1 n [ ( h θ ( x ( i ) ) − y ( i ) ) ∂ ∂ θ j ( ∑ f = 0 m θ f x f ( i ) − y ( i ) ) ] = 1 n ∑ i = 1 n [ ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) ] \begin{aligned} \frac{\partial}{\partial \theta_{j}} J(\theta) &=\frac{\partial}{\partial \theta_{j}} \frac{1}{2 n} \sum_{i=1}^{n}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2} \\ &=2 * \frac{1}{2 n} \sum_{i=1}^{n}\left[\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) \frac{\partial}{\partial \theta_{j}}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)\right] \\ &=\frac{1}{n} \sum_{i=1}^{n}\left[\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) \frac{\partial}{\partial \theta_{j}}\left(\sum_{f=0}^{m} \theta_{f} x_{f}^{(i)}-y^{(i)}\right)\right] \\ &=\frac{1}{n} \sum_{i=1}^{n}\left[\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)}\right] \end{aligned} ∂θj∂J(θ)=∂θj∂2n1i=1∑n(hθ(x(i))−y(i))2=2∗2n1i=1∑n[(hθ(x(i))−y(i))∂θj∂(hθ(x(i))−y(i))]=n1i=1∑n⎣⎡(hθ(x(i))−y(i))∂θj∂⎝⎛f=0∑mθfxf(i)−y(i)⎠⎞⎦⎤=n1i=1∑n[(hθ(x(i))−y(i))xj(i)]
- 补充, h θ ( x ( i ) ) = ∑ f = 0 m θ f x f ( i ) = θ 0 x 0 ( i ) + θ 1 x 1 ( i ) + ⋯ + θ j x j ( i ) + ⋯ + θ m x m ( i ) h_{\theta}\left(x^{(i)}\right)=\sum_{f=0}^{m} \theta_{f} x_{f}^{(i)}=\theta_{0} x_{0}^{(i)}+\theta_{1} x_{1}^{(i)}+ \cdots +\theta_{j} x_{j}^{(i)}+ \cdots +\theta_{m} x_{m}^{(i)} hθ(x(i))=∑f=0mθfxf(i)=θ0x0(i)+θ1x1(i)+⋯+θjxj(i)+⋯+θmxm(i), m m m 和 f f f 字母任意,为了和 n n n与 i i i 混淆
- 迭代公式: θ j : = θ j + α 1 n ∑ i = 1 n ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) \theta_{j}:=\theta_{j}+\alpha \frac{1}{n} \sum_{i=1}^{n}(y^{(i)}-h_{\theta}(x^{(i)}))x_j^{(i)} θj:=θj+αn1∑i=1n(y(i)−hθ(x(i)))xj(i)
解析解:
θ
^
=
(
X
T
X
)
−
1
X
T
Y
\hat{\theta}=\left(X^{T} X\right)^{-1} X^{T} Y
θ^=(XTX)−1XTY
∂
θ
J
(
θ
)
=
∂
θ
[
1
2
(
X
θ
−
y
)
T
(
X
θ
−
y
)
]
=
∂
θ
[
1
2
(
θ
T
X
T
−
y
T
)
(
X
θ
−
y
)
]
=
∂
θ
[
1
2
(
θ
T
X
T
X
θ
−
θ
T
X
T
y
−
y
T
X
θ
+
y
T
y
)
]
=
1
2
[
2
X
T
X
θ
−
X
T
y
−
(
y
T
X
)
T
]
=
X
T
X
θ
−
X
T
y
=
0
\begin{aligned} \partial_{\theta} J(\theta) &=\partial_{\theta}\left[\frac{1}{2}(X \theta-y)^{T}(X \theta-y)\right] \\ &=\partial_{\theta}\left[\frac{1}{2}\left(\theta^{T} X^{T}-y^{T}\right)(X \theta-y)\right] \\ &=\partial_{\theta}\left[\frac{1}{2}\left(\theta^{T} X^{T} X \theta-\theta^{T} X^{T} y-y^{T} X \theta+y^{T} y\right)\right] \\ &=\frac{1}{2}\left[2 X^{T} X \theta-X^{T} y-\left(y^{T} X\right)^{T}\right] \\ &=X^{T} X \theta-X^{T} y=0 \end{aligned}
∂θJ(θ)=∂θ[21(Xθ−y)T(Xθ−y)]=∂θ[21(θTXT−yT)(Xθ−y)]=∂θ[21(θTXTXθ−θTXTy−yTXθ+yTy)]=21[2XTXθ−XTy−(yTX)T]=XTXθ−XTy=0
求参数 θ ^ \hat{\theta} θ^ ,发现其涉及到了矩阵的可逆问题,如果 X T X X^{T} X XTX 可逆,那么参数 θ ^ \hat{\theta} θ^ 的解唯一; 如果不可逆, 则此时就无法使用正规方程求导的方法来解。
若 X T X X^{T} X XTX 可逆,通过最小二乘法的矩阵算法求出 θ ^ = ( X T X ) − 1 X T Y = X † Y \hat{\theta}=\left(X^{T} X\right)^{-1} X^{T} Y=X^{\dagger} Y θ^=(XTX)−1XTY=X†Y,其中 X † X^{\dagger} X† 在数学上被称为 伪逆,伪逆 X † X^{\dagger} X† 是被 numpy 所支持,
pinvX = np.linalg.pinv(X)
# 计算伪逆 ;theta = pinvX @ y
# 最小二乘法的矩阵算法
补充:
- θ T X T X θ \theta^TX^TX\theta θTXTXθ为对角矩阵, ∣ A A T ∣ = ∣ A ∣ ∣ A T ∣ = ∣ A ∣ 2 | AA^T|=|A||A^T|={|A|}^2 ∣AAT∣=∣A∣∣AT∣=∣A∣2
- 向量偏导数, ∂ ( x ⃗ T A x ⃗ ) ∂ x ⃗ = 2 A x ⃗ , ∂ A x ⃗ ∂ x ⃗ = A T , ∂ A x ⃗ ∂ x ⃗ T = A , ∂ ( x ⃗ T A ) ∂ x ⃗ = A \frac{\partial (\vec{x}^TA \vec{x})}{\partial \vec{x}} =2A\vec{x}, \qquad\frac{\partial A \vec{x}}{\partial \vec{x}} =A^{T}, \qquad \frac{\partial A \vec{x}}{\partial \vec{x}^{T}} =A, \qquad \frac{\partial\left(\vec{x}^{T} A\right)}{\partial \vec{x}} =A ∂x∂(xTAx)=2Ax,∂x∂Ax=AT,∂xT∂Ax=A,∂x∂(xTA)=A
线性回归一些具体描述与推导可参考这篇博文-链接
2. 梯度下降
随机初始化
θ
\theta
θ,设置步长
α
\alpha
α ,设置迭代次数
m
m
m,求
J
(
θ
)
J(\theta)
J(θ) 的导数
∇
J
(
θ
)
\nabla J(\theta)
∇J(θ)
f
o
r
i
=
0
t
o
m
for\quad i =0\quad to \quad m
fori=0tom
θ
:
=
θ
−
α
∇
J
(
θ
)
\qquad\theta:=\theta-\alpha \nabla J(\theta)
θ:=θ−α∇J(θ)
2.1 梯度的概念
导数的意义:给定任意一个方向的变化率,是一个标量,反映的是一个函数的变化量。
方向导数:指定方向上的变化率
偏微分:给定自变量的方向,函数沿着 X 轴,沿着 Y 轴的变化趋势,也是一个标量。
梯度:把所有的偏微分当作一个向量来理解。向量的每一个轴是每一个方向上的偏微分。 ∇ f = ( ∂ f ∂ x 1 ; ∂ f ∂ x 2 ; … ; ∂ f ∂ x n ) \nabla f=\left(\frac{\partial f}{\partial x_{1}} ; \frac{\partial f}{\partial x_{2}} ; \ldots ; \frac{\partial f}{\partial x_{n}}\right) ∇f=(∂x1∂f;∂x2∂f;…;∂xn∂f)
梯度 有大小和方向。大小:可以反映变化趋势,方向:代表增长的方向。 梯度是一个向量,方向为方向导数
取得最大值的方向。
例子:
- x , y 代表的是函数的两个自变量, 箭头反映的是这个函数在x,y平面上的一个梯度。
- 箭头的长度代表这个梯度的大小,梯度的模。反应变化趋势
- 箭头的方向代表梯度所指的方向。代表增长的方向。
图中 红色 部分代表最高点,蓝色 部分代表最低点。在最高点求偏导下山,方向不止一个,求得是局部最小值。(若函数是严格的凸函数,可求得全局最小值)。
根据第1章线性回归梯度更新公式 θ j : = θ j + α 1 n ∑ i = 1 n ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) \theta_{j}:=\theta_{j}+\alpha \frac{1}{n} \sum_{i=1}^{n}(y^{(i)}-h_{\theta}(x^{(i)}))x_j^{(i)} θj:=θj+αn1∑i=1n(y(i)−hθ(x(i)))xj(i) ,引入实际范例中计算。表格数据中有两个特征量 x 1 , x 2 x_1, x_2 x1,x2和一个输出值 y y y,根据假设函数公式,引入特征量 x 0 x_0 x0,其值均为1。则特征数量 m = 3 m=3 m=3。表格中有2行数据,则数据量 n = 2 n=2 n=2。
引入特征量 x 0 x_0 x0 | 房子面积 x 1 x_1 x1 | 房子朝向 x 2 x_2 x2 | 房子每平米价格 y y y |
---|---|---|---|
1 | 200 | 1 | 305 |
1 | 120 | 2 | 130 |
y ( i ) − h θ ( x ( i ) ) = Y − X Θ = [ y ( 1 ) y ( 2 ) ⋮ y ( n ) ] − ( x 0 ( 1 ) x 1 ( 1 ) x 2 ( 1 ) ⋯ x m ( 1 ) x 0 ( 2 ) x 1 ( 2 ) x 2 ( 2 ) ⋯ x m ( 2 ) ⋮ ⋮ ⋮ ⋱ ⋮ x 0 ( n ) x 1 ( n ) x 2 ( n ) ⋯ x m ( n ) ) ⋅ [ θ 0 θ 1 ⋮ θ m ] y^{(i)}-h_{\theta}(x^{(i)})=Y-X\Theta =\begin{bmatrix} y^{(1)}\\ y^{(2)}\\ \vdots\\ y^{(n)}\\ \end{bmatrix} - \begin{pmatrix} x_0^{(1)}&x_1^{(1)}&x_2^{(1)}&\cdots&x_m^{(1)}\\ x_0^{(2)}&x_1^{(2)}&x_2^{(2)}&\cdots&x_m^{(2)}\\ \vdots&\vdots&\vdots&\ddots&\vdots\\ x_0^{(n)}&x_1^{(n)}&x_2^{(n)}&\cdots&x_m^{(n)}\\ \end{pmatrix} \cdot \begin{bmatrix} \theta_0\\ \theta_1\\ \vdots\\ \theta_m\\ \end{bmatrix} y(i)−hθ(x(i))=Y−XΘ=⎣⎢⎢⎢⎡y(1)y(2)⋮y(n)⎦⎥⎥⎥⎤−⎝⎜⎜⎜⎜⎛x0(1)x0(2)⋮x0(n)x1(1)x1(2)⋮x1(n)x2(1)x2(2)⋮x2(n)⋯⋯⋱⋯xm(1)xm(2)⋮xm(n)⎠⎟⎟⎟⎟⎞⋅⎣⎢⎢⎢⎡θ0θ1⋮θm⎦⎥⎥⎥⎤
假设函数
h
θ
(
x
)
=
θ
0
x
0
+
θ
1
x
1
+
θ
2
x
2
h_{\theta}(x)=\theta_{0} x_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}
hθ(x)=θ0x0+θ1x1+θ2x2,随机给定
θ
0
=
0.1
,
θ
1
=
0.01
,
θ
2
=
0.3
\theta_{0}=0.1, \quad\theta_{1}=0.01,\quad \theta_{2}=0.3
θ0=0.1,θ1=0.01,θ2=0.3,则
h
θ
(
x
)
=
0.1
x
0
+
0.01
x
1
+
0.3
x
2
h_{\theta}(x)=0.1x_{0}+0.01 x_{1}+0.3 x_{2}
hθ(x)=0.1x0+0.01x1+0.3x2,指定学习率
α
=
0.01
\alpha=0.01
α=0.01,进行迭代,更新
θ
\theta
θ。
θ
0
=
0.1
+
0.01
×
1
2
×
[
(
y
(
1
)
−
h
θ
(
x
(
1
)
)
)
⋅
x
0
1
+
(
y
(
2
)
−
h
θ
(
x
(
2
)
)
)
⋅
x
0
2
]
=
0.1
+
0.01
×
1
2
×
[
(
305
−
(
0.1
×
1
+
0.01
×
200
+
0.3
×
1
)
)
×
1
+
(
130
−
(
0.1
×
1
+
0.01
×
120
+
0.3
×
2
)
)
×
1
]
=
1.7535
\begin{aligned} \theta_0&=0.1+0.01 \times \frac{1}{2}\times[(y^{(1)}-h_{\theta}(x^{(1)}))\cdot x_0^{1}+(y^{(2)}-h_{\theta}(x^{(2)}))\cdot x_0^{2}]\\ &=0.1 +0.01\times \frac{1}{2}\times[(305-(0.1\times1+ 0.01\times200+0.3\times1))\times1+(130-(0.1\times1+ 0.01\times120+0.3\times2))\times1]\\ &= 1.7535 \end{aligned}
θ0=0.1+0.01×21×[(y(1)−hθ(x(1)))⋅x01+(y(2)−hθ(x(2)))⋅x02]=0.1+0.01×21×[(305−(0.1×1+0.01×200+0.3×1))×1+(130−(0.1×1+0.01×120+0.3×2))×1]=1.7535
θ 1 = 0.01 + 0.01 × 1 2 × [ ( y ( 1 ) − h θ ( x ( 1 ) ) ) ⋅ x 1 1 + ( y ( 2 ) − h θ ( x ( 2 ) ) ) ⋅ x 1 2 ] = 0.01 + 0.01 × 1 2 × [ ( 305 − ( 0.1 × 1 + 0.01 × 200 + 0.3 × 1 ) ) × 200 + ( 130 − ( 0.1 × 1 + 0.01 × 120 + 0.3 × 2 ) ) × 120 ] = 379.47 \begin{aligned} \theta_1&=0.01+0.01 \times \frac{1}{2}\times[(y^{(1)}-h_{\theta}(x^{(1)}))\cdot x_1^{1}+(y^{(2)}-h_{\theta}(x^{(2)}))\cdot x_1^{2}]\\ &=0.01 +0.01\times \frac{1}{2}\times[(305-(0.1\times1+ 0.01\times200+0.3\times1))\times200+(130-(0.1\times1+ 0.01\times120+0.3\times2))\times120]\\ &= 379.47 \end{aligned} θ1=0.01+0.01×21×[(y(1)−hθ(x(1)))⋅x11+(y(2)−hθ(x(2)))⋅x12]=0.01+0.01×21×[(305−(0.1×1+0.01×200+0.3×1))×200+(130−(0.1×1+0.01×120+0.3×2))×120]=379.47
θ
2
=
0.3
+
0.01
×
1
2
×
[
(
y
(
1
)
−
h
θ
(
x
(
1
)
)
)
⋅
x
2
1
+
(
y
(
2
)
−
h
θ
(
x
(
2
)
)
)
⋅
x
2
2
]
=
0.3
+
0.01
×
1
2
×
[
(
305
−
(
0.1
×
1
+
0.01
×
200
+
0.3
×
1
)
)
×
1
+
(
130
−
(
0.1
×
1
+
0.01
×
120
+
0.3
×
2
)
)
×
2
]
=
3.094
\begin{aligned} \theta_2&=0.3+0.01 \times \frac{1}{2}\times[(y^{(1)}-h_{\theta}(x^{(1)}))\cdot x_2^{1}+(y^{(2)}-h_{\theta}(x^{(2)}))\cdot x_2^{2}]\\ &=0.3 +0.01\times \frac{1}{2}\times[(305-(0.1\times1+ 0.01\times200+0.3\times1))\times1+(130-(0.1\times1+ 0.01\times120+0.3\times2))\times2]\\ &= 3.094 \end{aligned}
θ2=0.3+0.01×21×[(y(1)−hθ(x(1)))⋅x21+(y(2)−hθ(x(2)))⋅x22]=0.3+0.01×21×[(305−(0.1×1+0.01×200+0.3×1))×1+(130−(0.1×1+0.01×120+0.3×2))×2]=3.094
更新一次后,
h
θ
(
x
)
=
1.7535
x
0
+
379.47
x
1
+
3.094
x
2
h_{\theta}(x)=1.7535x_{0}+379.47 x_{1}+3.094 x_{2}
hθ(x)=1.7535x0+379.47x1+3.094x2,再进行第二次更新……
θ
\theta
θ 参数值 相差悬殊,因为在数据处理时 未进行归一化处理。
2.2 梯度下降法变种
2.2.1 批量梯度下降(Batch Gradient Descent BGD)
前文所描述的均是批量梯度下降, 计算较复杂
r
e
p
e
a
t
u
n
t
i
l
c
o
n
v
e
r
g
e
n
c
e
{
repeat \quad until \quad convergence \{
repeatuntilconvergence{
θ
j
:
=
θ
j
+
α
1
n
∑
i
=
1
n
(
y
(
i
)
−
h
θ
(
x
(
i
)
)
)
x
j
(
i
)
\qquad\quad\theta_{j}:=\theta_{j}+\alpha \frac{1}{n} \sum_{i=1}^{n}(y^{(i)}-h_{\theta}(x^{(i)}))x_j^{(i)}
θj:=θj+αn1∑i=1n(y(i)−hθ(x(i)))xj(i)
}
\}
}
2.2.2 随机梯度下降(Stochastic Gradient Descent SGD)
随机梯度下降方向不确定,容易发生震荡
r
e
p
e
a
t
u
n
t
i
l
c
o
n
v
e
r
g
e
n
c
e
{
repeat \quad until \quad convergence \{
repeatuntilconvergence{
θ
j
:
=
θ
j
+
α
(
y
(
i
)
−
h
θ
(
x
(
i
)
)
)
x
j
(
i
)
\qquad\quad\theta_{j}:=\theta_{j}+\alpha (y^{(i)}-h_{\theta}(x^{(i)}))x_j^{(i)}
θj:=θj+α(y(i)−hθ(x(i)))xj(i)
}
\}
}
2.2.3 小批量梯度下降(Mini-Batch Gradient Descent MBGD)
小批量梯度下降方法更合适数据量大的数据,每次使用batch_size
个样本进行更新
r
e
p
e
a
t
u
n
t
i
l
c
o
n
v
e
r
g
e
n
c
e
{
repeat \quad until \quad convergence \{
repeatuntilconvergence{
θ
j
:
=
θ
j
+
α
b
a
t
c
h
−
n
u
m
∑
i
=
1
b
a
t
c
h
−
n
u
m
(
y
(
i
)
−
h
θ
(
x
(
i
)
)
)
x
j
(
i
)
\qquad\quad\theta_{j}:=\theta_{j}+ \frac{\alpha}{batch-num} \sum_{i=1}^{batch-num}(y^{(i)}-h_{\theta}(x^{(i)}))x_j^{(i)}
θj:=θj+batch−numα∑i=1batch−num(y(i)−hθ(x(i)))xj(i)
}
\}
}
3. 模型评价
3.1 均方误差(MSE)
M S E = 1 n ∑ i = 1 n ( y ( i ) − y ^ ( i ) ) 2 M S E=\frac{1}{n} \sum_{i=1}^{n}\left(y^{(i)}-\hat{y}^{(i)}\right)^{2} MSE=n1i=1∑n(y(i)−y^(i))2
n n n: 样本数
3.2 均方根误差(RMSE)
R M S E = 1 n ∑ i = 1 n ( y ( i ) − y ^ ( i ) ) 2 R M S E=\sqrt{\frac{1}{n} \sum_{i=1}^{n}\left(y^{(i)}-\hat{y}^{(i)}\right)^{2}} RMSE=n1i=1∑n(y(i)−y^(i))2
3.3 平均绝对误差(MAE)
M A E = 1 n ∑ i = 1 n ∣ y ( i ) − y ^ ( i ) ∣ M A E=\frac{1}{n} \sum_{i=1}^{n}\left|y^{(i)}-\hat{y}^{(i)}\right| MAE=n1i=1∑n∣∣∣y(i)−y^(i)∣∣∣
4. 正则化
过拟合 问题是机器学习的关键问题,可以通过 增大数据集 和 减小模型复杂度 来解决。一般而言,数据集是很难增大的,更多是考虑减小模型复杂度,下一课看看如何更好地调节多项式回归模型的复杂度。
图源:马同学机器学习-监督式学习
加罚项的目的,就是为了降低模型复杂度。
参考链接 - 安然烟火 - LinearRegression、岭回归、Lasso回归和ElasticNet回归总结-附python3代码实战及回归检验
岭回归 与 Lasso回归 的出现是为了解决线性回归出现的 过拟合 以及在通过 正规方程方法求解 θ θ θ 的过程中出现的 ( X T X ) \left(X^{T} X\right) (XTX) 不可逆 这两类问题的,这两种回归均通过在损失函数中引入 正则化 项来达到目的。
在日常机器学习任务中,如果 数据集的特征比样本点还多, ( X T X ) − 1 \left(X^{T} X\right)^{-1} (XTX)−1的时候会出错。岭回归 最先用来处理特征数多于样本数的情况,现在也用于在估计中加入偏差,从而得到更好的估计。这里通过引入 λ \lambda λ 限制了所有 θ 2 \theta^2 θ2 之和,通过引入该惩罚项,能够减少不重要的参数,这个技术在统计学上也叫作 缩减(shrinkage)。和岭回归类似,另一个缩减 LASSO 也加入了正则项对回归系数做了限定。
为了防止过拟合( θ 2 \theta^2 θ2 过大),在目标函数 J ( θ ) J(\theta) J(θ)后添加复杂度惩罚因子,即正则项来防止过拟合。正则项可以使用 L1-norm(Lasso)、L2-norm(Ridge),或结合L1-norm、L2-norm(Elastic Net)。
简单的理解正则化:
- 正则化的目的:防止过拟合
- 正则化的本质:约束(限制)要优化的参数
5. 岭回归
如果样本数据过少导致线性回归拟合较差,则考虑采用 岭回归。如果输入特征的维度很高,而且是稀疏线性关系的话, 岭回归就不太合适,考虑使用 Lasso回归。
L2 范数正则化 解决过拟合(Ridge Regression,岭回归)
目标函数:
J
(
θ
)
=
1
2
n
∑
i
=
1
n
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
+
λ
∥
θ
∥
2
2
=
1
2
n
∑
i
=
1
n
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
+
λ
∑
j
=
1
m
θ
j
2
(
λ
>
0
)
J(\theta) =\frac{1}{2 n} \sum_{i=1}^{n}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}+\lambda\|\theta\|_{2}^{2}=\frac{1}{2 n} \sum_{i=1}^{n}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}+\lambda\sum_{j=1}^m\theta_j^2 \quad(\lambda>0)
J(θ)=2n1i=1∑n(hθ(x(i))−y(i))2+λ∥θ∥22=2n1i=1∑n(hθ(x(i))−y(i))2+λj=1∑mθj2(λ>0)
岭回归求解: ∂ ∂ θ j J ( θ ) = ∂ ∂ θ j 1 2 n ∑ i = 1 n ( h θ ( x ( i ) ) − y ( i ) ) 2 + ∂ ∂ θ j λ ∑ j = 1 m θ j 2 = 1 n ∑ i = 1 n [ ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) ] + 2 λ θ j \frac{\partial}{\partial \theta_{j}} J(\theta)=\frac{\partial}{\partial \theta_{j}} \frac{1}{2 n} \sum_{i=1}^{n}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}+\frac{\partial}{\partial \theta_{j}}\lambda\sum_{j=1}^m\theta_j^2=\frac{1}{n} \sum_{i=1}^{n}\left[\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)}\right]+2\lambda\theta_j ∂θj∂J(θ)=∂θj∂2n1∑i=1n(hθ(x(i))−y(i))2+∂θj∂λ∑j=1mθj2=n1∑i=1n[(hθ(x(i))−y(i))xj(i)]+2λθj
迭代公式: θ j : = θ j + α 1 n ∑ i = 1 n ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) − 2 λ θ j \theta_{j}:=\theta_{j}+\alpha \frac{1}{n} \sum_{i=1}^{n}(y^{(i)}-h_{\theta}(x^{(i)}))x_j^{(i)}-2\lambda\theta_j θj:=θj+αn1∑i=1n(y(i)−hθ(x(i)))xj(i)−2λθj
6. LASSO回归
L1正则化(Lasso回归) 可以使得一些特征的系数变小,甚至还使一些绝对值较小的系数直接变为 0,从而增强模型的泛化能力 。对于高的特征数据,尤其是线性关系是稀疏的,就采用 L1正则化(Lasso回归),或者是要在一堆特征里面找出主要的特征,那么 L1正则化(Lasso回归)更是首选了。
L1范数正则化 解决过拟合(LASSO回归)
目标函数:
J
(
θ
)
=
1
2
n
∑
i
=
1
n
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
+
λ
∣
θ
∣
1
=
1
2
n
∑
i
=
1
n
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
+
λ
∑
j
=
1
m
∣
θ
j
∣
(
λ
>
0
)
J(\theta) =\frac{1}{2 n} \sum_{i=1}^{n}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}+\lambda|\theta|_{1}=\frac{1}{2 n} \sum_{i=1}^{n}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}+\lambda\sum_{j=1}^m|\theta_j| \quad(\lambda>0)
J(θ)=2n1i=1∑n(hθ(x(i))−y(i))2+λ∣θ∣1=2n1i=1∑n(hθ(x(i))−y(i))2+λj=1∑m∣θj∣(λ>0)
LASSO回归求解,将
J
(
θ
)
J(\theta)
J(θ)前面系数
1
2
n
\frac{1}{2 n}
2n1去掉,对
θ
\theta
θ无影响。改写为
J
(
θ
)
=
∑
i
=
1
n
(
y
(
i
)
−
∑
j
=
0
m
θ
j
x
j
(
i
)
)
2
+
λ
∑
j
=
0
m
∣
θ
j
∣
J(\theta) =\sum_{i=1}^{n}\left(y^{(i)}-\sum_{j=0}^m\theta_jx_j^{(i)}\right)^{2}+\lambda\sum_{j=0}^m|\theta_j|
J(θ)=i=1∑n(y(i)−j=0∑mθjxj(i))2+λj=0∑m∣θj∣
将
J
(
θ
)
J(\theta)
J(θ)左、右两项拆开分别求导
① 残差部分
∑
i
=
1
n
(
y
(
i
)
−
∑
j
=
0
m
θ
j
x
j
(
i
)
)
2
\sum_{i=1}^{n}\left(y^{(i)}-\sum_{j=0}^m\theta_jx_j^{(i)}\right)^{2}
∑i=1n(y(i)−∑j=0mθjxj(i))2求导,为了区分
j
j
j 开来,使用
k
k
k对
θ
k
\theta_k
θk 进行求导区分
∂
∂
θ
k
RSS
(
θ
)
=
2
∑
i
=
1
n
(
y
(
i
)
−
∑
j
=
0
m
θ
j
x
j
(
i
)
)
(
−
x
k
(
i
)
)
=
−
2
∑
i
=
1
n
(
x
k
(
i
)
y
(
i
)
−
x
k
(
i
)
∑
j
=
0
m
θ
j
x
j
(
i
)
)
=
−
2
∑
i
=
1
n
(
x
k
(
i
)
y
(
i
)
−
x
k
(
i
)
∑
j
=
0
,
j
≠
k
m
θ
j
x
j
(
i
)
−
θ
k
x
k
(
i
)
2
)
=
−
2
∑
i
=
1
n
[
x
k
(
i
)
(
y
(
i
)
−
∑
j
=
0
,
j
≠
k
m
θ
j
x
j
(
i
)
)
]
+
2
θ
k
∑
i
=
1
n
x
k
(
i
)
2
\begin{array}{l} \frac{\partial}{\partial \theta_{k}} \operatorname{RSS}(\theta)=2 \sum_{i=1}^{n}\left(y^{(i)}-\sum_{j=0}^{m} \theta_{j} x_{j}^{(i)}\right)\left(-x_{k}^{(i)}\right) \\ =-2 \sum_{i=1}^{n}\left(x_{k}^{(i)} y^{(i)}-x_{k}^{(i)} \sum_{j=0}^{m} \theta_{j} x_{j}^{(i)}\right) \\ =-2 \sum_{i=1}^{n}\left(x_{k}^{(i)} y^{(i)}-x_{k}^{(i)} \sum_{j=0, j \neq k}^{m} \theta_{j} x_{j}^{(i)}-\theta_{k} x_{k}^{(i)^{2}}\right) \\ =-2 \sum_{i=1}^{n}\left[x_{k}^{(i)}\left(y^{(i)}-\sum_{j=0, j \neq k}^{m} \theta_{j} x_{j}^{(i)}\right)\right]+2 \theta_{k} \sum_{i=1}^{n} x_{k}^{(i)^{2}} \end{array}
∂θk∂RSS(θ)=2∑i=1n(y(i)−∑j=0mθjxj(i))(−xk(i))=−2∑i=1n(xk(i)y(i)−xk(i)∑j=0mθjxj(i))=−2∑i=1n(xk(i)y(i)−xk(i)∑j=0,j=kmθjxj(i)−θkxk(i)2)=−2∑i=1n[xk(i)(y(i)−∑j=0,j=kmθjxj(i))]+2θk∑i=1nxk(i)2
令
p
k
=
∑
i
=
1
n
[
x
k
(
i
)
(
y
(
i
)
−
∑
j
=
0
,
j
≠
k
m
θ
j
x
j
(
i
)
)
]
p_{k}=\sum_{i=1}^{n}\left[x_{k}^{(i)}\left(y^{(i)}-\sum_{j=0, j \neq k}^{m} \theta_{j} x_{j}^{(i)}\right)\right]
pk=∑i=1n[xk(i)(y(i)−∑j=0,j=kmθjxj(i))],
z
k
=
∑
i
=
1
n
x
k
(
i
)
2
z_{k}=\sum_{i=1}^{n} x_{k}^{(i)^{2}}
zk=∑i=1nxk(i)2
则
∂
∂
θ
k
R
S
S
(
θ
)
=
−
2
p
k
+
2
θ
k
z
k
\frac{\partial}{\partial \theta_{k}} RSS(\theta)=-2 p_{k}+2 \theta_{k} z_{k}
∂θk∂RSS(θ)=−2pk+2θkzk
② 对正则项
λ
∑
j
=
0
m
∣
θ
j
∣
\lambda\sum_{j=0}^m|\theta_j|
λ∑j=0m∣θj∣ 求偏导,
∣
θ
j
∣
|\theta_j|
∣θj∣分大于0,小于0,等于0讨论,且在等于0处不可导。
∂
∂
θ
k
R
(
θ
)
=
{
−
λ
θ
k
<
0
[
−
λ
,
λ
]
θ
k
=
0
λ
θ
k
>
0
\frac{\partial}{\partial \theta_{k}} R(\theta)=\left\{\begin{array}{ll}-\lambda & \theta_{k}<0 \\ {[-\lambda, \lambda]} & \theta_{k}=0 \\ \lambda & \theta_{k}>0\end{array}\right.
∂θk∂R(θ)=⎩⎨⎧−λ[−λ,λ]λθk<0θk=0θk>0
③ 对整体求偏导
∂
∂
θ
k
J
(
θ
)
=
−
2
p
k
+
2
θ
k
z
k
+
{
−
λ
θ
k
<
0
[
−
λ
,
λ
]
θ
k
=
0
λ
θ
k
>
0
=
{
−
2
p
k
+
2
θ
k
z
k
−
λ
θ
k
<
0
[
−
2
p
k
−
λ
,
−
2
p
k
+
λ
]
θ
k
=
0
−
2
p
k
+
2
θ
k
z
k
+
λ
θ
k
>
0
\frac{\partial}{\partial \theta_{k}} J(\theta)=-2 p_{k}+2 \theta_{k} z_{k}+\left\{\begin{array}{ll} -\lambda & \theta_{k}<0 \\ {[-\lambda, \lambda]} & \theta_{k}=0 \\ \lambda & \theta_{k}>0 \end{array}=\left\{\begin{array}{ll} -2 p_{k}+2 \theta_{k} z_{k}-\lambda & \theta_{k}<0 \\ {\left[-2 p_{k}-\lambda,-2 p_{k}+\lambda\right]} & \theta_{k}=0 \\ -2 p_{k}+2 \theta_{k} z_{k}+\lambda & \theta_{k}>0 \end{array}\right.\right.
∂θk∂J(θ)=−2pk+2θkzk+⎩⎨⎧−λ[−λ,λ]λθk<0θk=0θk>0=⎩⎨⎧−2pk+2θkzk−λ[−2pk−λ,−2pk+λ]−2pk+2θkzk+λθk<0θk=0θk>0
令
∂
∂
θ
k
J
(
θ
)
=
0
\frac{\partial}{\partial \theta_{k}} J(\theta)=0
∂θk∂J(θ)=0 得
θ
k
=
{
(
p
k
+
λ
/
2
)
/
z
k
p
k
<
−
λ
/
2
0
−
λ
/
2
≤
p
k
≤
λ
/
2
(
p
k
−
λ
/
2
)
/
z
k
p
k
>
λ
/
2
<
/
f
o
n
t
>
\theta_{k}=\left\{\begin{array}{ll} \left(p_{k}+\lambda / 2\right) / z_{k} & p_{k}<-\lambda / 2 \\ 0 & -\lambda / 2 \leq p_{k} \leq \lambda / 2 \\ \left(p_{k}-\lambda / 2\right) / z_{k} & p_{k}>\lambda / 2 \end{array}\right.</font>
θk=⎩⎨⎧(pk+λ/2)/zk0(pk−λ/2)/zkpk<−λ/2−λ/2≤pk≤λ/2pk>λ/2</font>
最终迭代公式: 令
p
k
=
∑
i
=
1
n
[
x
k
(
i
)
(
y
(
i
)
−
∑
j
=
0
,
j
≠
k
m
θ
j
x
j
(
i
)
)
]
p_{k}=\sum_{i=1}^{n}\left[x_{k}^{(i)}\left(y^{(i)}-\sum_{j=0, j \neq k}^{m} \theta_{j} x_{j}^{(i)}\right)\right]
pk=∑i=1n[xk(i)(y(i)−∑j=0,j=kmθjxj(i))],
z
k
=
∑
i
=
1
n
x
k
(
i
)
2
z_{k}=\sum_{i=1}^{n} x_{k}^{(i)^{2}}
zk=∑i=1nxk(i)2
θ
k
=
{
(
p
k
+
λ
/
2
)
/
z
k
p
k
<
−
λ
/
2
0
−
λ
/
2
≤
p
k
≤
λ
/
2
(
p
k
−
λ
/
2
)
/
z
k
p
k
>
λ
/
2
\theta_{k}=\left\{\begin{array}{ll} \left(p_{k}+\lambda / 2\right) / z_{k} & p_{k}<-\lambda / 2 \\ 0 & -\lambda / 2 \leq p_{k} \leq \lambda / 2 \\ \left(p_{k}-\lambda / 2\right) / z_{k} & p_{k}>\lambda / 2 \end{array}\right.
θk=⎩⎨⎧(pk+λ/2)/zk0(pk−λ/2)/zkpk<−λ/2−λ/2≤pk≤λ/2pk>λ/2
带入2.1章节例子进行梯度更新:
引入特征量 x 0 x_0 x0 | 房子面积 x 1 x_1 x1 | 房子朝向 x 2 x_2 x2 | 房子每平米价格 y y y |
---|---|---|---|
1 | 200 | 1 | 305 |
1 | 120 | 2 | 130 |
p 0 p_0 p0、 z 0 z_0 z0 | p 1 p_1 p1、 z 1 z_1 z1 | p 2 p_2 p2、 z 2 z_2 z2 |
对应每一项都有相应
p
k
p_k
pk 和
z
k
z_k
zk,
k
=
1
,
2
,
3
k=1,2,3
k=1,2,3。
分别求
p
1
p_1
p1和
z
1
z_1
z1举例,此时
k
=
1
,
n
=
2
,
m
=
3
(
3
个
值
)
k=1,n=2,m=3(3个值)
k=1,n=2,m=3(3个值)。(
i
i
i分别等于1,2;内嵌
j
j
j分别等于0,2)
p
1
=
∑
i
=
1
n
[
x
1
(
i
)
(
y
(
i
)
−
∑
j
=
0
,
j
≠
1
m
θ
j
x
j
(
i
)
)
]
=
[
200
×
(
305
−
(
θ
0
⋅
x
0
(
1
)
+
θ
2
⋅
x
2
(
1
)
)
+
120
×
(
130
−
(
θ
0
⋅
x
0
(
2
)
+
θ
2
⋅
x
2
(
2
)
)
)
]
p_{1}=\sum_{i=1}^{n}\left[x_{1}^{(i)}\left(y^{(i)}-\sum_{j=0, j \neq 1}^{m} \theta_{j} x_{j}^{(i)}\right)\right]=[200\times(305-(\theta_0\cdot x_0^{(1)}+\theta_2\cdot x_2^{(1)})+120\times(130-(\theta_0\cdot x_0^{(2)}+\theta_2\cdot x_2^{(2)}))]
p1=i=1∑n⎣⎡x1(i)⎝⎛y(i)−j=0,j=1∑mθjxj(i)⎠⎞⎦⎤=[200×(305−(θ0⋅x0(1)+θ2⋅x2(1))+120×(130−(θ0⋅x0(2)+θ2⋅x2(2)))]
z 1 = ∑ i = 1 n x 1 ( i ) 2 = x 1 ( 1 ) 2 + x 1 ( 2 ) 2 = 20 0 2 + 12 0 2 z_{1}=\sum_{i=1}^{n} x_{1}^{(i)^{2}}={x_1^{(1)}}^2+{x_1^{(2)}}^2=200^2+120^2 z1=i=1∑nx1(i)2=x1(1)2+x1(2)2=2002+1202
θ 1 = { ( p 1 + λ / 2 ) / z 1 p 1 < − λ / 2 0 − λ / 2 ≤ p 1 ≤ λ / 2 ( p 1 − λ / 2 ) / z 1 p 1 > λ / 2 \theta_{1}=\left\{\begin{array}{ll} \left(p_{1}+\lambda / 2\right) / z_{1} & p_{1}<-\lambda / 2 \\ 0 & -\lambda / 2 \leq p_{1} \leq \lambda / 2 \\ \left(p_{1}-\lambda / 2\right) / z_{1} & p_{1}>\lambda / 2 \end{array}\right. θ1=⎩⎨⎧(p1+λ/2)/z10(p1−λ/2)/z1p1<−λ/2−λ/2≤p1≤λ/2p1>λ/2
根据此方法,可分别求 p 0 , z 0 , θ 0 p_0,z_0,\theta_0 p0,z0,θ0与 p 2 , z 2 , θ 2 p_2,z_2,\theta_2 p2,z2,θ2;之后再进行多次迭代。
7. 实现代码
名称 | 代码链接 |
---|---|
梯度下降实例 | 梯度下降 |
线性回归实现 | 线性回归 |
LASSO回归实现 | LASSO回归 |
波士顿房价预测 | 房价预测 |
参考链接 - 深度之眼 机器学习寒假训练营
参考链接 - 安然烟火 - LinearRegression、岭回归、Lasso回归和ElasticNet回归总结-附python3代码实战及回归检验
参考链接 - github - NLPer-Interview/4-机器学习基础/回归模型1 - 线性回归.md