PCA算法的学习

PCA算法的学习

数学原理

  • 相关知识
    1.协方差矩阵
    2.基变换

  • 过程
    已知有m个n维的向量,如boston数据集则为503个3维的向量,第一维表示该房的NOX,第二维表示该房的RM,第三维表示该房的AGE,把每间房子的数据当作一个列向量 p i p_{i} pi,503个向量横着排列,形成一个矩阵D,D则为 ( p 1 , p 2 , p 3 . . . . . p 503 ) (p_{1},p_{2},p_{3}.....p_{503}) p1,p2,p3.....p503)
    明确目标——把这个3维的向量的矩阵降为2维的向量的矩阵,且尽量使得数据的损失最小化,注意(降维不是简单的把其中的一个维度删除)
    怎么才是损失最小化?
    首先要知道降维的意思,例如原本一个二维的平面上的数据(即为二维平面的向量)为方便起见,把这些向量都看作是一个个二维平面的点,向量的一端则为原点,把它们降到一维即为把它们投影到二维平面中的一条直线上,做法则是用与此直线方向的单位向量作内积,即得到投影,得到直线上的点。
    最小化直观地看,就是让这些点投影后尽量分散,举个例子如果投影时两个原来不同的点投影到的是同一个点,那么显然数据损失很严重,在数学上分散程度用的是投影后的坐标的方差
    零—均值规范化拿到数据后,把矩阵按行减去每一行的均值,这样使得每一行的均值为0,这样的好处就是让方差直接是 1 m ∑ i = 1 N ( a i ) 2 \frac{1}{m}\sum_{i=1}^N(a_i)^2 m1i=1Nai2而不是 1 m ∑ i = 1 N ( a i − u ) 2 \frac{1}{m}\sum_{i=1}^N(a_i-u)^2 m1i=1Naiu2
    在三维向量投影到二维时,还要更进一步得到第二个维度的方向,而第二个维度如果和第一个维度一样求,就会两个维度重合,为了尽可能包含更多信息,就要让两个维度线性无关,"最无关"的方案就是让第二维在与第一维垂直的平面上,同样地,在第二维上,其方差也要是这个平面中最大的。以此类推,现在的目标已经很明确了,找到k个基,k个基之间两两正交,且在这个基的维度上的方差都是能达到的最大值
    具体实现
    利用的是协方差矩阵,协方差矩阵 C = 1 m D D T C=\frac{1}{m}DD^{T} C=m1DDT其对角线上的元素为每一个维度的方差,其非对角线元素则为不同维度的协方差 C o v ( a , b ) = 1 m ∑ i = 1 N ( a i b i ) Cov(a,b)=\frac{1}{m}\sum_{i=1}^N(a_ib_i) Cov(a,b)=m1i=1N(aibi),协方差表示的即为两个向量的相关性,显然当降维到两个垂直的向量上时,这个协方差为0,现在即为要把这个协方差矩阵对角化。
    由于协方差是对称矩阵,因此用数学的关于对称矩阵的知识可知:
    1.最终对角矩阵的对角线上的元素为C矩阵的特征值
    2.要让特征值从大到小向下排列
    3.这个新的协方差矩阵即为新的一组基(维数与原来相同)的协方差矩阵
    4.而完成对角化的用于合同变换的矩阵则为k个正交特征单位向量P ( ε 1 , ε 2 . . . . ε k ) (\varepsilon_{1},\varepsilon_{2}....\varepsilon_{k}) (ε1,ε2....εk),也即作为新的一组维数为k的基,所以降维后的矩阵Y=PD
    (才疏学浅,应该有很多错漏的地方,若有错误,敬请斧正)
    课程学习例子
    以sklearn的datasets里面的boston数据集为例,只研究其中的三列数据,‘’NOX’’,’‘RM’’,’‘AGE’’,即boston.data[4:7]
    PCA算法的学习_第1张图片
    其中boston_df为(503,3)的一个数据集
    sklearn库中的decomposition的PCA函数即可以帮我们方便的完成降维
    首先要做的是零均值规范化
    PCA算法的学习_第2张图片
    然后开始用PCA函数,其中的n_components参数设为"mle"是指自动生成最优的降维方案,再用X训练pca
    在这里插入图片描述
    最后实现降维
    PCA算法的学习_第3张图片
    可以看到mle自动降到了二维
    可以查看pca的属性explained_variance_ratio表示每列的方差贡献率在这里插入图片描述
    注意:PCA是无参数函数,所以对于不同的几组数据,用一下pca都是同样的一套流程,因此不能实现针对特定数据组的优化

你可能感兴趣的:(PCA算法的学习)