翻开每一本机器学习的书,第一章都是线性回归,相信接触过机器学习或学过统计学的都对线性回归有所了解,无非就是在一个空间上有多个样本点,目标寻求一条直线尽可能拟合所有样本点,换句话说就是最小化样本点的拟合值与实际值之间的误差。
OK,那就从简单的解线性方程组开始吧!(可能会觉得过于简单,但后面一步步的推倒简直精彩!)
为了阅读起来清晰,先把问题留在开头:
1.怎么求解
A
X
=
b
AX = b
AX=b(A是矩阵,X,b是向量)
2.何时X无解,且无解怎么办!
3.怎么应用到线性回归中
4.最小二乘法又是怎样?
{ x + 2 y + z = 2 3 x + 8 y + z = 12 4 y + z = 2 \begin{cases} x+2y+ z =2\\ 3x+8y+z= 12\\ 4y+z=2 \end{cases} ⎩⎪⎨⎪⎧x+2y+z=23x+8y+z=124y+z=2 对与这个方程组计算好的一眼就看出了答案,如果用矩阵表示即是
[
1
2
1
3
8
1
0
4
1
]
\left[ \begin{array} {ccc} 1&2&1\\ 3&8&1\\ 0&4&1 \end{array} \right]
⎣⎡130284111⎦⎤
[
x
y
z
]
\left[ \begin{array} {ccc} x\\ y\\ z \end{array} \right]
⎣⎡xyz⎦⎤ =
[
2
12
2
]
\left[ \begin{array} {ccc} 2\\ 12\\ 2 \end{array} \right]
⎣⎡2122⎦⎤ 所以也就是
A
X
=
b
AX = b
AX=b,
A
A
A也就是左边对应的矩阵,x,y,z就是我们要求的
X
X
X。
那么问题是怎么求解?
A common method is do elimination!
具体如何消元就不详细说了,就是行之间的加减罢了(combination of rows)
[
1
2
1
3
8
1
0
4
1
]
\left[ \begin{array} {ccc} 1&2&1\\ 3&8&1\\ 0&4&1 \end{array} \right]
⎣⎡130284111⎦⎤ -----------消元后-------->
[
1
2
1
0
2
−
2
0
0
5
]
\left[ \begin{array} {ccc} 1 &2&1\\ 0&2&-2\\ 0&0& 5 \end{array} \right]
⎣⎡1002201−25⎦⎤当然这不是一个最简结果(但对于我们这个问题已经足够了),消元后得到了一个上三角矩阵,记为U,所以原问题
A
X
=
b
AX = b
AX=b可转换为
U
X
=
b
UX = b
UX=b,很容易就可以解出
X
X
X!
那么我们的第二个问题来了,对于所有的b,都能解出
X
X
X吗???
再来仔细研究一下
U
U
U,很明显从U中可以得知有3个主元(pivots),因此该矩阵的秩(rank)为3,(秩 = 主元数量)。进一步可以推理出
U
U
U是一个三维的空间(空间维度 = 秩),因此U其实表示了一整个三维的空间,注意在这里用的是空间(space),而不仅仅是
U
U
U中的三个列向量! 而
X
X
X的作用仅仅是告诉我们对于
U
U
U表示的这个空间要如何线性组合,
b
b
b是一个三维的向量,因此
b
b
b其实是位于三维空间内!所以只要对
U
U
U组合正确,结果必能得到
b
b
b,而
U
U
U是由
A
A
A变换而来,并不影响
A
A
A的性质,因此对A来说,也一定存在
X
X
X,要时刻记住
X
X
X只是表示如何组合向量,与向量本身存在的空间无关!能够使得
A
X
=
b
AX = b
AX=b!
那
A
A
A的空间(列空间)怎么表示?,以知
A
A
A的每一列都是主列(pivots column),也就是含主元的列,所以A中的每一列都可以做为基(basis)来表示
A
A
A的空间:
C
(
A
)
=
c
1
∗
[
1
3
0
]
+
c
2
∗
[
2
8
4
]
+
c
3
∗
[
1
1
1
]
C(A) =c1* \left[ \begin{array} {ccc} 1\\ 3\\ 0 \end{array} \right]+c2* \left[ \begin{array} {ccc} 2\\ 8\\ 4 \end{array} \right]+c3* \left[ \begin{array} {ccc} 1\\ 1\\ 1 \end{array} \right]
C(A)=c1∗⎣⎡130⎦⎤+c2∗⎣⎡284⎦⎤+c3∗⎣⎡111⎦⎤
C
(
A
)
C(A)
C(A)表示有矩阵A构成的列空间,也就是矩阵A中的向量存在的空间。
OK以上是有解的情况,那什么时候无解?
当A(A是3*3矩阵)是在二维空间上,意味这A中有一行是线性相关,通过消元后可以把一行都消零,因此实际就剩下了两个方程组三个变量,所以不是所有的b都有解。
比如以下这种情况:
A
X
=
[
1
2
1
3
8
1
2
4
2
]
[
x
y
z
]
=
[
b
1
b
2
b
3
]
AX =\left[ \begin{array} {ccc} 1&2&1\\ 3&8&1\\ 2&4&2 \end{array} \right]\left[ \begin{array} {ccc} x\\ y\\ z \end{array} \right] =\left[ \begin{array} {ccc} b1\\ b2\\ b3 \end{array} \right]
AX=⎣⎡132284112⎦⎤⎣⎡xyz⎦⎤=⎣⎡b1b2b3⎦⎤
通过对A消元得到
U
=
[
1
2
1
0
2
−
2
0
0
0
]
−
>
U
X
=
x
[
1
0
0
]
+
y
[
2
2
0
]
+
z
[
1
−
2
0
]
U=\left[ \begin{array} {ccc} 1&2&1\\ 0&2&-2\\ 0&0&0 \end{array} \right]->UX=x\left[ \begin{array} {ccc} 1\\ 0\\ 0\end{array} \right]+y\left[ \begin{array} {ccc} 2\\ 2\\ 0 \end{array} \right]+z\left[ \begin{array} {ccc} 1\\ -2\\ 0 \end{array} \right]
U=⎣⎡1002201−20⎦⎤−>UX=x⎣⎡100⎦⎤+y⎣⎡220⎦⎤+z⎣⎡1−20⎦⎤,可以看到最后一行全为0,因此无论
X
X
X取什么什么值,当前仅当
b
3
=
0
是
才
有
解
!
b3=0是才有解!
b3=0是才有解!如果
b
3
b3
b3不为0,则不可能能解出
X
X
X(因为
b
3
=
x
∗
0
+
y
+
0
+
z
∗
0
b3=x*0+y+0+z*0
b3=x∗0+y+0+z∗0)
因此可以得到一个结论:对于一个
m
∗
n
m*n
m∗n的矩阵A
{
R
a
n
k
(
A
)
m
a
x
=
n
R
a
n
k
(
A
)
m
a
x
=
n
R
a
n
k
(
A
)
m
a
x
=
m
=
n
\begin{cases} Rank(A)_{max}=n \\ Rank(A)_{max}=n \\ Rank(A)_{max}=m=n \end{cases}
⎩⎪⎨⎪⎧Rank(A)max=nRank(A)max=nRank(A)max=m=n
那无解怎么办??
实际应用中,通常为了提高结果的可信度,通常方程组的个数会远大于变量的个数,因此X通常是无解的!
还记得以上将矩阵A表示的实际上是一个空间,习惯性以列为基(basis),因此也称作列空间(column space),假设已经直到对于b已经解不出来了,但一定要解出一个X,怎么办?
自然会想到找最接近真实值的X,那什么时候才能找到最优解X?
所以问题转换成找最优解X,以下记为
X
^
\hat{X}
X^,前提条件是该最优解对应的
b
^
\hat{b}
b^有解。
向量到一个空间最近的距离也就是将该向量投影到空间上!
假设向量
b
b
b在列空间
A
A
A上的投影为向量
p
p
p,向量
b
b
b到列空间A为向量
e
e
e,如图所示
向量
e
e
e垂直于列空间
A
A
A,e垂直于矩阵A中的每一列向量,假设
A
=
[
∣
∣
a
1
a
2
∣
∣
]
A =\left[ \begin{array} {ccc} |&|&\\ a_1&a_2\\ |&| \end{array} \right]
A=⎣⎡∣a1∣∣a2∣⎦⎤,
X
^
=
[
x
1
^
x
2
^
]
\hat{X} =\left[ \begin{array} {ccc} \hat{x_1}\\ \hat{x_2} \end{array} \right]
X^=[x1^x2^],则有
p
=
x
1
^
a
1
+
x
2
^
a
2
=
A
X
^
p =\hat{x_1}a_1+\hat{x_2}a_2=A\hat{X}
p=x1^a1+x2^a2=AX^(因为
p
p
p是在A的空间上,可有A中向量线性组合得到).
e
=
b
−
p
=
b
−
A
X
^
e = b-p=b-A\hat{X}
e=b−p=b−AX^,所以有:
{
a
1
T
(
b
−
A
X
^
)
=
0
a
2
T
(
b
−
A
X
^
)
=
0
\begin{cases} {a_1}^T(b-A\hat{X})=0\\ {a_2}^T(b-A\hat{X})=0 \end{cases}
{a1T(b−AX^)=0a2T(b−AX^)=0
写成矩阵就是
A
T
(
b
−
A
X
^
)
=
0
A^T(b-A\hat{X})=0
AT(b−AX^)=0, 因此
A
T
A
X
^
=
A
T
b
A^TA\hat{X} =A^Tb
ATAX^=ATb,所以解出
X
^
=
(
A
T
A
)
−
1
A
T
b
\hat{X}=(A^TA)^{-1}A^Tb
X^=(ATA)−1ATb(千万不能和数值运算一样直接除!)进一步解出
p
=
A
X
^
=
A
(
A
T
A
)
−
1
A
T
b
p=A\hat{X}=A(A^TA)^{-1}A^Tb
p=AX^=A(ATA)−1ATb!
OK所有数学推倒就到此算是告一段落,记住这个 X ^ = ( A T A ) − 1 A T b \hat{X}=(A^TA)^{-1}A^Tb X^=(ATA)−1ATb,下面会用另一种方法,也就是微分法(涉及最小二乘法)求解线性方程组AX = b,你会惊奇的发现结果…(反正我是高兴得站起来了哈哈)!
那怎么应用到线性回归中?
通常为了提高模型的可信度,训练样本通常要远大于特征数(体现在系数矩阵上就是行数远大于列数),方程数远大于未知量,因此不一定存在解,所以就出现了以上
A
X
=
b
AX=b
AX=b无解的情况,这时以上的推倒就派上用场了!
接下来将另一种解法,也就是目前主流的最小二乘法,利用求微分的思想得到最优解:
OK接下来又是一堆的数学推倒了,在推倒之前为了方便计算定义了以下几个符号:
注: A B都是矩阵!
(1)
t
r
A
=
∑
i
n
A
i
i
trA=\sum_{i}^{n}{A_{ii}}
trA=∑inAii(对角线之和)
t
r
(
A
B
)
=
t
r
(
B
A
)
tr(AB)=tr(BA)
tr(AB)=tr(BA)
t
r
(
A
B
C
)
=
t
r
(
C
A
B
)
=
t
r
(
B
C
A
)
tr(ABC)=tr(CAB)=tr(BCA)
tr(ABC)=tr(CAB)=tr(BCA)
(2)假设f(A) =
t
r
(
A
B
)
tr(AB)
tr(AB)
∂
f
∂
A
=
∂
t
r
(
A
B
)
∂
A
\frac{\partial{f}}{\partial{A}} =\frac{\partial{tr(AB)}}{\partial{A}}
∂A∂f=∂A∂tr(AB)
(3)
t
r
A
T
=
t
r
A
trA^T=trA
trAT=trA
(4)if a∈R, tra = a
(5)
∂
t
r
(
A
B
A
T
C
)
∂
A
=
C
A
B
+
C
T
A
B
T
\frac{\partial{tr(ABA^TC)}}{\partial{A}} =CAB+C^TAB^T
∂A∂tr(ABATC)=CAB+CTABT
具体推倒就不推了,能推到天亮。。。。。
接下来就是线性回归的推倒:
假设
Θ
=
[
θ
1
,
θ
2
,
θ
3
,
θ
4
,
.
.
.
.
,
θ
m
]
Θ=[θ_1,θ_2,\theta_3,\theta_4,....,\theta_m]
Θ=[θ1,θ2,θ3,θ4,....,θm],
X
=
[
x
(
1
)
T
,
x
(
2
)
T
,
x
(
3
)
T
,
…
…
,
x
(
n
)
T
]
X = [x^{(1)^T},x^{(2)^T},x^{(3)^T},……,x^{(n)^T}]
X=[x(1)T,x(2)T,x(3)T,……,x(n)T],其中
x
(
i
)
T
x^{(i)^T}
x(i)T代表第i组数据,
x
(
i
)
T
=
[
x
1
(
i
)
T
,
x
2
(
i
)
T
,
x
3
(
i
)
T
,
…
…
,
x
m
(
i
)
T
]
;
x^{(i)^T}=[x^{(i)^T}_1,x^{(i)^T}_2,x^{(i)^T}_3,……,x^{(i)^T}_m];
x(i)T=[x1(i)T,x2(i)T,x3(i)T,……,xm(i)T];
y
=
[
y
(
1
)
,
y
(
2
)
,
y
(
3
)
,
…
…
,
y
(
n
)
]
;
y=[y^{(1)},y^{(2)},y^{(3)},……,y^{(n)}];
y=[y(1),y(2),y(3),……,y(n)];
y
i
y^i
yi代表第i个数据的真实标签;
Θ
X
=
[
θ
1
x
1
(
1
)
+
θ
2
x
2
(
1
)
+
…
…
+
θ
m
x
m
(
1
)
θ
1
x
1
(
2
)
+
θ
2
x
2
(
2
)
+
…
…
+
θ
m
x
m
(
2
)
θ
1
x
1
(
3
)
+
θ
2
x
2
(
3
)
+
…
…
+
θ
m
x
m
(
3
)
…
…
θ
1
x
1
(
n
)
+
θ
2
x
2
(
n
)
+
…
…
+
θ
m
x
m
(
n
)
]
=
[
h
θ
(
x
1
)
h
θ
(
x
2
)
h
θ
(
x
3
)
…
…
h
θ
(
x
n
)
]
ΘX=\left[ \begin{array} {ccc} \theta_1x^{(1)}_1+\theta_2x^{(1)}_2+……+\theta_mx^{(1)}_m\\ \theta_1x^{(2)}_1+\theta_2x^{(2)}_2+……+\theta_mx^{(2)}_m\\ \theta_1x^{(3)}_1+\theta_2x^{(3)}_2+……+\theta_mx^{(3)}_m\\ ……\\ \theta_1x^{(n)}_1+\theta_2x^{(n)}_2+……+\theta_mx^{(n)}_m\\ \end{array} \right]=\left[ \begin{array} {ccc} h_θ(x^1)\\ h_θ(x^2)\\ h_θ(x^3)\\ ……\\ h_θ(x^n)\\ \end{array} \right]
ΘX=⎣⎢⎢⎢⎢⎢⎡θ1x1(1)+θ2x2(1)+……+θmxm(1)θ1x1(2)+θ2x2(2)+……+θmxm(2)θ1x1(3)+θ2x2(3)+……+θmxm(3)……θ1x1(n)+θ2x2(n)+……+θmxm(n)⎦⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎡hθ(x1)hθ(x2)hθ(x3)……hθ(xn)⎦⎥⎥⎥⎥⎤,
Θ
X
−
y
=
[
h
θ
(
x
1
)
−
y
(
1
)
h
θ
(
x
2
)
−
y
(
2
)
h
θ
(
x
3
)
−
y
(
3
)
…
…
h
θ
(
x
n
)
−
y
(
n
)
]
ΘX - y=\left[ \begin{array} {ccc} h_θ(x^1)-y^{(1)}\\ h_θ(x^2)-y^{(2)}\\ h_θ(x^3)-y^{(3)}\\ ……\\ h_θ(x^n)-y^{(n)}\\ \end{array} \right]
ΘX−y=⎣⎢⎢⎢⎢⎡hθ(x1)−y(1)hθ(x2)−y(2)hθ(x3)−y(3)……hθ(xn)−y(n)⎦⎥⎥⎥⎥⎤
最小二乘法得到代价函数(具体看线性回归的概率解释)
J
(
Θ
)
=
1
/
2
∑
i
n
[
h
θ
(
x
i
)
−
y
i
]
2
J(Θ)=1/2\sum_i^n[{h_\theta(x^i)-y^i}]^2
J(Θ)=1/2∑in[hθ(xi)−yi]2;
写成矩阵的形式就是:
J
(
Θ
)
=
1
/
2
(
Θ
X
−
y
)
T
(
Θ
X
−
y
)
J(Θ)=1/2(ΘX-y)^T(ΘX-y)
J(Θ)=1/2(ΘX−y)T(ΘX−y)
目的求J(Θ)最小值,也就是使得误差最小,
∇
θ
J
(
Θ
)
=
0
\nabla_{θ}J(Θ) = 0
∇θJ(Θ)=0
∇
θ
J
(
Θ
)
=
1
/
2
∗
∇
θ
1
/
2
(
Θ
X
−
y
)
T
(
Θ
X
−
y
)
\nabla_{θ}J(Θ)=1/2*\nabla_{θ}1/2(ΘX-y)^T(ΘX-y)
∇θJ(Θ)=1/2∗∇θ1/2(ΘX−y)T(ΘX−y)
=
1
/
2
∇
θ
(
Θ
T
X
T
X
Θ
−
Θ
T
X
T
y
−
y
T
X
Θ
+
y
T
y
)
=1/2\nabla_{θ}(Θ^TX^TXΘ-Θ^TX^Ty-y^TXΘ+y^Ty)
=1/2∇θ(ΘTXTXΘ−ΘTXTy−yTXΘ+yTy)
真的要推这个公式吗,我有点犹豫了。。。
好吧推一下吧;
y
T
y
y^Ty
yTy于Θ无关,因此
∇
θ
y
T
y
\nabla_{θ}y^Ty
∇θyTy=0;
所以
∇
θ
J
(
Θ
)
=
1
/
2
∇
θ
(
Θ
T
X
T
X
Θ
−
Θ
T
X
T
y
−
y
T
X
Θ
)
\nabla_{θ}J(Θ)=1/2\nabla_{θ}(Θ^TX^TXΘ-Θ^TX^Ty-y^TXΘ)
∇θJ(Θ)=1/2∇θ(ΘTXTXΘ−ΘTXTy−yTXΘ)
=
1
/
2
[
∇
θ
t
r
(
Θ
Θ
T
X
T
X
)
−
∇
θ
t
r
(
Θ
T
X
T
y
)
−
∇
θ
t
r
(
y
T
X
Θ
)
]
=1/2[\nabla_{θ}tr(ΘΘ^TX^TX)-\nabla_{θ}tr(Θ^TX^Ty)-\nabla_{θ}tr(y^TXΘ)]
=1/2[∇θtr(ΘΘTXTX)−∇θtr(ΘTXTy)−∇θtr(yTXΘ)]
又因为
t
r
A
=
t
r
A
T
trA = trA^T
trA=trAT,所以
∇
θ
J
(
Θ
)
=
1
/
2
[
∇
θ
t
r
(
Θ
Θ
T
X
T
X
)
−
∇
θ
t
r
(
y
T
Θ
X
)
−
∇
θ
t
r
(
y
T
X
Θ
)
]
\nabla_{θ}J(Θ)=1/2[\nabla_{θ}tr(ΘΘ^TX^TX)-\nabla_{θ}tr(y^TΘX)-\nabla_{θ}tr(y^TXΘ)]
∇θJ(Θ)=1/2[∇θtr(ΘΘTXTX)−∇θtr(yTΘX)−∇θtr(yTXΘ)]
接下来有个小小的trick:
∇
Θ
t
r
(
Θ
Θ
T
X
T
X
)
=
∇
Θ
t
r
(
Θ
e
Θ
T
X
T
X
)
\nabla_{Θ}tr(ΘΘ^TX^TX)=\nabla_{Θ}tr(ΘeΘ^TX^TX)
∇Θtr(ΘΘTXTX)=∇Θtr(ΘeΘTXTX),
e是单位向量,这时候把
X
T
X
当
成
一
个
整
体
C
X^TX当成一个整体C
XTX当成一个整体C
满足了
∇
θ
t
r
(
Θ
e
Θ
T
X
T
X
)
=
X
T
X
Θ
e
+
X
T
X
Θ
e
T
\nabla_{θ}tr(ΘeΘ^TX^TX)=X^TXΘe+X^TXΘe^T
∇θtr(ΘeΘTXTX)=XTXΘe+XTXΘeT
=
X
T
X
Θ
+
X
T
X
Θ
X^TXΘ+X^TXΘ
XTXΘ+XTXΘ
∇
θ
t
r
(
y
T
X
Θ
)
=
X
T
y
\nabla_{θ}tr(y^TXΘ)=X^Ty
∇θtr(yTXΘ)=XTy,由
∇
A
t
r
(
A
B
)
=
B
T
\nabla_{A}tr(AB)=B^T
∇Atr(AB)=BT得到!
所以
∇
θ
J
(
Θ
)
\nabla_{θ}J(Θ)
∇θJ(Θ)可以改写为
1
/
2
(
X
T
X
Θ
+
X
T
X
Θ
−
X
T
y
−
X
T
y
)
1/2(X^TXΘ+X^TXΘ-X^Ty-X^Ty)
1/2(XTXΘ+XTXΘ−XTy−XTy)
令
∇
θ
J
(
Θ
)
=
0
\nabla_{θ}J(Θ)=0
∇θJ(Θ)=0,则
X
T
X
Θ
=
X
T
y
X^TXΘ=X^Ty
XTXΘ=XTy
解得
Θ
=
(
X
T
X
)
−
1
X
T
y
Θ=(X^TX)^{-1}X^Ty
Θ=(XTX)−1XTy
惊喜吗,意外吗,hhhhhhhhhhh
这和我们前面解得的结果一模一样;简直了!!!
这里有个小小的问题,为什么
(
X
T
X
)
−
1
不
写
成
X
−
1
(
X
T
)
−
1
(X^TX)^{-1}不写成X^{-1}(X^T)^{-1}
(XTX)−1不写成X−1(XT)−1,那这样
Θ
=
(
X
T
X
)
−
1
X
T
y
=
X
−
1
y
Θ=(X^TX)^{-1}X^Ty=X^{-1}y
Θ=(XTX)−1XTy=X−1y?
(
X
T
X
)
−
1
=
X
−
1
(
X
T
)
−
1
(X^TX)^{-1}=X^{-1}(X^T)^{-1}
(XTX)−1=X−1(XT)−1仅当X是可逆方阵才成立,还记得
X
X
X代表什么吗,
X
X
X是一个样本集,通常情况下样本数远大于特征数(也就是函数远大于列数),所以X不可能是方阵,因此上式也就不成立了!
其实这在第一个投影的证明中的最后一个式子也是这个原理,当A是可逆方阵时,说明b必定存在于X的空间上,因此对b的投影仍然在A的空间上!
小小的总结:
无论是投影还是求微元,实际上都是求一个近似解使得误差最小,但通过投影的方法其实能够更好的理解线性代数的精髓,不得不吹一下mit的线代,天哪太厉害了!