sklearn主成分分析PCA

菜菜的sklearn学习笔记

文章目录

  • sklearn主成分分析PCA
    • 数学原理
    • 代码
      • 导入包
      • 导入数据
      • 核心代码
      • 查看降维后所带有的信息量大小
      • 可视化
      • 扩展
        • 累计方差贡献率曲线
        • 最大似然估计选择超参数
        • 按贡献率选择

数学原理

给数学基础不是很好的看
PCA主要用于降维,比如一个人有身高,年龄,样貌,性别,智力,耐力,速度,成绩等等很多特征每种特征便是一个维度。假如你觉得描述一个人的特征太多,你想要用一两个或几个特征就个以描述一个人,并且这几个特征包含之前提到所有特征所包含的信息,将这么原来的众多特征转化为几个特征的过程就是降维。而降维后得到的特征包含的信息量的多少也叫做贡献率,信息量越多越能够反应本质。

代码

这里举一个最常用的水仙花的例子

导入包

包括sklearn他的好基友们啦。

import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
import pandas as pd
import numpy as np

导入数据

这是一个水仙花的案例

iris = load_iris()
y = iris.target
x = iris.data

x.shape = (150, 4),即每朵花共有四个特征,分别为

iris.feature_names = ['sepal length (cm)','sepal width (cm)','petal length (cm)','petal width (cm)']

y是一个分类变量,分别为[0,1,2]代表三种不同的花

核心代码

还是sklearn中的老三样:

  • 实例化PCA()
  • 调用fit()函数
  • 调用transform()函数
pca = PCA(n_components = 2)
pca = pca.fit(x)
x_dr = pca.transform(x)

这里n_components表示降维后所得到的维度
或者也可以直接一步到位

x_dr = PCA(2).fit_transform(x)

查看降维后所带有的信息量大小

  • 两个维度信息量大小
print(pca.explained_variance_)

可以得到[4.22824171, 0.24267075]

  • 两个维度贡献率
pca.explained_variance_ratio_

可以得到[0.92461872, 0.05306648]

可视化

当我们把数据降维后,可以观察其在新的维度上的分布

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.show()

其中x_dr[y = 0,0]用了布尔索引

得到如下结果

可以这是一个分簇的分布,也就是说降维之后其实已经比较好分类了

扩展

累计方差贡献率曲线

当选取维度不同时累计贡献率的曲线。

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.show()

最大似然估计选择超参数

这种方法可以自动选出最合适的维度

pca_mle = PCA(n_components = "mle")
pca_mle = pca_mle.fit(x)
x_mle = pca_mle.transform(x)
pca_mle.explained_variance_ratio_.sum()

比如上述例子为我们选了维度为3,累计贡献率高达0.994

按贡献率选择

意味着你想要他的累计贡献率达到0.97时的维度。

pca_f = PCA(n_components=0.97,svd_solver="full")
pca_f = pca_f.fit(x)
x_f = pca_f.transform(x)
print(pca_f.explained_variance_ratio_)

贡献率分别为[0.92461872, 0.05306648]

sklearn主成分分析PCA相关推荐

  1. sklearn——主成分分析PCA操作实例

    PCA主成分分析降维实际上是寻求能使样本方差最大的一个低维空间,来最大程度区分样本.例如下面这个二维图表,就可以找一条直线(一维)使得样本点映射在上面方差最大(区分度最大)! PCA可以用来解决的问题 ...

  2. 【机器学习sklearn】主成分分析PCA(Principal Component Analysis)

    主成分分析方法PCA 前言 一.PCA是什么? 二.代码实践 使用MNIST数据集实现sklearn库里的主成分分析方法 不同主成分个数对应的可解释方差分析(Explained Variance) 总 ...

  3. 【ML】主成分分析 PCA(Principal Component Analysis)原理 + 实践 (基于sklearn)

    [ML]主成分分析 PCA(Principal Component Analysis)原理 + 实践 (基于sklearn) 原理简介 实践 数据集 数据处理 使用KNN模型进行分类预测(为了和PCA ...

  4. 机器学习-Sklearn(第三版)Day4 主成分分析PCA与奇异值分解SVD

    目录 一.简介 什么是维度 sklearn中的降维算法 二.PCA与SVD 0.如何实现降维算法 思考:PCA和特征选择技术都是特征工程的一部分,它们有什么不同? 1.重要参数n_components ...

  5. 主成分分析:sklearn.decomposition.PCA

    调用格式: PCA(n_components=None, *, copy=True, whiten=False, svd_solver='auto', tol=0.0, iterated_power= ...

  6. Python数据集可视化:抽取数据集的两个特征进行二维可视化、主成分分析PCA对数据集降维进行三维可视化(更好地理解维度之间的相互作用)

    Python数据集可视化:抽取数据集的两个特征进行二维可视化.主成分分析PCA对数据集降维进行三维可视化(更好地理解维度之间的相互作用) 目录 Python数据集可视化:抽取数据集的两个特征进行二维可 ...

  7. 机器学习-降维之主成分分析PCA算法原理及实战

    主成分分析 前言 近年来,随着互联网和信息行业的发展,数据已经渗透到各行各业,成为重要的生产因素如数据记录和属性规模的急剧增长.社会已经进入大数据时代,数据越多越好似乎已经成为公理.然而,数据量并不是 ...

  8. 用scikit-learn学习主成分分析(PCA)

    在主成分分析(PCA)原理总结中,我们对主成分分析(以下简称PCA)的原理做了总结,下面我们就总结下如何使用scikit-learn工具来进行PCA降维. 一.scikit-learn PCA类介绍 ...

  9. 数学建模:评价模型——主成分分析 PCA SPSS实现、python实现

    文章目录 PCA介绍 SPSS实现 python实现 简单的主成分分析 主成分分析用于综合评价 Notice PCA介绍 主成分分析(Principal Component Analysis,PCA) ...

最新文章

  1. 简书 java jvm_JVM介绍
  2. linux用户、组、权限问题
  3. C++学习手记五:C++流操作
  4. 如何在Java中将图像上传到DropBox
  5. 有问有答 | AWS使用精华问答,带您开启 AWS 上的云计算之旅!
  6. Spring Cloud云架构 - commonservice-sso服务搭建(一)
  7. jQuery Hello世界
  8. Callable接口与runable和Thread类
  9. 【Python 10】汇率兑换3.0(while循环)
  10. 微信授权获取基本信息java_Java微信网页授权授权获取用户基本信息
  11. 移动 app 测试工具 bugtags
  12. 【环境配置】麦克风不够,手机来凑。---用手机当电脑麦克风解决方案
  13. Autodesk cad卸载不干净导致的无法安装问题解决
  14. Android真正的静默安装
  15. this product is covered by one or more of the following
  16. 项目设计:基于STM32的指纹/刷卡的门禁/考勤/智能小区管理系统
  17. 谷歌浏览器控制台preview乱码问题及原因
  18. 【03项目立项管理】【背诵版】
  19. umi插件------plugin-initial-state
  20. 打印机无线连接台式机、笔记本找不到目标打印机解决方案

热门文章

  1. 夜光带你走进 Java 成神之路--Spring(四十六)擅长的领域
  2. 使用OpenCV中的分类器和颜色识别的苹果位置识别
  3. 【JZOJ B组】【NOIP2013模拟9.29】密码
  4. EZ 2017 01 07 t
  5. 东方不败自述:我的自宫情结
  6. IB各科目组哪些课程评估/考试人数最多?
  7. Python 读文件
  8. AI Challenger开赛,千万量级数据开放,AI高手将上演巅峰对决
  9. 如何打开戴尔xps15屏幕触摸屏
  10. fillna填充某一列_python dataframe向下向上填充,fillna和ffill的方法