1、PCA算法介绍

主成分分析(Principal Components Analysis),简称PCA,是一种数据降维技术,用于数据预处理。一般我们获取的原始数据维度都很高,比如1000个特征,在这1000个特征中可能包含了很多无用的信息或者噪声,真正有用的特征才100个,那么我们可以运用PCA算法将1000个特征降到100个特征。这样不仅可以去除无用的噪声,还能减少很大的计算量。

主成分分析不是一种预测模型,它是数据降维的方法。此外,PCA并没有一个预测主体,因此PCA属于无监督学习!

PCA算法是如何实现的?

简单来说,就是将数据从原始的空间中转换到新的特征空间中,例如原始的空间是三维的(x,y,z),x、y、z分别是原始空间的三个基,我们可以通过某种方法,用新的坐标系(a,b,c)来表示原始的数据,那么a、b、c就是新的基,它们组成新的特征空间。在新的特征空间中,可能所有的数据在c上的投影都接近于0,即可以忽略,那么我们就可以直接用(a,b)来表示数据,这样数据就从三维的(x,y,z)降到了二维的(a,b)。

问题是如何求新的基(a,b,c)?

一般步骤是这样的:先对原始数据零均值化或规格化,然后求协方差矩阵,接着对协方差矩阵求特征向量和特征值,保留主要的成分[即保留值比较大的前n个特征],这些特征向量组成了新的特征空间。

关于相关性的理解,大致可以理解为:如果随着某一个特征的增加,另一个特征也在增加,那么他们相关性高,换句话说,特征变化相似的,选一列进行分析即可,于是可以进行降维。

2、函数原型及参数说明

函数原型

sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False)

参数说明:

1)n_components:  
类型:int 或者 string,缺省时默认为None,所有成分被保留。
          赋值为int,比如n_components=1,将把原始数据降到一个维度。
          赋值为string,比如n_components='mle',将自动选取特征个数n,使得满足所要求的方差百分比。

意义:PCA算法中所要保留的主成分个数n,也即保留下来的特征个数n。这个参数可以帮我们指定希望PCA降维后的特征维度数目。最常用的做法是直接指定降维到的维度数目,此时n_components是一个大于等于1的整数。当然,也可以指定主成分的方差和所占的最小比例阈值,让PCA类自己去根据样本特征方差来决定降维到的维度数,此时n_components是一个(0,1]之间的数。当然,还可以将参数设置为”mle”, 此时PCA类会用MLE算法根据特征的方差分布情况自己去选择一定数量的主成分特征来降维。我们也可以用默认值,即不输入n_components,此时n_components=min(样本数,特征数)。

2)copy:

类型:bool,True或者False,缺省时默认为True。
意义:表示是否在运行算法时,将原始训练数据复制一份。若为True,则运行PCA算法后,原始训练数据的值不会有任何改变,因为是在原始数据的副本上进行运算;若为False,则运行PCA算法后,原始训练数据的值会改,因为是在原始数据上进行降维计算。

3)whiten:

类型:bool,缺省时默认为False

意义:白化,使得每个特征具有相同的方差。所谓白化,就是对降维后的数据的每个特征进行归一化,让方差都为1.对于PCA降维本身来说,一般不需要白化。如果你PCA降维后有后续的数据处理动作,可以考虑白化。默认值是False,即不进行白化。

4)svd_solver:

即指定奇异值分解SVD的方法,由于特征分解是奇异值分解SVD的一个特例,一般的PCA库都是基于SVD实现的。有4个可以选择的值:{‘auto’, ‘full’, ‘arpack’, ‘randomized’}。randomized一般适用于数据量大,数据维度多同时主成分数目比例又较低的PCA降维,它使用了一些加快SVD的随机算法。 full则是传统意义上的SVD,使用了scipy库对应的实现。arpack和randomized的适用场景类似,区别是randomized使用的是scikit-learn自己的SVD实现,而arpack直接使用了scipy库的sparse SVD实现。默认是auto,即PCA类会自己去在前面讲到的三种算法里面去权衡,选择一个合适的SVD算法来降维。一般来说,使用默认值就够了。

除了这些输入参数外,有两个PCA类的参数值得关注。第一个是explained_variance_,它代表降维后的各主成分的方差值。方差值越大,则说明越是重要的主成分。第二个是explained_variance_ratio_,它代表降维后的各主成分的方差值占总方差值的比例,这个比例越大,则越是重要的主成分。

3、PCA对象的属性

explained_variance_:它代表降维后的各主成分的方差值。方差值越大,则说明越是重要的主成分。

explained_variance_ratio_:它代表降维后的各主成分的方差值占总方差值的比例,这个比例越大,则越是重要的主成分。

n_components_:返回所保留的成分个数n。当设置参数为‘mle’的时候,可以进行查看降维后具体的维度值大小。

还有几个不常用的对象:components_        ,mean_   ,noise_variance_  ,singular_values_  。

4、PCA对象的方法

fit(X,y=None)
fit()可以说是scikit-learn中通用的方法,每个需要训练的算法都会有fit()方法,它其实就是算法中的“训练”这一步骤。因为PCA是无监督学习算法,此处y自然等于None。

fit(X),表示用数据X来训练PCA模型。

函数返回值:调用fit方法的对象本身。比如pca.fit(X),表示用X对pca这个对象进行训练。

fit_transform(X)
用X来训练PCA模型,同时返回降维后的数据。
newX=pca.fit_transform(X),newX就是降维后的数据。

inverse_transform()
将降维后的数据转换成原始数据,X=pca.inverse_transform(newX)

transform(X)
将数据X转换成降维后的数据。当模型训练好后,对于新输入的数据,都可以用transform方法来降维。

还有不常用的get_covariance()、get_precision()、get_params(deep=True)、score(X, y=None)等方法。

5、PCA算法总结

作为一个非监督学习的降维方法,它只需要特征值分解,就可以对数据进行压缩,去噪。因此在实际场景应用很广泛。为了克服PCA的一些缺点,出现了很多PCA的变种,比如为解决非线性降维的KPCA,还有解决内存限制的增量PCA方法Incremental PCA,以及解决稀疏数据降维的PCA方法Sparse PCA等。

优点
1)仅仅需要以方差衡量信息量,不受数据集以外的因素影响。
2)各主成分之间正交,可消除原始数据成分间的相互影响的因素。
3)计算方法简单,主要运算是特征值分解,易于实现。

缺点
1)主成分各个特征维度的含义具有一定的模糊性,不如原始样本特征的解释性强。
2)方差小的非主成分也可能含有对样本差异的重要信息,因降维丢弃可能对后续数据处理有影响。

参考资料:

https://blog.csdn.net/Orange_Spotty_Cat/article/details/80394302

https://blog.csdn.net/u012162613/article/details/42177327

https://blog.csdn.net/u012162613/article/details/42192293

https://blog.csdn.net/it_a_question/article/details/78751160

【Python学习】 - sklearn - PCA降维相关相关推荐

  1. 【Python机器学习】PCA降维算法讲解及二维、高维数据可视化降维实战(附源码 超详细)

    需要全部代码请点赞关注收藏后评论区留言私信~~~ 维数灾难 维数灾难是指在涉及到向量计算的问题中,当维数增加时,空间的体积增长得很快,使得可用的数据在空间中的分布变得稀疏,向量的计算量呈指数倍增长的一 ...

  2. Python学习 Day 025 -模块相关

    主要内容: 1. 模块 2. import 3. from xxx import xxx 1.模块    (1)模块的概述 模块就是一个包含了python定义和声明的文件, 文件名就是模块的名字加上. ...

  3. python学习——oop-python面向对象,类相关基础

    0.目录 文章目录 0.目录 1. 面向对象概述(ObjectOriented, OO) 2. 类的基本实现 3. 关于self 4.类相关函数 5.类的成员描述符(属性) 6.类的内置属性 7.类的 ...

  4. Python学习3 字符串和相关常用函数

    字符串声明 双引号,单引号,三单引号,三双引号 里面有双引号,外面使用单引号 里面有单引号,外面使用双引号 或者使用转义字符 #字符串 m='hello' n="hello" #里 ...

  5. Python学习笔记-msg3d实验相关

    目录 1,类方法 2,argparse模块 3.inspect模块 4,np.title() 5,python copy() 6,numpy--np.linalg用法 np.linalg.norm n ...

  6. 【Python】使用sklearn PCA对人脸数据降维

    [python]sklearn PCA对人脸数据降维与识别 1. PCA 1.1 PCA原理 1.2 sklearn PCA使用方法 2. 人脸数据降维 2.1 读取图片 2.2 使用PCA进行降维 ...

  7. 第10章 PCA降维技术

    序言 1. 内容介绍 本章详细介绍了PCA 主成分分析算法基本原理.python 实现PCA 算法方法以及sklearn实现方法等内容. 2. 理论目标 了解PCA 主成分分析算法基本原理 了解pyt ...

  8. PCA降维原理(主成分分析)小结

    PCA降维 PCA是什么 目的和原则 PCA与数学理论 均值和零均值化 均值 零均值化 特征向量和特征值 定义 性质 方差 协方差 协方差矩阵 协方差矩阵对角化 PCA过程总结 PCA是什么 PCA( ...

  9. python pca降维_机器学习之sklearn中的降维算法

    1. PCA与SVD sklearn中降维算法都被包括在模块decomposition中,这个模块本质是一个矩阵分解模块.在过去的十年中,如果要讨论算法进步的先锋,矩阵分解可以说是独树一帜.矩阵分解可 ...

最新文章

  1. zabbix专题:第十一章 zabbix之SNMP方式监控
  2. 中介者模式 调停者 Mediator 行为型 设计模式(二十一)
  3. cpu使用率 htop显示_用top、vmstat、Htop、sar命令在Linux系统中检查CPU使用率/利用率...
  4. 计算机控制技术汤楠课后答案,西安电子科大版汤楠计算机控制技术6章
  5. php生成zip文件,使用PHP处理zip压缩文件之ZipArchive
  6. 不同服务器数据库表连接查询修改,如何连接多个数据库,mysql中的服务器和查询两个表中的对方?...
  7. 【音乐】想不起来歌名的瞎唱
  8. java基础—FileWriter 的使用
  9. Windows平台下MySQL常用操作与命令
  10. OVM Manager
  11. 中国***传说:游走在黑暗中的精灵
  12. python买卖股票_Python实现买卖股票的最佳时机的一种方法
  13. IFB上挂载NETEM
  14. canvas教程2-canvas的编程思想
  15. 键盘各个键所对应的键值
  16. ul、li 标签实现完美表格
  17. 经典编程书籍大全-python
  18. java实例化类之后如何赋值_深入理解Java对象的创建过程:类的初始化与实例化...
  19. 狼性团队也需柔性管理
  20. Long类型数据比较

热门文章

  1. XP Embedded:不同的用户使用不同的外壳程序
  2. [剑指offer][JAVA]面试题第[24]题[反转链表][递归][双指针][头插法]
  3. [剑指offer][JAVA]面试题第[46]题[把数字翻译成字符串][递归][逆推]
  4. 康宁玻璃ct值计算公式_【钦州】CT室铅板生产厂家
  5. 思维导图下载 注册安全_【思维导图】初中各科思维导图,涵盖3年各科所有知识点,可下载打印!...
  6. 无规则弹窗自动点击插件_vscode 插件会了吧,英语不好的赶紧下载 自动分析源码中的陌生单词、点击朗读单词...
  7. html的排版标题的是,HTML 5结构排版布局
  8. cordova 某个页面强制横屏_小白科普:从输入网址到最后浏览器呈现页面内容,中间发生了什么?...
  9. android webview权限申请_android - 在运行时向摄像机请求WebView权限 - 堆栈内存溢出...
  10. mysql savepoint语法_SAVEPOINT语法错误一例