第一周 【任务1】最小二乘与pca
任务简介:学习和阅读花书1-2章,观看讲解视频(1. 矩阵对角化与svd分解 2. 最小二乘与pca)
任务详解:
1、学习花书1-2章内容,重点关注:
- 2.1-2.4,2.6,2.10-2.11:线性代数基本概念、基本运算
- 2.5:机器学习中常用的范数及其性质
- 2.7-2.8:矩阵分解
- 2.9:矩阵的伪逆
- 2.12:主成分分析
2、观看讲解视频,进一步理解下列知识点:
- 特殊矩阵的对角化,以及一般矩阵的svd分解,以及应用
- 多元线性回归的最小二乘解法,逆矩阵伪逆矩阵
- pca主成分分析
打卡要求:打卡提交作业(不少于3张图片,不少于20字)
a. 掌握对称矩阵的对角化分解的计算过程(复习同济大学线性代数第五版p125的例12)
完成p135的第19题的第二小题(截图或拍照,然后打卡提交作业)
b. 熟悉svd分解算法的流程
c. 为什么要用最小二乘,以及最小范数的最小二乘,从矩阵的可逆的角度去解释(打卡提交文字,或拍照提交图片)
d. 理解pca的压缩思想以及损失函数,掌握pca的算法流程,并且编程实现(需要提交代码截图,数据可以随机产生)
e. 参考https://nbviewer.jupyter.org/github/ageron/handson-ml/blob/master/math_linear_algebra.ipynb,温习线性代数。
f. 阅读https://zhuanlan.zhihu.com/p/24709748,学习标量对矩阵的求导。
1. 掌握对称矩阵的对角化分解的计算过程(复习同济大学线性代数第五版p125的例12)完成p135的第19题的第二小题
题目的对称矩阵是
A
=
[
2
2
−
2
2
5
−
4
−
2
−
4
5
]
A=\left[\begin{array}{rrr} 2 & 2 & -2 \\ 2 & 5 & -4 \\ -2 & -4 & 5 \end{array}\right]
A=⎣⎡22−225−4−2−45⎦⎤
第一步:求出矩阵A的本征值
∣
A
−
λ
I
∣
=
∣
λ
−
2
−
2
2
−
2
λ
−
5
4
2
4
λ
−
5
∣
=
∣
λ
−
2
−
2
2
−
2
λ
+
2
λ
−
1
0
2
λ
−
2
0
λ
−
1
∣
=
(
λ
−
2
)
(
λ
−
1
)
2
−
4
(
λ
−
1
)
2
−
4
(
λ
−
1
)
2
=
(
λ
−
10
)
(
λ
−
1
)
2
\left|A-\lambda I\right| = \left|\begin{array}{ccc} \lambda-2 & -2 & 2 \\ -2 & \lambda-5 & 4 \\ 2 & 4 & \lambda-5 \end{array}\right| = \left|\begin{array}{ccc} \lambda-2 & -2 & 2 \\ -2\lambda+2 & \lambda-1 & 0 \\ 2\lambda-2 & 0 & \lambda-1 \end{array}\right| \\ = (\lambda-2)(\lambda -1)^2 -4(\lambda-1)^2 - 4(\lambda-1)^2 \\ = (\lambda-10)(\lambda-1)^2
∣A−λI∣=∣∣∣∣∣∣λ−2−22−2λ−5424λ−5∣∣∣∣∣∣=∣∣∣∣∣∣λ−2−2λ+22λ−2−2λ−1020λ−1∣∣∣∣∣∣=(λ−2)(λ−1)2−4(λ−1)2−4(λ−1)2=(λ−10)(λ−1)2
所以矩阵A的本征值是
λ
1
=
10
,
λ
2
=
λ
3
=
1
\lambda_1=10, \lambda_2=\lambda_3=1
λ1=10,λ2=λ3=1
第二步:根据特征值求出特征向量
对于
λ
1
=
10
\lambda_1=10
λ1=10,解方程
(
10
I
−
A
)
x
=
0
(10I - A)x=0
(10I−A)x=0: 【这里注意是减去原矩阵A】
10
I
−
A
=
[
10
−
2
−
2
2
−
2
10
−
5
4
2
4
10
−
5
]
=
[
8
−
2
2
−
2
5
4
2
4
5
]
=
[
8
−
2
2
0
18
18
0
18
18
]
=
[
8
−
2
2
0
18
18
0
0
0
]
=
[
4
−
1
1
0
1
1
0
0
0
]
10I - A = \left[\begin{array}{rrr} 10-2 & -2 & 2 \\ -2 & 10-5 & 4 \\ 2 & 4 & 10-5 \end{array}\right] = \left[\begin{array}{rrr} 8 & -2 & 2 \\ -2 & 5 & 4 \\ 2 & 4 & 5 \end{array}\right] = \left[\begin{array}{rrr} 8 & -2 & 2 \\ 0 & 18 & 18 \\ 0 & 18 & 18 \end{array}\right] \\ = \left[\begin{array}{rrr} 8 & -2 & 2 \\ 0 & 18 & 18 \\ 0 & 0 & 0 \end{array}\right] = \left[\begin{array}{rrr} 4 & -1 & 1 \\ 0 & 1 & 1 \\ 0 & 0 & 0 \end{array}\right]
10I−A=⎣⎡10−2−22−210−542410−5⎦⎤=⎣⎡8−22−254245⎦⎤=⎣⎡800−2181821818⎦⎤=⎣⎡800−21802180⎦⎤=⎣⎡400−110110⎦⎤
所以
(
10
I
−
A
)
x
=
0
⇒
[
4
−
1
1
0
1
1
0
0
0
]
⋅
[
x
1
x
2
x
3
]
=
0
⇒
x
1
=
[
1
2
−
2
]
(10I - A)\boldsymbol{x}=0 \Rightarrow \left[\begin{array}{rrr} 4 & -1 & 1 \\ 0 & 1 & 1 \\ 0 & 0 & 0 \end{array}\right] \cdot \begin{bmatrix}x_1\\ x_2\\ x_3\\ \end{bmatrix} = 0 \Rightarrow \boldsymbol{x_1}= \begin{bmatrix} 1\\ 2\\ -2\\ \end{bmatrix}
(10I−A)x=0⇒⎣⎡400−110110⎦⎤⋅⎣⎡x1x2x3⎦⎤=0⇒x1=⎣⎡12−2⎦⎤
对于
λ
2
=
λ
3
=
1
\lambda_2=\lambda_3=1
λ2=λ3=1, 解方程
(
I
−
A
)
x
=
0
(I-A)x=0
(I−A)x=0:
I
−
A
=
[
1
−
2
−
2
2
−
2
1
−
5
4
2
4
1
−
5
]
=
[
−
1
−
2
2
−
2
−
4
4
2
4
−
4
]
=
[
−
1
−
2
2
0
0
0
2
4
−
4
]
=
[
−
1
−
2
2
0
0
0
0
0
0
]
=
[
−
1
2
−
2
0
0
0
0
0
0
]
I - A = \left[\begin{array}{rrr} 1-2 & -2 & 2 \\ -2 & 1-5 & 4 \\ 2 & 4 & 1-5 \end{array}\right] = \left[\begin{array}{rrr} -1 & -2 & 2 \\ -2 & -4 & 4 \\ 2 & 4 & -4 \end{array}\right] = \left[\begin{array}{rrr} -1 & -2 & 2 \\ 0 & 0 & 0 \\ 2 & 4 & -4 \end{array}\right] \\ = \left[\begin{array}{rrr} -1 & -2 & 2 \\ 0 & 0 & 0 \\ 0 & 0 & 0 \end{array}\right] = \left[\begin{array}{rrr} -1 & 2 & -2 \\ 0 & 0 & 0 \\ 0 & 0 & 0 \end{array}\right]
I−A=⎣⎡1−2−22−21−54241−5⎦⎤=⎣⎡−1−22−2−4424−4⎦⎤=⎣⎡−102−20420−4⎦⎤=⎣⎡−100−200200⎦⎤=⎣⎡−100200−200⎦⎤
所以
(
I
−
A
)
x
=
0
⇒
[
−
1
2
−
2
0
0
0
0
0
0
]
⋅
[
x
1
x
2
x
3
]
=
0
⇒
x
2
=
[
−
2
1
0
]
,
x
3
=
[
2
0
1
]
(I - A)\boldsymbol{x}=0 \Rightarrow \left[\begin{array}{rrr} -1 & 2 & -2 \\ 0 & 0 & 0 \\ 0 & 0 & 0 \end{array}\right] \cdot \begin{bmatrix}x_1\\ x_2\\ x_3\\ \end{bmatrix}=0 \Rightarrow \boldsymbol{x_2}= \begin{bmatrix} -2\\ 1\\ 0\\ \end{bmatrix}, \boldsymbol{x_3} = \begin{bmatrix} 2\\ 0\\ 1\\ \end{bmatrix}
(I−A)x=0⇒⎣⎡−100200−200⎦⎤⋅⎣⎡x1x2x3⎦⎤=0⇒x2=⎣⎡−210⎦⎤,x3=⎣⎡201⎦⎤
第三步,因为出现了两重特征值,我们要对他们做Schmit正交化:
β
2
=
x
2
\beta_2=\boldsymbol{x_2}
β2=x2,
β
3
=
x
3
−
(
x
3
,
β
2
)
(
β
2
,
β
2
)
x
2
=
[
−
2
1
0
]
−
−
4
5
[
2
0
1
]
=
1
5
[
−
2
5
4
]
\beta_3=\boldsymbol{x_3} - \dfrac{(\boldsymbol{x_3}, \beta_2)}{(\beta_2, \beta_2)}\boldsymbol{x_2} = \begin{bmatrix} -2\\ 1\\ 0\\ \end{bmatrix} - \dfrac{-4}{5} \begin{bmatrix} 2\\ 0\\ 1\\ \end{bmatrix} = \dfrac{1}{5}\begin{bmatrix} -2\\ 5\\ 4\\ \end{bmatrix}
β3=x3−(β2,β2)(x3,β2)x2=⎣⎡−210⎦⎤−5−4⎣⎡201⎦⎤=51⎣⎡−254⎦⎤
第四步,将所有的特征向量正则化
β
1
′
=
β
1
∥
β
1
∥
=
1
3
[
1
2
−
2
]
,
β
2
′
=
β
2
∥
β
2
∥
=
1
5
[
2
0
1
]
,
β
3
′
=
β
3
∥
β
3
∥
=
1
3
5
[
−
2
5
4
]
\beta_1^{\prime} = \dfrac{\beta_1}{\left\Vert\beta_1\right\Vert} = \dfrac{1}{3}\begin{bmatrix} 1\\ 2\\ -2\\ \end{bmatrix}, \beta_2^{\prime} = \dfrac{\beta_2}{\left\Vert\beta_2\right\Vert} = \dfrac{1}{\sqrt{5}}\begin{bmatrix} 2\\ 0\\ 1\\ \end{bmatrix}, \beta_3^{\prime} = \dfrac{\beta_3}{\left\Vert\beta_3\right\Vert} = \dfrac{1}{3\sqrt{5}}\begin{bmatrix} -2\\ 5\\ 4\\ \end{bmatrix}
β1′=∥β1∥β1=31⎣⎡12−2⎦⎤,β2′=∥β2∥β2=51⎣⎡201⎦⎤,β3′=∥β3∥β3=351⎣⎡−254⎦⎤
第五步,将n个两两正交的特征向量构成正交阵P,
P
=
[
1
3
2
5
−
2
3
5
2
3
0
5
3
5
−
2
3
1
5
4
3
5
]
P = \left[\begin{array}{rrr} \dfrac{1}{3} & \dfrac{2}{\sqrt{5}} & -\dfrac{2}{3\sqrt{5}} \\ \dfrac{2}{3} & 0 & \dfrac{5}{3\sqrt{5}} \\ -\dfrac{2}{3} & \dfrac{1}{\sqrt{5}} & \dfrac{4}{3\sqrt{5}} \end{array}\right]
P=⎣⎢⎢⎢⎢⎢⎡3132−3252051−352355354⎦⎥⎥⎥⎥⎥⎤
因此有
P
−
1
A
P
=
P
T
A
P
=
A
=
[
10
0
0
0
1
0
0
0
1
]
P^{-1} A P=P^{T} A P=A=\left[\begin{array}{lll} 10 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array}\right]
P−1AP=PTAP=A=⎣⎡1000010001⎦⎤
2. 熟悉svd分解算法的流程、
针对一般矩阵 A m × n A_{m\times n} Am×n
第一步,首先确认 A T A A^{T}A ATA为对称正定矩阵:1.对称性,2. x T A T A x = ( x T A T ) ( A x ) = ( A x ) T ( A x ) ≥ 0 x^{T} A^{T} A x=\left(x^{T} A^{T}\right)(A x)=(A x)^{T}(A x) \geq 0 xTATAx=(xTAT)(Ax)=(Ax)T(Ax)≥0
第二步,分别对
(
A
T
A
)
T
\left(A^{T} A\right)^{T}
(ATA)T与
A
T
A
A^{T}A
ATA对角化、本征值分解:
(
A
T
A
)
n
×
n
=
U
T
D
U
(
A
A
T
)
m
×
m
=
V
T
D
V
\begin{array}{l} \left(A^{T} A\right)_{n \times n}=U^{T} D U \\ \left(A A^{T}\right)_{m \times m}=V^{T} D V \end{array}
(ATA)n×n=UTDU(AAT)m×m=VTDV
⇒ A m × n = V m × m T ( λ 1 1 2 λ 2 1 2 ⋱ ) U n × n \Rightarrow A_{m \times n}=V_{m \times m}^{T}\left(\begin{array}{ccc} \lambda_{1}^{\frac{1}{2}} & & \\ & \lambda_{2}^{\frac{1}{2}} & \\ & & \ddots \end{array}\right) U_{n \times n} ⇒Am×n=Vm×mT⎝⎜⎛λ121λ221⋱⎠⎟⎞Un×n
第三步,根据本征值对各个成分进行分解。其中 λ i \lambda_{i} λi为对角矩阵D的对角元素。【这里D不用是方阵】
令
V
m
×
m
T
=
(
v
1
,
v
2
,
⋯
,
v
m
)
V_{m \times m}^{T}=\left(v_{1}, v_{2}, \cdots, v_{m}\right)
Vm×mT=(v1,v2,⋯,vm),
U
n
×
n
T
=
(
u
1
,
u
2
,
⋯
,
u
n
)
U_{n \times n}^{T}=\left(u_{1}, u_{2}, \cdots, u_{n}\right)
Un×nT=(u1,u2,⋯,un).因此有
⇒
A
m
×
n
=
λ
1
1
2
v
1
u
1
T
+
λ
2
1
2
v
2
u
2
T
+
⋯
\Rightarrow A_{m \times n}=\lambda_{1}^{\frac{1}{2}} v_{1} u_{1}^{T}+\lambda_{2}^{\frac{1}{2}} v_{2} u_{2}^{T}+\cdots
⇒Am×n=λ121v1u1T+λ221v2u2T+⋯
第四步,根据需要选取前k个本征值对应的成分
3. 为什么要用最小二乘,以及最小范数的最小二乘,从矩阵的可逆的角度去解释
对于矩阵
X
N
×
n
X_{N\times n}
XN×n,如果
N
=
n
N=n
N=n且X可逆,可以直接解出
a
=
X
−
1
Y
a=X^{-1}Y
a=X−1Y.但是因为矩阵很多时候不是方阵,我们有:
min
∥
x
a
−
Y
∥
2
=
J
,
∂
J
∂
a
=
x
T
(
x
a
−
Y
)
=
0
\min \|x a-Y\|^{2}=J, \quad \frac{\partial J}{\partial a}=x^{T}(x a-Y)=0
min∥xa−Y∥2=J,∂a∂J=xT(xa−Y)=0
所以要考虑两种情况去判断 x T x x^{T}x xTx是否可逆。
- N > n N>n N>n,这时 ( x T x ) 3 × 3 \left(x^{T} x\right)_{3 \times 3} (xTx)3×3一般是可逆的。 a = ( x T x ) − 1 x T Y a=\left(x^{T} x\right)^{-1} x^{T} Y a=(xTx)−1xTY
- N < n N<n N<n,这时矩阵的秩满足: R ( x T x ) ≤ R ( x ) ≤ 3 R\left(x^{T} x\right) \leq R(x) \leq 3 R(xTx)≤R(x)≤3,因此 x T x x^{T}x xTx不可逆
为了解决不可逆的问题,我们可以加入一个正则项
λ
\lambda
λ。
J
=
∥
x
a
−
Y
∥
2
+
λ
∥
a
∥
2
,
⇒
∂
J
∂
a
=
x
T
x
a
−
x
T
Y
+
λ
a
=
0
⇒
a
=
(
x
T
x
+
λ
I
)
−
1
x
T
Y
\mathrm{J}=\|x a-Y\|^{2}+\lambda\|a\|^{2},\Rightarrow \frac{\partial J}{\partial a}=x^{T} x a-x^{T} Y+\lambda a=0 \Rightarrow a=\left(x^{T} x+\lambda I\right)^{-1} x^{T} Y
J=∥xa−Y∥2+λ∥a∥2,⇒∂a∂J=xTxa−xTY+λa=0⇒a=(xTx+λI)−1xTY
因为
a
T
(
x
T
x
+
λ
I
)
a
=
(
x
a
)
T
(
x
a
)
+
λ
a
T
a
>
0
⇒
λ
i
>
0
a^{T}\left(x^{T} x+\lambda I\right) a=(x a)^{T}(x a)+\lambda a^{T} a>0 \Rightarrow \lambda_{i} >0
aT(xTx+λI)a=(xa)T(xa)+λaTa>0⇒λi>0
因此
∣
x
T
x
+
λ
I
∣
>
0
\left|x^{T} x+\lambda I\right|>0
∣∣xTx+λI∣∣>0恒成立,一定可逆
4. 理解pca的压缩思想以及损失函数,掌握pca的算法流程,并且编程实现(需要提交代码截图,数据可以随机产生)
pca就是让数据空间中的样本投影到一个新的坐标向量,使得需要表示这个点的参数维度降低。比如说原本的样本数据空间是二维空间,N个样本就有
2
×
N
2\times N
2×N个参数需要确定,投影到一维空间后,参数就减少到
(
N
+
2
)
(N+2)
(N+2)【因为新的一维空间的基坐标也要用两个原来样本数据空间的基坐标的参数确定】。
样本点投影到新的坐标轴后,投影点和原样本点的距离就是error,两个点的距离向量就是我们要优化的对象。距离向量的距离就是我们要优化的损失函数
J
=
∥
e
⃗
∥
2
=
e
T
e
=
[
x
−
(
x
T
u
)
u
]
T
[
x
−
(
x
T
u
)
u
]
=
[
x
T
−
(
x
T
u
)
u
T
]
[
x
−
(
x
T
u
)
u
]
=
x
T
x
−
(
x
T
u
)
(
x
T
u
)
−
(
x
T
u
)
(
x
T
u
)
+
(
x
T
u
)
2
u
T
u
=
∥
x
∥
2
−
(
x
T
u
)
2
−
(
x
T
u
)
2
+
(
x
T
u
)
2
=
∥
x
∥
2
−
(
x
T
u
)
2
\begin{aligned} J &=\|\vec{e}\|^{2}=e^{T} e=\left[x-\left(x^{T} u\right) u\right]^{T}\left[x-\left(x^{T} u\right) u\right] \\ &=\left[x^{T}-\left(x^{T} u\right) u^{T}\right]\left[x-\left(x^{T} u\right) u\right] \\ &=x^{T} x-\left(x^{T} u\right)\left(x^{T} u\right)-\left(x^{T} u\right)\left(x^{T} u\right)+\left(x^{T} u\right)^{2} u^{T} u \\ &=\|x\|^{2}-\left(x^{T} u\right)^{2}-\left(x^{T} u\right)^{2}+\left(x^{T} u\right)^{2} \\ &=\|x\|^{2}-\left(x^{T} u\right)^{2} \end{aligned}
J=∥e∥2=eTe=[x−(xTu)u]T[x−(xTu)u]=[xT−(xTu)uT][x−(xTu)u]=xTx−(xTu)(xTu)−(xTu)(xTu)+(xTu)2uTu=∥x∥2−(xTu)2−(xTu)2+(xTu)2=∥x∥2−(xTu)2
算法流程:
输入:假定我们有样本集
D
=
{
x
1
,
x
2
,
x
3
,
.
.
.
}
D =\{\boldsymbol{x_1}, \boldsymbol{x_2}, \boldsymbol{x_3}, ...\}
D={x1,x2,x3,...},以及我们要优化的低维空间维数
d
′
d^{\prime}
d′。
过程:
- 对所有样本进行中心化
- 计算样本的协方差矩阵 X X T \boldsymbol{X}\boldsymbol{X^T} XXT
- 对协方差矩阵进行特征值分解
- 取最大的 d ′ d^{\prime} d′个特征值所对应的特征向量 w 1 , w 2 , . . . , w d ′ w_{1}, w_{2}, ..., w_{d^{\prime}} w1,w2,...,wd′
输出:投影矩阵 W = ( w 1 , w 2 , . . . , w d ′ ) W=(w_{1}, w_{2}, ..., w_{d^{\prime}}) W=(w1,w2,...,wd′)
【PCA的精髓就是通过协方差矩阵特征值分解,然后取出能保留最多方差成分的特征向量】
代码: (ref: https://machinelearningmastery.com/calculate-principal-component-analysis-scratch-python/)
from numpy import array
from numpy import mean
from numpy import cov
from numpy.linalg import eig
# define a matrix
A = array(
[[1, 2],
[3, 4],
[5, 6]]
)
print(A)
# calculate the mean of each column
M = mean(A.T, axis=1)
print(M)
# center columns by subtracting column means
C = A - M
print(C)
# calculate covariance matrix of centered matrix
V = cov(C.T)
print(V)
# eigendecompostion of covariance matrix
values, vectors = eig(V)
print(values)
print(vectors)
# project data
P = vectors.T.dot(C.T)
print(P.T)