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运行的17个时新手常见错误小结
Aug 07 Python
自己编程中遇到的Python错误和解决方法汇总整理
Jun 03 Python
用python写个自动SSH登录远程服务器的小工具(实例)
Jun 17 Python
python实现搜索文本文件内容脚本
Jun 22 Python
Python中如何使用if语句处理列表实例代码
Feb 24 Python
python利用Opencv实现人脸识别功能
Apr 25 Python
python通过http下载文件的方法详解
Jul 26 Python
Python实现ATM系统
Feb 17 Python
python爬虫开发之selenium模块详细使用方法与实例全解
Mar 09 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
Mar 11 Python
Python WebSocket长连接心跳与短连接的示例
Nov 24 Python
python数据抓取3种方法总结
Feb 07 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
常用星际术语索引(新手指南)
2020/03/04 星际争霸
S900/ ETON E1-XM 收音机
2021/03/02 无线电
PHP操作mysql函数详解,mysql和php交互函数
2011/05/19 PHP
php利用反射实现插件机制的方法
2015/03/14 PHP
浅谈PHP中的Trait使用方法
2019/03/22 PHP
在phpstudy集成环境下的nginx服务器下配置url重写
2019/12/02 PHP
js中的异常处理try...catch使用介绍
2013/09/21 Javascript
javascript定义变量时加var与不加var的区别
2014/12/22 Javascript
jQuery实现的支持IE的html滑动条
2015/03/16 Javascript
javascript封装的sqlite操作类实例
2015/07/17 Javascript
JS 通过系统时间限定动态添加 select option的实例代码
2016/06/09 Javascript
JS中如何比较两个Json对象是否相等实例代码
2016/07/13 Javascript
Js删除数组中某一项或几项的几种方法(推荐)
2016/07/27 Javascript
AngularJS 实现弹性盒子布局的方法
2016/08/30 Javascript
JavaScript轻松创建级联函数的方法示例
2017/02/10 Javascript
详解vue项目的构建,打包,发布全过程
2017/11/23 Javascript
Vue瀑布流插件的使用示例
2018/09/19 Javascript
使用canvas实现一个vue弹幕组件功能
2018/11/30 Javascript
使用watch在微信小程序中实现全局状态共享
2019/06/03 Javascript
vue+django实现一对一聊天功能的实例代码
2019/07/17 Javascript
JS页面获取 session 值,作用域和闭包学习笔记
2019/10/16 Javascript
详解JavaScript 作用域
2020/07/14 Javascript
最全vue的vue-amap使用高德地图插件画多边形范围的示例代码
2020/07/17 Javascript
动态实现element ui的el-table某列数据不同样式的示例
2021/01/22 Javascript
[19:26]TNC vs EG (BO3)
2018/06/07 DOTA
python 爬取小说并下载的示例
2020/12/07 Python
HTML table 表格边框的实现思路
2019/10/12 HTML / CSS
海滩咖啡馆:Beach Cafe
2018/02/02 全球购物
英国奢华护肤、美容和Spa品牌:Temple Spa
2019/11/02 全球购物
意大利运动服减价商店:ScontoSport
2020/03/10 全球购物
小学教师岗位职责
2013/11/25 职场文书
三下乡活动方案
2014/01/31 职场文书
品质标语大全
2014/06/21 职场文书
青春励志演讲稿范文
2014/08/25 职场文书
学生检讨书范文
2019/06/24 职场文书
Pytorch中的数据集划分&正则化方法
2021/05/27 Python