【Python学习笔记】使用Python进行主成分分析
2024-09-26 20:43:35
使用sklearn库中的PCA类进行主成分分析。
导入要用到的库,还没有的直接pip安装就好了。
from sklearn.decomposition import PCA
import numpy as np # 如果使用numpy的array作为参数的数据结构就需要,其他type没试过是否可以
import pandas as pd # 非必要
PCA类的主要输入参数有以下几个:
- n_components:这个参数可以帮我们指定希望PCA降维后的特征维度数目。
- 最常用的做法是直接指定降维到的维度数目,此时n_components是一个大于等于1的整数。
- 也可以指定主成分的方差和所占的最小比例阈值,让PCA类自己去根据样本特征方差来决定降维到的维度数,此时n_components是一个(0,1]之间的数。
- 还可以将参数设置为"mle", 此时PCA类会用MLE算法根据特征的方差分布情况自己去选择一定数量的主成分特征来降维。
- 也可以用默认值,即不输入n_components,此时n_components=min(样本数,特征数)。
- whiten :判断是否进行白化。所谓白化,就是对降维后的数据的每个特征进行归一化,让方差都为1。对于PCA降维本身来说,一般不需要白化。如果你PCA降维后有后续的数据处理动作,可以考虑白化。默认值是False,即不进行白化。
- 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_,它代表降维后的各主成分的方差值占总方差值的比例,这个比例越大,则越是重要的主成分。
由于我的数据是放在dataframe的数据结构里的,所以我先把它提取出来转换成numpy的array。
X_pca=all.loc[:,emotion]
X_pca=np.array(X_pca)
a=PCA(n_components=3) # 设置降维后的特征数目
a.fit(X_pca) # 传入我们的数据
X_new=a.transform(X_pca) # 得到降维后的新数据,仍然是numpy的array形式
print(a.explained_variance_ratio_) # 查看降维后的各主成分的方差值占总方差值的比例
print(a.explained_variance_) #查看降维后的各主成分的方差值
最新文章
- Atitit. 破解  拦截 绕过 网站 手机 短信 验证码  方式 v2 attilax 总结
- 对象-3.py
- html选中文字 背景/字 变色
- StringBuilder和StringBuffer区别
- GDI+系列
- cakePHP的controller回调
- POJ3241 Object Clustering 曼哈顿最小生成树
- uboot下 Nand flash 启动 内核与根文件系统
- WPF ListView的使用及Linq to XML练习
- jbpmAPI-1
- 显示ubuntu 10.4右上角网络图标
- jsp标签简介
- hdu4149 Magic Potion
- Java 多线程 高可用原则
- 20175320 2018-2019-2 《Java程序设计》第3周学习总结
- switch反汇编(C语言)
- Mysql 【影响性能的几个方面】以及【性能优化顺序】
- python利用socket写一个文件上传
- CentOS7.1 Liberty云平台之环境准备(2)
- 【教程】ubuntu下配置nvc详细教程
热门文章
- MongoDB、ElasticSearch、Redis、HBase这四种热门数据库的优缺点及应用场景
- HashMap源码剖析及实现原理分析(学习笔记)
- 使用Gulp实现网页自动刷新:gulp-connect
- Bootstrap排版类
- 前端开发学习之——使用jquery/javascript判断及改变checkbox选中状态
- BZOJ3144:[HNOI2013]切糕——题解
- BZOJ4943 &; 洛谷3823 &; UOJ315:[NOI2017]蚯蚓排队——题解
- cf 442 div2 F. Ann and Books(莫队算法)
- hdu5652:India and China Origins(并查集)
- https客户端遇到过的问题