文章目录

  • 前置知识
  • PCA
  • 均值和协方差
  • 均值
  • 协方差矩阵
  • 主成分分析
  • 变量代换
  • 多维数据的降维
  • 算法步骤
  • 代码实现
  • 特征值分解
  • 奇异值分解


前置知识

  • 二次型
  • 对角化
  • 奇异值分解
  • 施密特正交化

PCA

主成分分析是一种从原始数据中消除冗余信息,只需要一个或者几个属性合成的属性就可以提供大部分信息的方法。大概过程是找出一个特殊的线性组合,给要分析的元素赋予一个权值,综合得到一个新的数据。

假设每一个样本有p个属性,一共有n个样本,那么这些向量可以构成一个python和spss的主成分分析结果不一样 python主成分分析实例_协方差矩阵的矩阵,称为观测矩阵

主成分分析实际上相当于变换坐标轴,并降低维度。

如一个二维数据集如下图:

python和spss的主成分分析结果不一样 python主成分分析实例_机器学习_02


经过PCA进行降维之后可以使用一个维度进行表示,如下图

python和spss的主成分分析结果不一样 python主成分分析实例_机器学习_03

均值和协方差

均值

python和spss的主成分分析结果不一样 python主成分分析实例_机器学习_04为一个python和spss的主成分分析结果不一样 python主成分分析实例_pca降维_05观测矩阵,则其样本平均值M为:


python和spss的主成分分析结果不一样 python主成分分析实例_协方差矩阵_06



python和spss的主成分分析结果不一样 python主成分分析实例_协方差矩阵_07


则新矩阵

python和spss的主成分分析结果不一样 python主成分分析实例_信息压缩_08


具有零样本均值,这种矩阵

python和spss的主成分分析结果不一样 python主成分分析实例_数据挖掘_09被称为

平均偏差形式

协方差矩阵

协方差矩阵是一个python和spss的主成分分析结果不一样 python主成分分析实例_信息压缩_10的矩阵python和spss的主成分分析结果不一样 python主成分分析实例_机器学习_11,其定义为


python和spss的主成分分析结果不一样 python主成分分析实例_协方差矩阵_12

由于任何具有python和spss的主成分分析结果不一样 python主成分分析实例_协方差矩阵_13形式的矩阵都是半正定的,所以python和spss的主成分分析结果不一样 python主成分分析实例_机器学习_11也是半正定的。

PS: 虽然协方差矩阵是半正定矩阵,但是由于计算误差,算出来的特征值可能是负数。

其中的对角线元素python和spss的主成分分析结果不一样 python主成分分析实例_机器学习_15称为python和spss的主成分分析结果不一样 python主成分分析实例_数据挖掘_16的方差。方差用来度量python和spss的主成分分析结果不一样 python主成分分析实例_数据挖掘_16的分散性。

数据的总方差被称为矩阵的,即python和spss的主成分分析结果不一样 python主成分分析实例_机器学习_11的对角线元素之和,记做python和spss的主成分分析结果不一样 python主成分分析实例_信息压缩_19

python和spss的主成分分析结果不一样 python主成分分析实例_机器学习_11中的元素python和spss的主成分分析结果不一样 python主成分分析实例_数据挖掘_21称为python和spss的主成分分析结果不一样 python主成分分析实例_数据挖掘_22python和spss的主成分分析结果不一样 python主成分分析实例_数据挖掘_16的协方差。若协方差为0,则称python和spss的主成分分析结果不一样 python主成分分析实例_数据挖掘_22python和spss的主成分分析结果不一样 python主成分分析实例_数据挖掘_16无关的。当协方差矩阵是对角阵或几乎是对角阵时,python和spss的主成分分析结果不一样 python主成分分析实例_pca降维_26中多变量分析可以简化。

主成分分析

变量代换

设矩阵python和spss的主成分分析结果不一样 python主成分分析实例_机器学习_04已经称为平均偏差形式,主成分分析的目标是找到一个python和spss的主成分分析结果不一样 python主成分分析实例_信息压缩_10的正交矩阵python和spss的主成分分析结果不一样 python主成分分析实例_信息压缩_29,确定一个变量代换python和spss的主成分分析结果不一样 python主成分分析实例_协方差矩阵_30,或
python和spss的主成分分析结果不一样 python主成分分析实例_信息压缩_31
满足新的变量python和spss的主成分分析结果不一样 python主成分分析实例_协方差矩阵_32两两无关,并保证整理后的方差具有递减顺序。
变量正交变换python和spss的主成分分析结果不一样 python主成分分析实例_数据挖掘_33说明,每一个观测向量python和spss的主成分分析结果不一样 python主成分分析实例_信息压缩_34得到一个新”名称“python和spss的主成分分析结果不一样 python主成分分析实例_协方差矩阵_35,即python和spss的主成分分析结果不一样 python主成分分析实例_协方差矩阵_35python和spss的主成分分析结果不一样 python主成分分析实例_信息压缩_34python和spss的主成分分析结果不一样 python主成分分析实例_信息压缩_38为基的坐标。
易得对任何正交矩阵python和spss的主成分分析结果不一样 python主成分分析实例_信息压缩_38python和spss的主成分分析结果不一样 python主成分分析实例_协方差矩阵_40的协方差是python和spss的主成分分析结果不一样 python主成分分析实例_数据挖掘_41,于是可以构造符合要求的P。设python和spss的主成分分析结果不一样 python主成分分析实例_pca降维_42是对角矩阵且python和spss的主成分分析结果不一样 python主成分分析实例_机器学习_11的特征值在python和spss的主成分分析结果不一样 python主成分分析实例_pca降维_42的对角线上,重新整理使得python和spss的主成分分析结果不一样 python主成分分析实例_数据挖掘_45
python和spss的主成分分析结果不一样 python主成分分析实例_信息压缩_46找到正交矩阵python和spss的主成分分析结果不一样 python主成分分析实例_信息压缩_38,它的列对应单位特征向量python和spss的主成分分析结果不一样 python主成分分析实例_pca降维_48,且有python和spss的主成分分析结果不一样 python主成分分析实例_机器学习_49
协方差矩阵python和spss的主成分分析结果不一样 python主成分分析实例_机器学习_11的单位特征向量python和spss的主成分分析结果不一样 python主成分分析实例_pca降维_48称为(观测矩阵中)数据的主成分。第一主成分是python和spss的主成分分析结果不一样 python主成分分析实例_机器学习_11中最大特征值对应的特征向量,第二主成分以此类推。
python和spss的主成分分析结果不一样 python主成分分析实例_信息压缩_53python和spss的主成分分析结果不一样 python主成分分析实例_协方差矩阵_54中的元素,第一主成分python和spss的主成分分析结果不一样 python主成分分析实例_协方差矩阵_54可以通过公式python和spss的主成分分析结果不一样 python主成分分析实例_信息压缩_56来确定新变量python和spss的主成分分析结果不一样 python主成分分析实例_机器学习_57,可以看出python和spss的主成分分析结果不一样 python主成分分析实例_机器学习_57是原变量python和spss的主成分分析结果不一样 python主成分分析实例_机器学习_59的线性组合。通过同样的方式,可以确定python和spss的主成分分析结果不一样 python主成分分析实例_信息压缩_60等。
通过这种方式,可以将变量进行代换,但是优点并不明显。但是如果在对角矩阵python和spss的主成分分析结果不一样 python主成分分析实例_pca降维_42中,前python和spss的主成分分析结果不一样 python主成分分析实例_数据挖掘_62个方差和比其他方差大得多,那么我们就可以近似的把数据当成python和spss的主成分分析结果不一样 python主成分分析实例_数据挖掘_62维数据而不是python和spss的主成分分析结果不一样 python主成分分析实例_协方差矩阵_64维的。

多维数据的降维

选取一个重构阈值python和spss的主成分分析结果不一样 python主成分分析实例_机器学习_65,选取使得下式成立的最小python和spss的主成分分析结果不一样 python主成分分析实例_数据挖掘_62


python和spss的主成分分析结果不一样 python主成分分析实例_pca降维_67


PCA仅需保留

python和spss的主成分分析结果不一样 python主成分分析实例_pca降维_68和样本均值

python和spss的主成分分析结果不一样 python主成分分析实例_数据挖掘_69即可将新样本投影到低维空间。转换过程不可避免的造成数据的损失,但是舍弃这部分信息往往是必要的。一方面降维之后可以使样本的采样密度增大,这也是降维的主要动机,其次可以在一定程度上起到降噪的效果,因为最小的特征值对应的特征向量往往与噪声有关。

算法步骤

input

样本集python和spss的主成分分析结果不一样 python主成分分析实例_协方差矩阵_70,重构阈值python和spss的主成分分析结果不一样 python主成分分析实例_机器学习_65

process

  1. 进行去中心化,得到矩阵python和spss的主成分分析结果不一样 python主成分分析实例_信息压缩_72
  2. 计算样本的协方差矩阵python和spss的主成分分析结果不一样 python主成分分析实例_信息压缩_73(常用对输入矩阵的奇异值分解代替特征值分解)
  3. 对协方差矩阵进行特征值分解
  4. 取出最大的python和spss的主成分分析结果不一样 python主成分分析实例_数据挖掘_74个特征值对应的特征向量 python和spss的主成分分析结果不一样 python主成分分析实例_数据挖掘_75

Output

投影矩阵python和spss的主成分分析结果不一样 python主成分分析实例_信息压缩_38 = [python和spss的主成分分析结果不一样 python主成分分析实例_机器学习_77]

代码实现

特征值分解

from numpy import *

def PCA( data, t ):
    m, n = data.shape
    M = data.sum(1) / n
    M = tile(M,(1,n))
    B = data - M
    D, P = linalg.eig( B*B.T /(n - 1) )
    index = argsort(-D)
    D = D[index]; P = P[index];D[D<0] = 0
    denominator = sum(D); numerator = 0
    for i in range(len(D)):
        numerator += D[i]
        if numerator / denominator >= t:
            return diag(D[:i + 1]),P[:,:i + 1], M
    return diag(D), P, M

奇异值分解

from numpy import *

def PCA( data, k ):
    m, n = data.shape
    M = data.sum(1) / n
    M = tile(M,(1,n))
    B = data - M
    U, S, V = linalg.svd( B*B.T /(n - 1) )
    return U[:,:k+1], S[:,:k+1]