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抓取网页图片示例(python爬虫)
Apr 27 Python
Python中使用Inotify监控文件实例
Feb 14 Python
在Django的form中使用CSS进行设计的方法
Jul 18 Python
Python中在for循环中嵌套使用if和else语句的技巧
Jun 20 Python
python实现求解列表中元素的排列和组合问题
Mar 15 Python
python 常用的基础函数
Jul 10 Python
Python并发之多进程的方法实例代码
Aug 15 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
Oct 15 Python
Python time库基本使用方法分析
Dec 13 Python
python 计算概率密度、累计分布、逆函数的例子
Feb 25 Python
django-orm F对象的使用 按照两个字段的和,乘积排序实例
May 18 Python
python爬取新闻门户网站的示例
Apr 25 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中英混合字符串截取函数代码
2011/07/17 PHP
php curl 伪造IP来源的实例代码
2012/11/01 PHP
Prototype源码浅析 Number部分
2012/01/16 Javascript
node.js中的console.error方法使用说明
2014/12/10 Javascript
AngularJS iframe跨域打开内容时报错误的解决办法
2015/01/26 Javascript
Node.js程序中的本地文件操作用法小结
2016/03/06 Javascript
ES6新特性之Object的变化分析
2017/03/31 Javascript
Node.js简单入门前传
2017/08/21 Javascript
Angular 如何使用第三方库的方法
2018/04/18 Javascript
Vue中的scoped实现原理及穿透方法
2018/05/15 Javascript
使用javascript做在线算法编程
2018/05/25 Javascript
Vue配合iView实现省市二级联动的示例代码
2018/07/27 Javascript
bootstrap-table+treegrid实现树形表格
2019/07/26 Javascript
微信小程序实现上传图片裁剪图片过程解析
2019/08/22 Javascript
vue 解决路由只变化参数页面组件不更新问题
2019/11/05 Javascript
JS正则表达式验证密码强度
2020/03/18 Javascript
在vue项目中promise解决回调地狱和并发请求的问题
2020/11/09 Javascript
[04:11]DOTA2上海特级锦标赛主赛事首日TOP10
2016/03/03 DOTA
python遍历 truple list dictionary的几种方法总结
2016/09/11 Python
Python实现的统计文章单词次数功能示例
2019/07/08 Python
python二分法查找算法实现方法【递归与非递归】
2019/12/06 Python
PyQt5多线程刷新界面防假死示例
2019/12/13 Python
pycharm设置python文件模板信息过程图解
2020/03/10 Python
Python OpenCV读取中文路径图像的方法
2020/07/02 Python
基于python实现计算两组数据P值
2020/07/10 Python
python基于爬虫+django,打造个性化API接口
2021/01/21 Python
pandas 按日期范围筛选数据的实现
2021/02/20 Python
使用html5新特性轻松监听任何App自带返回键的示例
2018/03/13 HTML / CSS
英国领先品牌手动工具和电动工具供应商:Tooled Up
2018/11/24 全球购物
New Balance法国官方网站:购买鞋子和服装
2019/09/01 全球购物
主要的Ajax框架都有什么
2013/11/14 面试题
纯 CSS 自定义多行省略的问题(从原理到实现)
2021/11/11 HTML / CSS
 Redis 串行生成顺序编码的方法实现
2022/04/03 Redis
Tomcat配置访问日志和线程数
2022/05/06 Servers
MYSQL中文乱码问题的解决方案
2022/06/14 MySQL