PCA降维及python实现

发布于 6 天前  39 次阅读


定义

PCA(principal Component Analysis),主成分分析法。顾名思义,就是提取出数据中主要的成分,是一种数据压缩方法,常用于去除噪声、数据预处理,也是机器学习中常见的降维方法。

解释

专业一点讲,PCA就是用一个超平面(直线的高维推广)对所有样本进行恰当的表达。
例如一个三维图形(特征数为3),我们想将它降低到二维(特征数为2),最容易想到的就是投影到一个平面上,但这个平面不一定恰好就是平面或者其他坐标轴平面,而是一个能尽量接近原始数据信息的平面(由于总是不可避免的会丢失一些信息,所以这也是PCA的缺点)。

这个超平面应该具有以下性质:

  • 最近重构性:样本点到这个超平面的距离都足够近;
  • 最大可分性:样本点在这个超平面上的投影能尽量分开。
    但根据这两种性质最终会得到等价的推导
    此外,PCA与线性回归的区别:PCA是无监督学习,线性回归是监督学习。

步骤

对于样本集,有n个特征,即维数为n,每个特征有m个样本。我们想降低维数到
- #### 对所有样本进行中心化处理

表示i特征的第j个样本。
即将每个元素减去它的平均值,这样可以增加基向量的正交性。
- #### 计算协方差矩阵及特征值、特征向量
协方差矩阵是一个的矩阵,且满足对称正定,矩阵内的每个元素

其中是因为无偏估计。
#### 协方差:

协方差衡量了两属性之间的关系,
当cov(X,Y)>0时,表示X与Y正相关;
当cov(X,Y)<0时,代表X与Y负相关;
当cov(X,Y)=0时,代表X与Y不相关。
对于协方差矩阵A,其特征值\lambda(可能有多个)计算方法为


- #### 对特征值进行排序
选取最大的d个特征值对应的特征向量
投影为矩阵完成数据压缩

评价

通过特征值的计算我们可以得到 主成分所占的百分比,用来衡量模型的好坏。

对于前k个特征值所保留下的信息量计算方法如下:

此外,还可以通过交叉验证的方法进行评价。

实现

#coding=utf-8
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
X = np.array([[-1,2,66,-1], [-2,6,58,-1], [-3,8,45,-2], [1,9,36,1], [2,10,62,1], [3,5,83,2]])  #导入数据,维度为4
pca = PCA(n_components=2)   #降到2维
pca.fit(X)                  #训练
newX=pca.fit_transform(X)   #降维后的数据
# PCA(copy=True, n_components=2, whiten=False)
print(pca.explained_variance_ratio_)  #输出贡献率
print(newX)                  #输出降维后的数据


像烟花也是过一生,像樱花也是一生,只要亮过和盛开不就好了么?