一、流程生成模拟数据

模型训练

特征向量重要性分析

画图

二、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实现相关推荐

  1. 【机器学习基础】数学推导+纯Python实现机器学习算法19:PCA降维

    Python机器学习算法实现 Author:louwill Machine Learning Lab 作为一种常见的多元统计分析方法,主成分分析法(Principal Component Analys ...

  2. python 降维 聚类_比PCA降维更高级——(R/Python)t-SNE聚类算法实践指南

    作者介绍:Saurabh.jaju2 Saurabh是一名数据科学家和软件工程师,熟练分析各种数据集和开发智能应用程序.他目前正在加州大学伯克利分校攻读信息和数据科学硕士学位,热衷于开发基于数据科学的 ...

  3. Python:SMOTE算法——样本不均衡时候生成新样本的算法

    Python:SMOTE算法 直接用python的库, imbalanced-learn imbalanced-learn is a python package offering a number ...

  4. 10 种机器学习算法的要点(附 Python 和 R 代码)(转载)

    10 种机器学习算法的要点(附 Python 和 R 代码)(转载) from:https://zhuanlan.zhihu.com/p/25273698 前言 谷歌董事长施密特曾说过:虽然谷歌的无人 ...

  5. 【机器学习基础】数学推导+纯Python实现机器学习算法30:系列总结与感悟

    Python机器学习算法实现 Author:louwill Machine Learning Lab 终于到了最后的总结.从第一篇线性回归的文章开始到现在,已经接近有两年的时间了.当然,也不是纯写这3 ...

  6. 【机器学习基础】数学推导+纯Python实现机器学习算法24:HMM隐马尔可夫模型

    Python机器学习算法实现 Author:louwill Machine Learning Lab HMM(Hidden Markov Model)也就是隐马尔可夫模型,是一种由隐藏的马尔可夫链随机 ...

  7. 【机器学习基础】数学推导+纯Python实现机器学习算法28:CRF条件随机场

    Python机器学习算法实现 Author:louwill Machine Learning Lab 本文我们来看一下条件随机场(Conditional Random Field,CRF)模型.作为概 ...

  8. 【机器学习基础】数学推导+纯Python实现机器学习算法27:EM算法

    Python机器学习算法实现 Author:louwill Machine Learning Lab 从本篇开始,整个机器学习系列还剩下最后三篇涉及导概率模型的文章,分别是EM算法.CRF条件随机场和 ...

  9. 【机器学习基础】数学推导+纯Python实现机器学习算法26:随机森林

    Python机器学习算法实现 Author:louwill Machine Learning Lab 自从第14篇文章结束,所有的单模型基本就讲完了.而后我们进入了集成学习的系列,整整花了5篇文章的篇 ...

最新文章

  1. 基础设施即服务系列:Windows Azure 虚拟网络概述
  2. 人脸识别经典算法一:特征脸方法(Eigenface)
  3. 各种友(e)善(xin)数论总集,从入门到绝望2
  4. 用VS Code打造最佳Markdown编辑器
  5. 给python小白的几个小练习(附答案详解哦)
  6. 全排列递归实现(二)
  7. bash取得相应行的数据
  8. java 发布应用_发布java应用程序的步骤
  9. 调用Mutation函数的方式
  10. java学习(三)内部类
  11. eclipse显示包名的方式
  12. 当出现opencv的.dll无法找到的问题的时候用一下处理方法
  13. [CF1137E]Train Car Selection[维护凸壳]
  14. 未来时速——第一章 用事实的力量管理企业
  15. Chrome和Chromium的区别
  16. 如何通过看原版电影学英语
  17. Word生成目录后,前面还有摘要,怎么样让页码从正文第一页开始
  18. matlab如何跳转程序,matlab如何跳转-matlab界面跳转-matlab跳转函数
  19. VSCode选择远程服务器的虚拟环境
  20. Appsec在RSA 2013上

热门文章

  1. android8.0索尼z5,索尼公布安卓8.0设备升级名单 Z5遭抛弃?
  2. 当初为啥选了前端,却没选后端、算法岗?
  3. windows 服务器上 Nginx 重启无效问题排查!
  4. H5新特性--日历插件的使用案例
  5. 销售人员如何赞美才能把握好这个度?
  6. maven 坐标地址查询
  7. excel 空格 拆分 单元格
  8. oracle 19c rpm安装
  9. CampusBulider(模模搭)学习笔记5:创建自定义建筑
  10. 镇宁师范学院计算机,镇宁县民族职业技术中学