normal equation(解析法)
求解目标函数如下,其中
X
X
X为所有样本的所有特征,是一个M(M个样本)行N(N个特征)列的矩阵,
Y
Y
Y是M个样本的真实值,是M行的列向量,
ω
\omega
ω是回归系数,是N行的列向量:
m
i
n
J
(
ω
)
=
∣
∣
Y
−
X
ω
∣
∣
2
min J(\omega)= ||Y-X\omega||^2
minJ(ω)=∣∣Y−Xω∣∣2
用解析法求解
ω
\omega
ω,要对
J
(
ω
)
J(\omega)
J(ω)求导,令导数为零:
d
J
(
ω
)
d
ω
=
2
(
Y
−
X
ω
)
⋅
(
−
X
T
)
=
0
\frac{d J(\omega)}{d\omega}=2(Y-X\omega )\cdot (-X^T)=0
dωdJ(ω)=2(Y−Xω)⋅(−XT)=0
因此解得:
X
T
Y
=
X
T
X
ω
ω
=
(
X
T
X
)
−
1
X
T
Y
\begin{aligned} & X^T Y = X^TX\omega \\ & \omega =(X^TX)^{-1}X^T Y \end{aligned}
XTY=XTXωω=(XTX)−1XTY
这就是normal equation。
梯度下降法
梯度下降的目标函数形式写法有所不同,不采用normal equation完全矩阵的写法,而是用求和的写法。其中
x
(
i
)
x^{(i)}
x(i)为第i个样本的特征列向量,
ω
\omega
ω为回归系数列向量,
y
(
i
)
y^{(i)}
y(i)为第i个样本的真实值:
m
i
n
J
(
ω
)
=
1
2
∑
i
=
1
M
(
y
(
i
)
−
ω
T
x
(
i
)
)
2
min J(\omega)=\frac{1}{2} \sum_{i=1}^{M}( y^{(i)}-\omega^T x^{(i)})^2
minJ(ω)=21i=1∑M(y(i)−ωTx(i))2
梯度下降法就是要求目标函数的梯度,对
ω
\omega
ω的第j维求导:
d
J
(
ω
)
d
ω
j
=
∑
i
=
1
M
(
y
(
i
)
−
ω
T
x
(
i
)
)
⋅
x
j
(
i
)
\frac{d J(\omega) } {d\omega_j }=\sum_{i=1}^{M}( y^{(i)}-\omega^T x^{(i)})\cdot x^{(i)}_j
dωjdJ(ω)=i=1∑M(y(i)−ωTx(i))⋅xj(i)
然后更新
ω
\omega
ω的第j维:
ω
j
→
ω
j
−
α
d
J
(
ω
)
d
ω
j
\omega_j \rightarrow \omega_j - \alpha \frac{d J(\omega) } {d\omega_j }
ωj→ωj−αdωjdJ(ω)
每次迭代都要更新
ω
\omega
ω的所有维。
不过每次迭代不一定要使用全部样本,可以使用随机梯度下降法,每次只随机选择一个样本。
两种方法的对比
normal equation | 梯度下降法 |
---|---|
要求 ( X T X ) (X^TX) (XTX)必须可逆 | 不要求 ( X T X ) (X^TX) (XTX)可逆 |
求 ( X T X ) (X^TX) (XTX)的逆费时较多,当特征较多时运算很慢 | 特征较多时运算不会特别慢 |
不需要feature scaling | 需要feature scaling |
只需一次计算就能求解 | 需要多次迭代 |
不需要选择学习步长 | 需要选择学习步长 |
对于更复杂的问题可能求不出解 | 可用于更复杂的问题,可移植性强 |
如何选择方法
吴恩达建议,N>10000时,使用梯度下降法,N<10000时,使用normal equation。
补充:向量求导
对于向量
X
ω
X\omega
Xω的求导:
d
X
ω
d
ω
=
X
T
\frac{d X\omega}{d\omega}=X^T
dωdXω=XT
由于
ω
\omega
ω是一个列向量,对
ω
\omega
ω求导的结果一定是一个列向量,或是多个列向量组成的矩阵,每个列向量都是一个样本的特征值列向量。而
X
X
X是由多个特征行向量组成的矩阵,因此求导的结果应该是
X
T
X^T
XT。
对于
∣
∣
Y
−
X
ω
∣
∣
2
||Y-X\omega||^2
∣∣Y−Xω∣∣2的求导,其中一种参考 zhaosarsa:
d
∣
∣
Y
−
X
ω
∣
∣
2
d
ω
=
(
Y
−
X
ω
)
T
(
Y
−
X
ω
)
d
ω
=
(
Y
T
−
ω
T
X
T
)
(
Y
−
X
ω
)
d
ω
=
(
Y
T
Y
−
Y
T
X
ω
−
ω
T
X
T
Y
+
ω
T
X
T
X
ω
)
d
ω
=
−
X
T
Y
−
X
T
Y
+
2
X
T
X
ω
=
−
2
X
T
Y
+
2
X
T
X
ω
\begin{aligned} &\frac{d ||Y-X\omega||^2 }{d \omega } \\ =&\frac{(Y-X\omega)^T (Y-X\omega)}{d\omega} \\ =&\frac{(Y^T-{\omega}^T X^T) (Y-X\omega)}{d\omega} \\ =&\frac{(Y^TY-Y^TX\omega-{\omega}^TX^TY+{\omega}^TX^TX\omega) }{d\omega} \\ =& - X^T Y- X^TY + 2X^TX\omega\\ =&-2X^T Y + 2X^TX\omega \end{aligned}
=====dωd∣∣Y−Xω∣∣2dω(Y−Xω)T(Y−Xω)dω(YT−ωTXT)(Y−Xω)dω(YTY−YTXω−ωTXTY+ωTXTXω)−XTY−XTY+2XTXω−2XTY+2XTXω
第二种求导的方法使用了链式求导,参考OO猪侠,结果与上述方法一样:
d
∣
∣
Y
−
X
ω
∣
∣
2
d
ω
=
d
(
Y
−
X
ω
)
d
ω
⋅
d
∣
∣
Y
−
X
ω
∣
∣
2
d
(
Y
−
X
ω
)
=
(
−
X
T
)
⋅
2
(
Y
−
X
ω
)
=
−
2
X
T
Y
+
2
X
T
X
ω
\begin{aligned} &\frac{d ||Y-X\omega||^2 }{d \omega } \\ =& \frac{d (Y-X\omega) } {d \omega } \cdot \frac{d ||Y-X\omega||^2}{d(Y-X\omega )} \\ =& (-X^T) \cdot 2(Y-X\omega ) \\ =& -2X^TY+2X^T X\omega \end{aligned}
===dωd∣∣Y−Xω∣∣2dωd(Y−Xω)⋅d(Y−Xω)d∣∣Y−Xω∣∣2(−XT)⋅2(Y−Xω)−2XTY+2XTXω