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简单实现TCP包发送十六进制数据的方法
Apr 16 Python
Python实现命令行通讯录实例教程
Aug 18 Python
Python3 加密(hashlib和hmac)模块的实现
Nov 23 Python
Python数据结构与算法之二叉树结构定义与遍历方法详解
Dec 12 Python
Python爬取数据并写入MySQL数据库的实例
Jun 21 Python
详解如何为eclipse安装合适版本的python插件pydev
Nov 04 Python
关于python多重赋值的小问题
Apr 17 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
Jun 18 Python
python与mysql数据库交互的实现
Jan 06 Python
Python定义函数实现累计求和操作
May 03 Python
python时间序列数据转为timestamp格式的方法
Aug 03 Python
Python基于百度API识别并提取图片中文字
Jun 27 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动态变静态原理
2006/11/25 PHP
解析php php_openssl.dll的作用
2013/07/01 PHP
PHP字符串的连接的简单实例
2013/12/30 PHP
PHP 实现代码复用的一个方法 traits新特性
2015/02/22 PHP
PHP命名空间简单用法示例
2018/12/28 PHP
php使用yield对性能提升的测试实例分析
2019/09/19 PHP
javascript while语句和do while语句的区别分析
2007/12/08 Javascript
javascript数字格式化通用类 accounting.js使用
2012/08/24 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
JS继承用法实例分析
2015/02/05 Javascript
JavaScript对数组进行随机重排的方法
2015/07/22 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
实战node静态文件服务器的示例代码
2018/03/08 Javascript
js中比较两个对象是否相同的方法示例
2019/09/02 Javascript
vue实现评论列表功能
2019/10/25 Javascript
Python网络爬虫项目:内容提取器的定义
2016/10/25 Python
Python 专题四 文件基础知识
2017/03/20 Python
遗传算法之Python实现代码
2017/10/10 Python
PyQt5利用QPainter绘制各种图形的实例
2017/10/19 Python
简单实现python画圆功能
2018/01/25 Python
解决Python pandas plot输出图形中显示中文乱码问题
2018/12/12 Python
Pandas库之DataFrame使用的学习笔记
2019/06/21 Python
Python如何进行时间处理
2020/08/06 Python
python 装饰器的基本使用
2021/01/13 Python
惠普香港官方商店:HP香港
2019/04/30 全球购物
德国家具折扣店:POCO
2020/02/28 全球购物
仓库门卫岗位职责
2013/12/22 职场文书
寒假思想汇报
2014/01/10 职场文书
幼儿园三八妇女节活动方案
2014/03/11 职场文书
心理学专业求职信
2014/06/16 职场文书
接收函格式
2015/01/30 职场文书
英文慰问信
2015/02/14 职场文书
2015年高三班主任工作总结
2015/05/21 职场文书
商业计划书如何写?关键问题有哪些?
2019/07/11 职场文书
36个正则表达式(开发效率提高80%)
2021/11/17 Javascript
《模拟人生4》推出新补丁 “婚礼奇缘”DLC终于得到修复
2022/04/03 其他游戏