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使用正则表达式分析网页中的图片并进行替换的方法
Mar 26 Python
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
Mar 30 Python
python使用标准库根据进程名如何获取进程的pid详解
Oct 31 Python
python实现求解列表中元素的排列和组合问题
Mar 15 Python
解决python删除文件的权限错误问题
Apr 24 Python
对Python3.6 IDLE常用快捷键介绍
Jul 16 Python
详解Django的model查询操作与查询性能优化
Oct 16 Python
python网络爬虫 CrawlSpider使用详解
Sep 27 Python
Python3 Tkinkter + SQLite实现登录和注册界面
Nov 19 Python
使用Python发现隐藏的wifi
Mar 04 Python
pandas中的ExcelWriter和ExcelFile的实现方法
Apr 24 Python
使用python库xlsxwriter库来输出各种xlsx文件的示例
Sep 01 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
SONY SRF-M100的电路分析
2021/03/02 无线电
php图形jpgraph操作实例分析
2017/02/22 PHP
Yii框架函数简单用法分析
2019/09/09 PHP
JAVASCRIPT keycode总结
2009/02/04 Javascript
jQuery中slice()方法用法实例
2015/01/07 Javascript
NodeJS中Buffer模块详解
2015/01/07 NodeJs
jQuery大于号(>)选择器的作用解释
2015/01/13 Javascript
JQuery显示隐藏页面元素的方法总结
2015/04/16 Javascript
理解Javascript的call、apply
2015/12/16 Javascript
jQuery 中的 DOM 操作
2016/04/26 Javascript
AngularJS基础 ng-keydown 指令简单示例
2016/08/02 Javascript
javascript对浅拷贝和深拷贝的详解
2016/10/14 Javascript
基于Vue.js实现简单搜索框
2020/03/26 Javascript
微信小程序中实现一对多发消息详解及实例代码
2017/02/14 Javascript
JavaScript基础进阶之数组方法总结(推荐)
2017/09/04 Javascript
ES6中数组array新增方法实例总结
2017/11/07 Javascript
angular之ng-template模板加载
2017/11/09 Javascript
layui.js实现的表单验证功能示例
2017/11/15 Javascript
JavaScript体验异步更好的解决办法
2018/01/08 Javascript
基于vue-cli vue-router搭建底部导航栏移动前端项目
2018/02/28 Javascript
原生JS实现自定义下拉单选选择框功能
2018/10/12 Javascript
微信小程序实现星星评价效果
2018/11/02 Javascript
Python基于scrapy采集数据时使用代理服务器的方法
2015/04/16 Python
python使用Tkinter显示网络图片的方法
2015/04/24 Python
Python语法快速入门指南
2015/10/12 Python
使用Python的PIL模块来进行图片对比
2016/02/18 Python
Python中time模块和datetime模块的用法示例
2016/02/28 Python
Python面向对象实现方法总结
2020/08/12 Python
HTML5地理定位与第三方工具百度地图的应用
2016/11/17 HTML / CSS
皇家道尔顿官网:Royal Doulton
2017/12/06 全球购物
Superdry极度干燥美国官网:英国制造的服装品牌
2018/11/13 全球购物
美国轻奢时尚购物网站:REVOLVE(支持中文)
2020/07/18 全球购物
网络维护管理员的自我评价分享
2013/11/11 职场文书
心理健康心得体会
2014/01/02 职场文书
幼儿园毕业家长感言
2014/02/10 职场文书
消费者投诉书范文
2015/07/02 职场文书