Python sklearn库实现PCA教程(以鸢尾花分类为例)


Posted in Python onFebruary 24, 2020

PCA简介

主成分分析(Principal Component Analysis,PCA)是最常用的一种降维方法,通常用于高维数据集的探索与可视化,还可以用作数据压缩和预处理等。矩阵的主成分就是其协方差矩阵对应的特征向量,按照对应的特征值大小进行排序,最大的特征值就是第一主成分,其次是第二主成分,以此类推。

基本步骤:

Python sklearn库实现PCA教程(以鸢尾花分类为例)

具体实现

我们通过Python的sklearn库来实现鸢尾花数据进行降维,数据本身是4维的降维后变成2维,可以在平面中画出样本点的分布。样本数据结构如下图:

Python sklearn库实现PCA教程(以鸢尾花分类为例)

其中样本总数为150,鸢尾花的类别有三种,分别标记为0,1,2

代码

import matplotlib.pyplot as plt     #加载matplotlib用于数据的可视化
from sklearn.decomposition import PCA   #加载PCA算法包
from sklearn.datasets import load_iris


data=load_iris()
y=data.target
x=data.data
pca=PCA(n_components=2)  #加载PCA算法,设置降维后主成分数目为2
reduced_x=pca.fit_transform(x)#对样本进行降维

red_x,red_y=[],[]
blue_x,blue_y=[],[]
green_x,green_y=[],[]


for i in range(len(reduced_x)):
 if y[i] ==0:
  red_x.append(reduced_x[i][0])
  red_y.append(reduced_x[i][1])

 elif y[i]==1:
  blue_x.append(reduced_x[i][0])
  blue_y.append(reduced_x[i][1])

 else:
  green_x.append(reduced_x[i][0])
  green_y.append(reduced_x[i][1])

#可视化
plt.scatter(red_x,red_y,c='r',marker='x')
plt.scatter(blue_x,blue_y,c='b',marker='D')
plt.scatter(green_x,green_y,c='g',marker='.')
plt.show()

结果图

Python sklearn库实现PCA教程(以鸢尾花分类为例)

知识拓展:python sklearn PCA 实例代码-主成分分析

python sklearn decomposition PCA 主成分分析

主成分分析(PCA)

1、主成分分析(Principal Component Analysis,PCA)是最常用的一种降维方法,

通常用于高维数据集的探索与可视化,还可以用作数据压缩和预处理

2、PCA可以把具有相关性的高维变量合成为线性无关的低维变量,称为主成分。

主成分能够尽可能保留原始数据的信息

3、概念

方差:用来度量一组数据的分散程度

协方差:用来度量两个变量之间的线性相关性程度,若两个变量的协议差为0,二者线性无关

协方差矩阵:矩阵的特征向量是描述数据集结构的非零向量,?? ⃗=?? ⃗

特征向量和特征值:? ⃗ 特征向量,?是特征值

4、提取:

矩阵的主成分是其协方差矩阵对应的特征向量,按照对应的特征值大小进行排序,最大的特征值就是第一主成分,其次是第二主成分

5、原理:

1、对所有样本进行中心化:xi-(x1+x2…xm)/m
2、计算样本的协方差矩阵X(X.T)
3、对协方差矩阵X(X.T)做特征值分解
4、取最大的d个特征值所对应的特征向量w1,w2…wd

输出投影矩阵W=(w1,w2,…,wd)

6、参数说明

sklearn.decomposition.PCA(n_components=None,copy=True,whithen=False,svd_solver=‘auto',tol=0.0,

iterated_power=‘auto',random_state=None)

n_components:指定主成分的个数,即降维后数据的维度

svd_slover:设置特征值分解的方法:‘full',‘arpack',‘randomized'

PCA实现高维度数据可视化 实例

目标:

已知鸢尾花数据是4维的,共三类样本,使用PCA实现对鸢尾花数据进行降维,实现在二维平面上的可视化

实例程序编写

import matplotlib.pyplot as plt
import sklearn.decomposition as dp
from sklearn.datasets.base import load_iris

x,y=load_iris(return_X_y=True) #加载数据,x表示数据集中的属性数据,y表示数据标签
pca=dp.PCA(n_components=2) #加载pca算法,设置降维后主成分数目为2
reduced_x=pca.fit_transform(x) #对原始数据进行降维,保存在reduced_x中
red_x,red_y=[],[]
blue_x,blue_y=[],[]
green_x,green_y=[],[]
for i in range(len(reduced_x)): #按鸢尾花的类别将降维后的数据点保存在不同的表表中
 if y[i]==0:
  red_x.append(reduced_x[i][0])
  red_y.append(reduced_x[i][1])
 elif y[i]==1:
  blue_x.append(reduced_x[i][0])
  blue_y.append(reduced_x[i][1])
 else:
  green_x.append(reduced_x[i][0])
  green_y.append(reduced_x[i][1])
plt.scatter(red_x,red_y,c='r',marker='x')
plt.scatter(blue_x,blue_y,c='b',marker='D')
plt.scatter(green_x,green_y,c='g',marker='.')
plt.show()

以上这篇Python sklearn库实现PCA教程(以鸢尾花分类为例)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
Jul 20 Python
关于Python中空格字符串处理的技巧总结
Aug 10 Python
在Python文件中指定Python解释器的方法
Feb 18 Python
django表单的Widgets使用详解
Jul 22 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
Aug 08 Python
关于python pycharm中输出的内容不全的解决办法
Jan 10 Python
对python中arange()和linspace()的区别说明
May 03 Python
浅谈pymysql查询语句中带有in时传递参数的问题
Jun 05 Python
如何让PyQt5中QWebEngineView与JavaScript交互
Oct 21 Python
python 发送邮件的示例代码(Python2/3都可以直接使用)
Dec 03 Python
Django路由层如何获取正确的url
Jul 15 Python
Python使用PyYAML库读写yaml文件的方法
Apr 06 Python
python 线性回归分析模型检验标准--拟合优度详解
Feb 24 #Python
最小二乘法及其python实现详解
Feb 24 #Python
在Python 的线程中运行协程的方法
Feb 24 #Python
Python 爬取必应壁纸的实例讲解
Feb 24 #Python
Python unittest工作原理和使用过程解析
Feb 24 #Python
Python 剪绳子的多种思路实现(动态规划和贪心)
Feb 24 #Python
用python介绍4种常用的单链表翻转的方法小结
Feb 24 #Python
You might like
浅谈php的优缺点
2015/07/14 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
JavaScript 高效运行代码分析
2010/03/18 Javascript
js getElementsByTagName的简写方式
2010/06/27 Javascript
解决Jquery load()加载GB2312页面时出现乱码的两种方案
2013/09/10 Javascript
jquery显示隐藏input对象
2014/07/21 Javascript
js右下角弹出提示框示例代码
2016/01/12 Javascript
jQuery中设置form表单中action值的实现方法
2016/05/25 Javascript
微信小程序 MINA文件结构
2016/10/17 Javascript
JavaScript实现点击按钮复制指定区域文本(推荐)
2016/11/25 Javascript
微信小程序 Nginx环境配置详细介绍
2017/02/14 Javascript
AngularJS之ionic 框架下实现 Localstorage本地存储
2017/04/22 Javascript
Vue.js学习教程之列表渲染详解
2017/05/17 Javascript
javaScript字符串工具类StringUtils详解
2017/12/08 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
2018/08/20 Javascript
浅谈JS中this在各个场景下的指向
2019/08/14 Javascript
JavaScript canvas仿代码流瀑布
2020/02/10 Javascript
微信小程序开发之获取用户手机号码(php接口解密)
2020/05/17 Javascript
python中urllib.unquote乱码的原因与解决方法
2017/04/24 Python
Django学习笔记之ORM基础教程
2018/03/27 Python
解决PyCharm同目录下导入模块会报错的问题
2018/10/13 Python
对python中数组的del,remove,pop区别详解
2018/11/07 Python
python,Django实现的淘宝客登录功能示例
2019/06/12 Python
Pyqt清空某一个QTreeewidgetItem下的所有分支方法
2019/06/17 Python
深入浅析Python科学计算库Scipy及安装步骤
2019/10/12 Python
python调用jenkinsAPI构建jenkins,并传递参数的示例
2020/12/09 Python
Skyscanner新西兰:全球领先的旅游搜索网站
2019/08/26 全球购物
Pandora德国官网:购买潘多拉手链、戒指、项链和耳环
2020/02/20 全球购物
公司联欢晚会主持词
2014/03/22 职场文书
专题组织生活会思想汇报
2014/10/01 职场文书
公安机关查摆剖析材料
2014/10/10 职场文书
保护环境建议书作文300字
2015/09/14 职场文书
Python OpenCV快速入门教程
2021/04/17 Python
深入浅出讲解Java8函数式编程
2022/01/18 Java/Android
台式电脑蓝牙适配器怎么安装?台式电脑蓝牙适配器安装教程
2022/04/08 数码科技
PostgreSQL 插入INSERT、删除DELETE、更新UPDATE、事务transaction
2022/04/12 PostgreSQL