当前位置:   article > 正文

机器学习-笔记(六)-特征提取PCA_pca特征提取

pca特征提取

什么是特征提取?

对某一模式的组测量值进行变换,以突出该模式具有代表性特征的一种方法。通过影像分析和变换,以提取所需特征的方法。

以上是百度百科的定义,按笔者的理解就是在所有的特征中通过某些方法找到具有代表性的特征

特征提取方法--PCA

PCA是什么?

pca叫主成分分析法,本质上是一个降维的过程。

总共有x_i...x_m共m个数据,每个数据由n个维度组成,组成了一个m行n列的x矩阵,经过PCA方法后,生成的数据是y_i...y_m,每个数据的维度是p,p< n,而这最终的p个维度就是主成分

如何降维/怎么找到主成分/PCA的步骤

以上三个问题等价于一个问题,就是PCA算法过程

降维的结果千千万,我们的标准是要使得降维后的数据尽可能地包含更多的信息,转换成数学语言就是,我们要找到一个或多个基(概率论的知识)使得所有数据变换成这个基上的坐标后,方差值最大,如果某些基的方差值非常接近,我们又该怎么判定哪个基最优呢?这时我们规定,基向量的协方差为0,同时基向量的长度是1,即为单位基向量。

这让我想起了线性代数中,给出n个向量,找出可以表示这n个向量的最小的非线性相关的向量。

总结:将一组n维向量降为p维,目标是选择p个单位正交基,使得原始数据变换到这组基上,基向量两两协方差为0,而维度的方差尽可能大

PCA步骤

x_{ij}表示第i个向量的第j个特征,将n个特征维度降维p维,一共m个样本数据

  1. 对所有样本数据进行中心化x_{ij}=x_{ij}-\frac{1}{n}\sum_{j=1}^{n}x_{ij}
  2. 经过上一步,得到一个新的矩阵,记为X_{new}(m*n),计算协方差矩阵(n*n)cov=\frac{1}{m-1}X_{new}X_{new}^T
  3. 求协方差矩阵的特征值和特征向量,特征值从大到小排序。特征值\lambda,对应的特征向量\alpha(列向量)
  4. 归一化所有的\alpha _i,使得\alpha _i\alpha ^T=1
  5. 选取p个特征向量,组成矩阵A(n*p),则Y=X_{new }*A (矩阵y的维度是m*p)

贡献率P_i=\frac{\lambda _i}{\sum \lambda }

累计贡献率P'_i=\sum_{k=1}^{i}P_k

PCA的特点

优点

降维,压缩数据,同时最大程度保持原有数据的信息。

计算方法简单,主要运算是特征值分解,易于实现。

完全无参数限制,最后的结果只与数据相关。(同时暴露了1个缺点:无法进行参数调优,可能得不到预期效果)

缺点

PCA第一步需要对其进行中心化,如果数据的尺度不统一,预处理还需要标准化。

PCA原理主要是为了消除变量之间的相关性,并且假设这种相关性是线性的,对于非线性的依赖关系则不能得到很好的结果。(用KPCA)。

有时候样本数量过大,直接去拟合数据会让内存爆炸的,此时可用IncrementalPCA来解决。

在PCA降维过程中,当进行协方差矩阵上求解特征值时,如果面对维度高达 (10000x10000),可想而知耗费的计算量程平方级增长

对于非线形相关性的数据,可以考虑Kernel PCA,通过Kernel函数将非线性相关转为线性相关。

适合

  • 样本数据大,数据维度大(使用前最好进行标准化)
  • 常用于人脸识别
  • 适合数字数据,因为要进行向量化运算

PCA代码实现

1.导包

  1. import pandas as pd
  2. import numpy as np
  3. input_file = '/principal_component.xls'
  4. output_file = 'edit_principal_component.xls'
  5. data = pd.read_excel(input_file,header = None)

训练数据集观察降维结果

  1. from sklearn.decomposition import PCA
  2. pca = PCA()
  3. pca.fit(data) #训练模型
  4. pca.components_ #返回模型特征向量
  5. ratio = pca.explained_variance_ratio_ #返回各个成分各子方差百分比
  6. np.cumsum(ratio) #累加

代码块运行结果:

观察到在第三维,方差累计贡献率已经达到0.97。

再次重新选择维数保存降维结果

  1. pca = PCA(3) #选择维数
  2. pca.fit(data)
  3. low_d = pca.transform(data) # 降维
  4. pd.DataFrame(low_d).to_excel(output_file)
  5. data = pd.read_excel(output_file,header = None)
  6. data.head()

参考资料

主成分分析:PCA-主成分分析_原来是阿中的博客-CSDN博客_pca主成分分析

【机器学习】主成分分析(PCA)的原理及一般步骤 - 知乎

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/911400
推荐阅读
相关标签
  

闽ICP备14008679号