pca算法python实现_PCA算法——Python实现
一、流程生成模拟数据
模型训练
特征向量重要性分析
画图
二、Python语言
1、生成模拟数据
# 导入相关数据库
from sklearn import datasets
# 提取数据
digits = datasets.load_digits() #可以下载其他数据,例如鸢尾花:datasets.load_iris()
x = digits.data # 原始特征数据 numpy.shape(x) = (1797, 64) y = digits.target # 原始标签数据 numpy.shape(y) = (1797, )
2、模型训练
from sklearn import decomposition
pca = decomposition.PCA() # n_components默认为1,'mls'表示自动确定保留数
pca.fit(x)
3、特征向量重要性分析
#特征值 返回所保留的n个成分各自方差的百分比
print(pca.explained_variance_)
print(pca.explained_variance_ratio)
4、画图
# 画原始图
n_row, n_col = 2, 5
def plot_digits(images, y, max_n=10):
"""
显示手写数字的图像
"""
# 设置图像尺寸
fig = plt.figure(figsize=(2. * n_col, 2.26 * n_row))
i=0
while i < max_n and i < images.shape[0]:
p = fig.add_subplot(n_row, n_col, i + 1, xticks=[], yticks=[])
p.imshow(images[i], cmap=plt.cm.bone, interpolation='nearest')
# 添加标签
p.text(0, -1, str(y[i]))
i = i + 1
plot_digits(digits.images, digits.target, max_n=10)
# 画PCA主成分图
def plot_pca_scatter():
"""
主成分显示
"""
colors = ['black', 'blue', 'purple', 'yellow', 'white', 'red', 'lime', 'cyan', 'orange', 'gray']
for i in range(len(colors)):
# 只显示前两个主成分在二维坐标系中
px = X_pca[:, 0][y_digits == i]
py = X_pca[:, 1][y_digits == i]
plt.scatter(px, py, c=colors[i])
plt.legend(digits.target_names)
plt.xlabel('First Principal Component')
plt.ylabel('Second Principal Component')
n_components = 10 # 取前10个主成分
pca = PCA(n_components=n_components)
X_pca = pca.fit_transform(X_digits)
plot_pca_scatter()
5、重要函数说明 —— PCA
class sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False, svd_solver=‘auto’, tol=0.0, iterated_power=‘auto’, random_state=None)
参数说明:**n_components: 降维后的特征维度数目。 默认值:min(样本数,特征数) 设为‘mle' 且 svd_solver='full', 使用Minkas MLE方法估计降维后维度
设为‘auto'且svd_solver='full',等价于PPCA确定维度数 设为大于0小于1且svd_solver='full',则根据主成分方差所占最小比例决定维度数
copy:默认True,如果为False,原输入数据被新结果覆盖
svd_solver:SVD求解方法。可选参数 ’auto'|'full'|'arpack'|'randomized'
tol:svd_solver = ‘arpack’,用来设置奇异值的容忍度。(我觉得应该类似于收敛门限这一类的参数)
random_state:svd_solver = ‘arpack’或者svd_solver = ‘randomized’时,这个参数起作用。用于产生随机数。
属性说明:components_:特征向量矩阵,每一行是一个特征向量
explained_variance_:components每一个特征向量对应的方差,就是特征值
explained_variance_ratio_:components_中每一个特征向量对应的特征值占总的特征值之和的比值。
singular_values_:奇异值
mean_:通过训练数据估计的每个特征上的均值。
noise_variance_:在PPCA模型下估计的噪声的协方差。
三、pca作用解析
PCA本质上是将方差最大的方向作为主要特征,并且在各个正交方向上将数据“离相关”,也就是让它们在不同正交方向上没有相关性。
因此,PCA也存在一些限制,例如它可以很好的解除线性相关,但是对于高阶相关性就没有办法了,对于存在高阶相关性的数据,可以考虑Kernel PCA,通过Kernel函数将非线性相关转为线性相关,关于这点就不展开讨论了。另外,PCA假设数据各主特征是分布在正交方向上,如果在非正交方向上存在几个方差较大的方向,PCA的效果就大打折扣了。
最后需要说明的是,PCA是一种无参数技术,也就是说面对同样的数据,如果不考虑清洗,谁来做结果都一样,没有主观参数的介入,所以PCA便于通用实现,但是本身无法个性化的优化。
pca算法python实现_PCA算法——Python实现相关推荐
- 【机器学习基础】数学推导+纯Python实现机器学习算法19:PCA降维
Python机器学习算法实现 Author:louwill Machine Learning Lab 作为一种常见的多元统计分析方法,主成分分析法(Principal Component Analys ...
- python 降维 聚类_比PCA降维更高级——(R/Python)t-SNE聚类算法实践指南
作者介绍:Saurabh.jaju2 Saurabh是一名数据科学家和软件工程师,熟练分析各种数据集和开发智能应用程序.他目前正在加州大学伯克利分校攻读信息和数据科学硕士学位,热衷于开发基于数据科学的 ...
- Python:SMOTE算法——样本不均衡时候生成新样本的算法
Python:SMOTE算法 直接用python的库, imbalanced-learn imbalanced-learn is a python package offering a number ...
- 10 种机器学习算法的要点(附 Python 和 R 代码)(转载)
10 种机器学习算法的要点(附 Python 和 R 代码)(转载) from:https://zhuanlan.zhihu.com/p/25273698 前言 谷歌董事长施密特曾说过:虽然谷歌的无人 ...
- 【机器学习基础】数学推导+纯Python实现机器学习算法30:系列总结与感悟
Python机器学习算法实现 Author:louwill Machine Learning Lab 终于到了最后的总结.从第一篇线性回归的文章开始到现在,已经接近有两年的时间了.当然,也不是纯写这3 ...
- 【机器学习基础】数学推导+纯Python实现机器学习算法24:HMM隐马尔可夫模型
Python机器学习算法实现 Author:louwill Machine Learning Lab HMM(Hidden Markov Model)也就是隐马尔可夫模型,是一种由隐藏的马尔可夫链随机 ...
- 【机器学习基础】数学推导+纯Python实现机器学习算法28:CRF条件随机场
Python机器学习算法实现 Author:louwill Machine Learning Lab 本文我们来看一下条件随机场(Conditional Random Field,CRF)模型.作为概 ...
- 【机器学习基础】数学推导+纯Python实现机器学习算法27:EM算法
Python机器学习算法实现 Author:louwill Machine Learning Lab 从本篇开始,整个机器学习系列还剩下最后三篇涉及导概率模型的文章,分别是EM算法.CRF条件随机场和 ...
- 【机器学习基础】数学推导+纯Python实现机器学习算法26:随机森林
Python机器学习算法实现 Author:louwill Machine Learning Lab 自从第14篇文章结束,所有的单模型基本就讲完了.而后我们进入了集成学习的系列,整整花了5篇文章的篇 ...
最新文章
- 基础设施即服务系列:Windows Azure 虚拟网络概述
- 人脸识别经典算法一:特征脸方法(Eigenface)
- 各种友(e)善(xin)数论总集,从入门到绝望2
- 用VS Code打造最佳Markdown编辑器
- 给python小白的几个小练习(附答案详解哦)
- 全排列递归实现(二)
- bash取得相应行的数据
- java 发布应用_发布java应用程序的步骤
- 调用Mutation函数的方式
- java学习(三)内部类
- eclipse显示包名的方式
- 当出现opencv的.dll无法找到的问题的时候用一下处理方法
- [CF1137E]Train Car Selection[维护凸壳]
- 未来时速——第一章 用事实的力量管理企业
- Chrome和Chromium的区别
- 如何通过看原版电影学英语
- Word生成目录后,前面还有摘要,怎么样让页码从正文第一页开始
- matlab如何跳转程序,matlab如何跳转-matlab界面跳转-matlab跳转函数
- VSCode选择远程服务器的虚拟环境
- Appsec在RSA 2013上