本文的参考文章:【机器学习】降维——PCA(非常详细)
1. 介绍
又称主分量分析技术,旨在利用降维的思想,把多指标转化为少数几个综合指标。比如对于WINE数据集总共有178个样本,每个样本有13个属性,有1个分类标签。那么我们可以猜测是否这13个属性都能对我们的分类提供帮助,是否存在某些属性是在划水?如果能把这些属性降维能够帮助我们降低数据量。
本文作为PCA降维的理论部分,在aistudio平台我也制作了对WINE降维的小demo,代码只有几十行,可以直接运行试试
对WINE数据集PCA降维
2. 矩阵的内积
对于向量内积 Y = P X Y=PX Y=PX代表 X X X在经过 P P P的变换下,变换到了新的空间中去,值为 Y Y Y。
3. 协方差和协方差矩阵
协方差公式:
C
o
n
v
(
a
,
b
)
=
1
m
−
1
∑
i
=
1
m
(
a
i
−
μ
a
)
(
b
i
−
μ
b
)
Conv(a,b)=\frac{1}{m-1}\sum_{i=1}^{m}(a_i-μ_a)(b_i-μ_b)
Conv(a,b)=m−11i=1∑m(ai−μa)(bi−μb)
对于a和b在计算时,会减去各自的均值,在实际应用中我们会j讲数据a和b进行标准化,即标准化到均值=0,方差=1,因为在这里就可以看出均值=0的好处,所以如果你使用了数据标准化,上式就可以写成如下:
C
o
n
v
(
a
,
b
)
=
1
m
∑
i
=
1
m
a
i
b
i
Conv(a,b)=\frac{1}{m}\sum_{i=1}^{m}a_ib_i
Conv(a,b)=m1i=1∑maibi
(当协方差为0时,表示两个变量完全独立。为了让协方差为0,问选择第二个基时只能与第一个基正交的方向上进行,因此最终选择的两个方向一定是正交的。)
对于a和b如果能够投影到新的空间时是投影到不同的坐标轴上,那么他们就是正交的,协方差一定为0。
就比如当你的向量 X X X投影到 P = ( 1 0 0 1 ) P=\left(\begin{array}{l}1 & 0 \\0 & 1\end{array}\right) P=(1001)的空间上(或者对 X X X做P变换),实际就是将X在笛卡尔直角坐标系中做分解,分别在X轴上和Y轴上映射。那么在X轴上和Y轴上的量协方差一定为0,所以在选择基(也就是P)时,各个基一定正交,则变换后的X各个分量也就一定正将,其协方差为0
哪么我们为什么要讨论协方差?
我们指导协方差是度量两个量的相关性,正如我们的WINE数据集,每个样本有13个属性,则是否这些属性中某些属性存在相关性?假设属性a和属性b存在相关性,a和b的变化一致,那我只需要取a或者b其中一个来帮助我描述数据即可啊。那么数据集中任意两个属性的协方差都为0,表示任意两个属性都是不相关的,是有各自特征谁也代替不了的。所以我们的目标就是把属性之间能够相互代替的找出来并使用其中一个来代表即可。
现在假设数据集
X
X
X有a和b两个属性,则:
X
=
(
a
1
a
2
.
.
.
a
m
b
1
b
2
.
.
.
b
m
)
X=\left(\begin{array}{l}a_1 & a_2 & ... & a_m \\b_1 & b_2 & ... & b_m\end{array}\right)
X=(a1b1a2b2......ambm),我们按如下凑出
C
o
n
v
Conv
Conv的表达式,令C为X的协方差矩阵:
1
m
X
X
T
=
(
1
m
∑
i
=
1
m
a
i
2
1
m
∑
i
=
1
m
a
i
b
i
1
m
∑
i
=
1
m
a
i
b
i
1
m
∑
i
=
1
m
b
i
2
)
=
(
C
o
n
v
(
a
,
a
)
C
o
n
v
(
a
,
b
)
C
o
n
v
(
b
,
a
)
C
o
n
v
(
b
,
b
)
)
\frac{1}{m}XX^T=\left(\begin{array}{l}\frac{1}{m}\sum_{i=1}^{m}a^2_i & \frac{1}{m}\sum_{i=1}^{m}a_ib_i\\\frac{1}{m}\sum_{i=1}^{m}a_ib_i & \frac{1}{m}\sum_{i=1}^{m}b^2_i\end{array}\right)=\left(\begin{array}{l}Conv(a,a) & Conv(a,b) \\Conv(b,a) & Conv(b,b)\end{array}\right)
m1XXT=(m1∑i=1mai2m1∑i=1maibim1∑i=1maibim1∑i=1mbi2)=(Conv(a,a)Conv(b,a)Conv(a,b)Conv(b,b))
注意:
C
o
n
v
(
a
,
a
)
Conv(a,a)
Conv(a,a)即为协方差的特殊形式,即a的方差
此时我们可以看出,因为我们希望X的不同属性之间的协方差(非对角线)为0(代表属性之间不相关),相同属性之间的协方差(对角线)越大越好。于是我们希望对角线的值越大,非对角线的值为0,那么应该如何去变换?
4. 矩阵对角化
假设我们已经找到了变换矩阵
P
P
P,使得
Y
=
P
X
Y=PX
Y=PX,因为我们希望对原始数据
X
X
X变换后的
Y
Y
Y,是理想的,即不同属性之间独立。那么意味着
Y
Y
Y的协方差矩阵D应当是对角线大,但是非对角线为0,这就是对角矩。那么我们如何去变换去找到这个变换矩阵
P
P
P?
我们已知:
Y
=
P
X
C
=
1
m
X
X
T
Y=PX\\C=\frac{1}{m}XX^T
Y=PXC=m1XXT
则:
D
=
1
m
Y
Y
T
=
1
m
P
X
(
P
X
)
T
=
1
m
P
X
X
T
P
T
=
P
1
m
X
X
T
P
T
=
P
C
P
T
D=\frac{1}{m}YY^T\\=\frac{1}{m}PX(PX)^T\\=\frac{1}{m}PXX^TP^T\\=P\frac{1}{m}XX^TP^T\\=PCP^T
D=m1YYT=m1PX(PX)T=m1PXXTPT=Pm1XXTPT=PCPT
至此,我们明了了,直接找 P P P不好找,但是在这里 P P P是可以将X的协方差矩阵(实对称矩阵)变换为对角矩阵。
C为实对称矩阵,它有以下好的性质:
- 实对称矩阵的不同特征值对应的特征向量必然正交
- 设特征向量λ重数为 r,则必然存在 r 个线性无关的特征向量对应于λ ,因此可以将这 r 个特征向量单位正交化。
由上面两条可知,一个 n 行 n 列的实对称矩阵一定可以找到 n 个单位正交特征向量,设这 n 个特征向量为
(
e
1
,
e
2
,
.
.
.
,
e
n
)
({e_1,e_2,...,e_n})
(e1,e2,...,en) ,我们将其按列组成矩阵
E
=
(
e
1
,
e
2
,
.
.
.
,
e
n
)
E=({e_1,e_2,...,e_n})
E=(e1,e2,...,en)。则对实对称矩阵C有如下结论:
E
T
C
E
=
Λ
=
(
λ
1
λ
2
.
.
.
λ
n
)
=
D
E^TCE=\varLambda=\left(\begin{array}{l}λ_1 & \\ & λ_2 \\ & & ... \\ &&&λ_n \end{array}\right)=D
ETCE=Λ=⎝⎜⎜⎛λ1λ2...λn⎠⎟⎟⎞=D
λ为特征值,从大到小排序。
而:
P
C
P
T
=
D
PCP^T=D
PCPT=D
故得到
P
P
P:
P
=
E
T
P=E^T
P=ET
至此 P P P已经得解。
5. 如何降维(使用 P P P)?
我们得到了 P = E T P=E^T P=ET,如果我们想要将 X X X经 P P P转换到1维空间,那么我们将P中的第一个λ保留即可,转换到几维,就保留前几个λ。然后再计算 P X PX PX即可得到最终的 Y Y Y。
同时我们计算每个λ占总λ和的比例,可以看出每个λ对数据描述的贡献度。
1535

被折叠的 条评论
为什么被折叠?



