1. 模型向量化(重要)
(Model Vectorization)
为了在实际应用中计算更为方便,例如在编程中都是使用矩阵进行计算(参考 编程作业(1)线性回归),我们可以将整个模型向量化。
对于整个训练集而言:
1.1 输入输出及参数
可以用 特征矩阵
X
X
X 来描述所有特征,用参数向量
θ
\theta
θ 来描述所有参数,用输出向量
y
y
y 表示所有输出变量:
X
=
[
x
0
(
1
)
x
1
(
1
)
x
2
(
1
)
⋅
⋅
⋅
x
n
(
1
)
x
0
(
2
)
x
1
(
2
)
x
2
(
2
)
⋅
⋅
⋅
x
n
(
2
)
:
:
:
⋅
⋅
⋅
:
x
0
(
m
)
x
1
(
m
)
x
2
(
m
)
⋅
⋅
⋅
x
n
(
m
)
]
,
θ
=
[
θ
0
θ
1
:
θ
n
]
,
y
=
[
y
(
1
)
y
(
2
)
:
y
(
m
)
]
X=\begin{bmatrix} x_0^{(1)}&x_1^{(1)}&x_2^{(1)}&···&x_n^{(1)}\\ \\ x_0^{(2)}&x_1^{(2)}&x_2^{(2)}&···&x_n^{(2)}\\ \\:&:&:&···&:\\ \\ x_0^{(m)}&x_1^{(m)}&x_2^{(m)}&···&x_n^{(m)}\\ \end{bmatrix}\ ,\ \theta=\begin{bmatrix} \theta_0\\ \\ \theta_1\\ \\:\\ \\ \theta_n \end{bmatrix}\ ,\ y=\begin{bmatrix} y^{(1)}\\ \\ y^{(2)}\\ \\:\\ \\ y^{(m)} \end{bmatrix}
X=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡x0(1)x0(2):x0(m)x1(1)x1(2):x1(m)x2(1)x2(2):x2(m)⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅xn(1)xn(2):xn(m)⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤ , θ=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡θ0θ1:θn⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤ , y=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡y(1)y(2):y(m)⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤
X
X
X 的维度是
m
∗
(
n
+
1
)
m*(n+1)
m∗(n+1) 且
x
0
=
1
x_0=1
x0=1,
θ
\theta
θ 的维度为
(
n
+
1
)
∗
1
(n+1)*1
(n+1)∗1,
y
y
y 的维度为
m
∗
1
m*1
m∗1
1.2 假设函数
整个训练集 的 所有假设结果 也可以用一个
m
∗
1
m*1
m∗1 维的向量表示:
h
θ
(
x
)
=
X
θ
=
[
x
0
(
1
)
θ
0
+
x
1
(
1
)
θ
1
+
x
2
(
1
)
θ
2
+
⋅
⋅
⋅
+
x
n
(
1
)
θ
n
x
0
(
2
)
θ
0
+
x
1
(
2
)
θ
1
+
x
2
(
2
)
θ
2
+
⋅
⋅
⋅
+
x
n
(
2
)
θ
n
:
x
0
(
m
)
θ
0
+
x
1
(
m
)
θ
1
+
x
2
(
m
)
θ
2
+
⋅
⋅
⋅
+
x
n
(
m
)
θ
n
]
=
[
h
θ
(
x
(
1
)
)
h
θ
(
x
(
2
)
)
:
h
θ
(
x
(
m
)
)
]
h_\theta(x)=X\theta=\begin{bmatrix} x_0^{(1)}\theta_0+x_1^{(1)}\theta_1+x_2^{(1)}\theta_2+···+x_n^{(1)}\theta_n\\ \\ x_0^{(2)}\theta_0+x_1^{(2)}\theta_1+x_2^{(2)}\theta_2+···+x_n^{(2)}\theta_n\\ \\:\\ \\ x_0^{(m)}\theta_0+x_1^{(m)}\theta_1+x_2^{(m)}\theta_2+···+x_n^{(m)}\theta_n\\ \end{bmatrix}=\begin{bmatrix}h_\theta(x^{(1)})\\ \\ h_\theta(x^{(2)})\\ \\:\\ \\ h_\theta(x^{(m)}) \end{bmatrix}
hθ(x)=Xθ=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡x0(1)θ0+x1(1)θ1+x2(1)θ2+⋅⋅⋅+xn(1)θnx0(2)θ0+x1(2)θ1+x2(2)θ2+⋅⋅⋅+xn(2)θn:x0(m)θ0+x1(m)θ1+x2(m)θ2+⋅⋅⋅+xn(m)θn⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡hθ(x(1))hθ(x(2)):hθ(x(m))⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤
1.3 代价函数
对于代价函数,也可以向量化,先看原始的公式:
J
(
θ
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J(θ)=\frac{1}{2m} \displaystyle\sum_{i=1}^{m} ( h_θ( x^{(i)} ) - y^{(i)}) ^2
J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2由于
(
X
θ
−
y
)
=
[
h
θ
(
x
(
1
)
)
−
y
(
1
)
h
θ
(
x
(
2
)
)
−
y
(
2
)
:
h
θ
(
x
(
m
)
)
−
y
(
m
)
]
(X θ - y)=\begin{bmatrix}h_\theta(x^{(1)})-y^{(1)}\\ \\ h_\theta(x^{(2)})-y^{(2)}\\ \\:\\ \\ h_\theta(x^{(m)})-y^{(m)} \end{bmatrix}
(Xθ−y)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡hθ(x(1))−y(1)hθ(x(2))−y(2):hθ(x(m))−y(m)⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤是一个
m
∗
1
m*1
m∗1 的矩阵,故
(
X
θ
−
y
)
T
(X θ - y)^T
(Xθ−y)T是一个
1
∗
m
1*m
1∗m的矩阵,因此:
(
X
θ
−
y
)
T
(
X
θ
−
y
)
=
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
=
(
X
θ
−
y
)
⋅
(
X
θ
−
y
)
(X θ - y)^T(X θ - y)=\sum_{i=1}^m(h_θ( x^{(i)} ) - y^{(i)})^2=(X θ - y)·(X θ - y)
(Xθ−y)T(Xθ−y)=i=1∑m(hθ(x(i))−y(i))2=(Xθ−y)⋅(Xθ−y)其中最后一项表示向量
(
X
θ
−
y
)
(X θ - y)
(Xθ−y)自身的内积(注意:内积是该向量每一项的平方之和,结果是标量)
因此代价函数就可以化简为: J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 = 1 2 m ( X θ − y ) T ( X θ − y ) = 1 2 m ( X θ − y ) ⋅ ( X θ − y ) J(θ)=\frac{1}{2m} \sum_{i=1}^{m} ( h_θ( x^{(i)} ) - y^{(i)})^2 =\frac{1}{2m} (X θ - y)^T(Xθ - y)=\frac{1}{2m} (X θ - y)·(X θ - y) J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2=2m1(Xθ−y)T(Xθ−y)=2m1(Xθ−y)⋅(Xθ−y)
1.4 梯度下降函数
最后,用向量来表示梯度下降,原公式为:
θ
j
:
=
θ
j
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
\theta_j:=\theta_j-\alpha\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}
θj:=θj−αm1i=1∑m(hθ(x(i))−y(i))xj(i)现用向量来表示所有参数的更新过程:
θ
=
θ
−
α
δ
\theta=\theta-\alpha\delta
θ=θ−αδ其中:
θ
=
[
θ
0
θ
1
:
θ
n
]
,
δ
=
1
m
[
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
0
(
i
)
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
1
(
i
)
⋅
⋅
⋅
⋅
⋅
⋅
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
n
(
i
)
]
\theta=\begin{bmatrix} \theta_0\\ \\ \theta_1\\ \\:\\ \\ \theta_n \end{bmatrix}\ \ ,\ \ \delta=\frac{1}{m} \begin{bmatrix} \sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_0^{(i)}\\ \\ \sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_1^{(i)}\\ \\······\\ \\ \sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_n^{(i)} \end{bmatrix}
θ=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡θ0θ1:θn⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤ , δ=m1⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡∑i=1m(hθ(x(i))−y(i))x0(i)∑i=1m(hθ(x(i))−y(i))x1(i)⋅⋅⋅⋅⋅⋅∑i=1m(hθ(x(i))−y(i))xn(i)⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
又因为:
δ
=
1
m
[
x
0
(
1
)
x
0
(
2
)
⋅
⋅
⋅
x
0
(
m
)
x
1
(
1
)
x
1
(
2
)
⋅
⋅
⋅
x
1
(
m
)
:
:
⋅
⋅
⋅
:
x
n
(
1
)
x
n
(
2
)
⋅
⋅
⋅
x
n
(
m
)
]
[
h
θ
(
x
(
1
)
)
−
y
(
1
)
h
θ
(
x
(
2
)
)
−
y
(
2
)
⋅
⋅
⋅
⋅
⋅
⋅
h
θ
(
x
(
m
)
)
−
y
(
m
)
]
=
1
m
X
T
(
X
θ
−
y
)
\delta=\frac{1}{m} \begin{bmatrix} x_0^{(1)}&x_0^{(2)}&···&x_0^{(m)}\\ \\ x_1^{(1)}&x_1^{(2)}&···&x_1^{(m)}\\ \\:&:&···&:\\ \\ x_n^{(1)}&x_n^{(2)}&···&x_n^{(m)}\\ \end{bmatrix} \begin{bmatrix} h_\theta(x^{(1)})-y^{(1)}\\ \\ h_\theta(x^{(2)})-y^{(2)}\\ \\······\\ \\ h_\theta(x^{(m)})-y^{(m)} \end{bmatrix}=\frac{1}{m}X^T(X\theta-y)
δ=m1⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡x0(1)x1(1):xn(1)x0(2)x1(2):xn(2)⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅x0(m)x1(m):xn(m)⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡hθ(x(1))−y(1)hθ(x(2))−y(2)⋅⋅⋅⋅⋅⋅hθ(x(m))−y(m)⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤=m1XT(Xθ−y)
因此,梯度下降可以表示为:
θ
=
θ
−
α
1
m
X
T
(
X
θ
−
y
)
\theta=\theta-\alpha\frac{1}{m}X^T(X\theta-y)
θ=θ−αm1XT(Xθ−y)
2. 正规方程
(Normal Equation)
到目前为止,我们都在使用 梯度下降算法 来求解 线性回归问题,即求偏导来寻找使代价函数得到最优解的参数。现介绍另外一种求 参数 θ θ θ的方法,即正规方程(Normal Equation):
假设我们的训练集特征矩阵为
X
X
X(包含了
x
0
x_0
x0),并且我们的训练集结果为向量
y
y
y,则利用正规方程可以直接解出最优的 参数向量
θ
θ
θ:
θ
=
(
X
T
X
)
−
1
X
T
y
θ=(X^TX)^{-1}X^Ty
θ=(XTX)−1XTy上标
T
T
T 代表矩阵转置,上标
−
1
-1
−1 代表矩阵的逆。
注:对于那些不可逆的矩阵(通常是因为特征之间不独立,如同时包含英尺为单位的尺寸和米为单位的尺寸两个特征,也有可能是特征数量大于训练集的数量),正规方程方法是不能用的。
2.1 正规方程的推导过程
在模型向量化中,我们得到代价函数:
J
(
θ
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
=
1
2
m
(
X
θ
−
y
)
T
(
X
θ
−
y
)
J(θ)=\frac{1}{2m} \sum_{i=1}^{m} ( h_θ( x^{(i)} ) - y^{(i)})^2 =\frac{1}{2m} (X θ - y)^T(Xθ - y)
J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2=2m1(Xθ−y)T(Xθ−y)化简得:
J
(
θ
)
=
1
2
m
(
X
θ
−
y
)
T
(
X
θ
−
y
)
=
1
2
m
(
θ
T
X
T
−
y
T
)
(
X
θ
−
y
)
=
1
2
m
(
θ
T
X
T
X
θ
−
θ
T
X
T
y
−
y
T
X
θ
+
y
T
y
)
\begin{aligned} J(θ)&=\frac{1}{2m} (X θ - y)^T(Xθ - y) \\&=\frac{1}{2m}(θ^TX^T-y^T)(Xθ - y) \\&=\frac{1}{2m}(θ^TX^TXθ-θ^TX^Ty-y^TXθ+y^Ty) \end{aligned}
J(θ)=2m1(Xθ−y)T(Xθ−y)=2m1(θTXT−yT)(Xθ−y)=2m1(θTXTXθ−θTXTy−yTXθ+yTy)接下来对
J
(
θ
)
J(θ)
J(θ) 求偏导,需要用到以下几个矩阵的求导法则:
- d A B B = A T \dfrac{dAB}{B}=A^T BdAB=AT
- d X T A X X = 2 A X \dfrac{dX^TAX}{X}=2AX XdXTAX=2AX
对
J
(
θ
)
J(θ)
J(θ) 求导得:
∂
J
(
θ
)
∂
θ
=
1
2
m
(
2
X
T
X
θ
−
X
T
y
−
(
y
T
X
)
T
−
0
)
=
1
2
m
(
2
X
T
X
θ
−
X
T
y
−
X
T
y
−
0
)
=
1
2
m
(
2
X
T
X
θ
−
2
X
T
y
)
=
1
m
(
X
T
X
θ
−
X
T
y
)
\begin{aligned} \frac{\partial J(θ)}{\partial θ}&=\frac{1}{2m}(2X^TXθ - X^Ty-(y^TX)^T-0) \\&=\frac{1}{2m}(2X^TXθ - X^Ty-X^Ty-0) \\&=\frac{1}{2m}(2X^TXθ - 2X^Ty) \\&=\frac{1}{m}(X^TXθ - X^Ty) \end{aligned}
∂θ∂J(θ)=2m1(2XTXθ−XTy−(yTX)T−0)=2m1(2XTXθ−XTy−XTy−0)=2m1(2XTXθ−2XTy)=m1(XTXθ−XTy)令
∂
J
(
θ
)
∂
θ
=
0
\dfrac{\partial J(θ)}{\partial θ}=0
∂θ∂J(θ)=0,则有:
θ
=
(
X
T
X
)
−
1
X
T
y
θ=(X^TX)^{-1}X^Ty
θ=(XTX)−1XTy
2.2 梯度下降和正规方程的比较
梯度下降 | 正规方程 |
---|---|
需要选择学习率 α α α | 不需要 |
需要多次迭代 | 一次运算得出,不需要迭代 |
当特征数量 n n n 很大时也能正常运行 | 不适合特征数量 n n n 很大的情况,因为逆矩阵 ( X T X ) − 1 (X^TX)^{-1} (XTX)−1的计算复杂度高,运算代价大,一般 n n n 小于10000 可接受 |
适用于各种类型的模型 | 只适用于线性模型,不适合逻辑回归模型等其他模型 |
2.3 正规方程之不可逆性
θ = ( X T X ) − 1 X T y θ=(X^TX)^{-1}X^Ty θ=(XTX)−1XTy通常有以下两种原因会使矩阵 X T X X^TX XTX不可逆(即奇异矩阵):
- 模型中有多余的特征(Redundant features),使得矩阵
X
T
X
X^TX
XTX线性相关(linearly dependent),例如两个特征都是面积,但是用了不同的单位(1 m = 3.28 feet):
- x 1 = s i z e i n f e e t 2 x_1=size\ in\ feet^2 x1=size in feet2
- x 1 = s i z e i n m 2 x_1=size\ in\ m^2 x1=size in m2
- 模型的特征数量过多,例如
m
≤
n
m\leq n
m≤n,
m
m
m为样本数量,
n
n
n为特征数量
- 一般通过删除某些特征,或者使用正则化方法来解决 m ≤ n m\leq n m≤n的问题,见下一章 过拟合与正则化