注:PCA算法流程,此处不做介绍。
Scikit中KMeans的参数说明:
class sklearn.decomposition.PCA (n_components=None, copy=True, whiten=False, svd_solver=’auto’, tol=0.0,iterated_power=’auto’, random_state=None)
具体参数可以参考:网站
https://www.w3cschool.cn/doc_scikit_learn/scikit_learn-modules-generated-sklearn-decomposition-pca.html?lang=en#sklearn.decomposition.PCA

  • 对于参数n_components:是我们降维后需要的维度,即降维后需要保留的特征数量,一般输入[0, min(X.shape)]范围中的整数。如果留下的特征太多,就达不到降维的效果,如果留下的特征太少,那新特征向量可能无法容纳原始数据集中的大部分信息。

用PCA降维

  • 问题:将鸢尾花数据集从原来的4维数据降成可以被可视化的二维数据。

  • 编程:

    • 1.调用库和模块

      # 1. 调用库和模块
      import matplotlib.pyplot as plt
      from sklearn.datasets import load_iris
      from sklearn.decomposition import PCA
      
    • 2.提取数据集
      # 2. 提取数据集
      iris = load_iris() # 加载鸢尾花数据集
      y = iris.target # 获取标签  ,150个样本,每个样本一个标签
      X = iris.data # 获取样本特征,150个样本*4维特征
      #作为数组,X是几维?
      print(y.shape)
      print(X.shape)
      #作为数据表或特征矩阵,X是几维?
      import pandas as pd
      pd.DataFrame(X)
      
    • 3.建模
      #调用PCA
      pca = PCA(n_components=2) #实例化
      pca = pca.fit(X) #拟合模型
      X_dr = pca.transform(X) #获取新矩阵
      X_dr
      #也可以fit_transform一步到位
      #X_dr = PCA(2).fit_transform(X)
      
    • 4.可视化
      # 要将三种鸢尾花的数据分布显示在二维平面坐标系中,对应的两个坐标(两个特征向量)应该是三种鸢尾花降维后的x1和x2,怎样才能取出三种鸢尾花下不同的x1和x2呢?
      # X_dr[y == 0, 0] #这里是布尔索引,看出来了么?# 可视化方法一  # 要展示三中分类的分布,需要对三种鸢尾花分别绘图
      """
      plt.figure()
      plt.scatter(X_dr[y==0, 0], X_dr[y==0, 1], c="red", label=iris.target_names[0])
      plt.scatter(X_dr[y==1, 0], X_dr[y==1, 1], c="black", label=iris.target_names[1])
      plt.scatter(X_dr[y==2, 0], X_dr[y==2, 1], c="orange", label=iris.target_names[2])
      plt.legend()
      plt.title('PCA of IRIS dataset')
      plt.show()
      """
      # 可视化方法二
      colors = ['red', 'black', 'orange']
      # iris.target_names  # 查看鸢尾花的标签意义
      plt.figure()
      for i in [0, 1, 2]:plt.scatter(X_dr[y == i, 0],X_dr[y == i, 1],alpha=.7  # 颜色透明度,c=colors[i],label=iris.target_names[i])
      plt.legend() # 显示图例
      plt.title('PCA of IRIS dataset') # 设置标题
      plt.show()
      

探索降维后的数据

  • pca.explained_variance_

    上图可以看出,降维后的第一维数据携带的信息量大于第二维数据。
  • pca.explained_variance_ratio_

    上图可以看出,大部分信息都被有效地集中在了第一个特征上。
  • pca.explained_variance_ratio_.sum()

    上图可以看出,特征信息保留了97.9685%, 所以在降维过程中信息丢失的不是特别严重。

选择最好的n_components:累积可解释方差贡献率曲线

  • 当参数components中不填写任何值,则默认返回min(X.shape)个特征,一般来说,样本量都会大于特征数目,所以什么都不填就相当于转换了新特征空间,但没有减少特征的个数。一般来说,不会使用这种输入方式。但我们却可以使用这种输入方式来画出累计可解释方差贡献率曲线,以此选择最好的n_components的整数取值。
  • 累积可解释方差贡献率曲线是一条以降维后保留的特征个数为横坐标,降维后新特征矩阵捕捉到的可解释方差贡献率为纵坐标的曲线,能够帮助我们决定n_components最好的取值。
import numpy as np
pca_line = PCA().fit(X)
plt.plot([1,2,3,4],np.cumsum(pca_line.explained_variance_ratio_))
plt.xticks([1,2,3,4]) #这是为了限制坐标轴显示为整数
plt.xlabel("number of components after dimension reduction")
plt.ylabel("cumulative explained variance")
plt.show()


上图可以看出,将鸢尾花数据集降成一维数据后,信息保留度为92.5%左右,但是降成二维,就可以保留到97%以上的信息。在实际选取n_components值时,应该选择曲线突然变缓的那个点(或者说是信息保留度不再明显发生变化的点)。

Scikit-Learn (浅谈PCA降维算法)相关推荐

  1. 浅谈流处理算法 (1) – 蓄水池采样

    转载自  浅谈流处理算法 (1) – 蓄水池采样 前言 现如今,"大数据 "已经不是什么新概念,"一千个人眼中有一千个大数据".社交网络,智能穿戴设备,智能家居 ...

  2. python笔迹识别_python_基于Scikit learn库中KNN,SVM算法的笔迹识别

    之前我们用自己写KNN算法[网址]识别了MNIST手写识别数据 [数据下载地址] 这里介绍,如何运用Scikit learn库中的KNN,SVM算法进行笔迹识别. 数据说明: 数据共有785列,第一列 ...

  3. 浅谈Base64编码算法

    一.什么是编码解码 编码:利用特定的算法,对原始内容进行处理,生成运算后的内容,形成另一种数据的表现形式,可以根据算法,再还原回来,这种操作称之为编码. 解码:利用编码使用的算法的逆运算,对经过编码的 ...

  4. 浅谈国密算法 SM1、SM2、SM3、SM4

    浅谈国密算法 国密算法是我国自主研发创新的一套数据加密处理系列算法.从SM1-SM4分别实现了对称.非对称.摘要等算法功能.特别适合应用于嵌入式物联网等相关领域,完成身份认证和数据加解密等功能.当然, ...

  5. 数据库浅谈之共识算法

    数据库浅谈之共识算法 HELLO,各位博友好,我是阿呆

  6. 浅谈PCA到PCANet

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Anysky___/article/details/51044670 最近一直在看关于PCA有关的东西 ...

  7. PCA降维算法原理及代码实现(python和matlab)

    常见的数据降维算法有:奇异值分解(SVD).主成分分析(PCA).因子分析(FA).独立成分分析(ICA). PCA降维的基本思想:通过计算数据矩阵的协方差矩阵,然后得到协方差矩阵的特征值.特征向量. ...

  8. pca降维算法java_PCA 降维算法详解 以及代码示例

    1. 前言 PCA : principal component analysis ( 主成分分析) 最近发现我的一篇关于PCA算法总结以及个人理解的博客的访问量比较高, 刚好目前又重新学习了一下PCA ...

  9. 浅谈标签传播算法LPA

       研究生期间第一次对相关内容做了一个汇报,查找了大量文献,发现很多的介绍对于新手来说都看不懂,这里采用最简单的方法来浅谈一下,如有错误,欢迎指正.   标签传播算法是一种基于图的半监督学习方法,其 ...

  10. PCA降维算法(内含PCA可视化迷你案例+PCA人脸识别降维案例+PCA逆转降噪案例)

    文章目录 1.sklearn中的降维算法 (1)PCA (2)SVD (3)思考 2.重要参数n_components 3.PCA中的SVD 4.重要接口inverse_transform 5.重要接 ...

最新文章

  1. windows环境下搭建rabbitMQ开发环境
  2. 需要注意变量作用域的使用
  3. CTFshow 信息收集 web2
  4. 使用CocoaPods导入百度地图SDK所遇到的坑
  5. 安装完成后的配置_cent os7 默认安装后的一般配置
  6. 1个通用工具平台+多个热点场景工具套件,助力开发者快速构建应用
  7. 自动定位失败_自动化测试01
  8. 计算机网络—PPP协议和HDLC协议
  9. 【3D文件格式解析】.obj + .mtl
  10. opencv调用海康威视摄像头
  11. ACdream 1121 喵喵的IDE
  12. 台式计算机开关电源原理图,开关电源电路原理(附原理图)
  13. Android仿qq登陆界面
  14. 安卓图片三级缓存策略与实现
  15. 云数据库与云服务器有什么区别?
  16. 华为企业交换机ACL经典案例
  17. 社区社群运营,如何打造火爆营销的方法?
  18. TwinCAT3 设置断电保持变量
  19. HTML文字动画,缓慢浮入
  20. 硬核!终于有人把CRC讲清楚了!

热门文章

  1. mysql中 show index from tb_name命令各列的含义
  2. pdf.js跨域加载文件
  3. markdown 书写代码
  4. 慢查询日志分析工具mysqldumpslow
  5. QT编译静态库与动态库
  6. mysql十三期_《叶问》第13期
  7. python 100 days github_GitHub - Andyhe2019/Python-100-Days: Python - 100天从新手到大师
  8. markdown 文档转 word
  9. JavaScript内置的Math对象(附实例)
  10. LintCode—删除链表中倒数第n个节点(174)