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 相关文章推荐
c++生成dll使用python调用dll的方法
Jan 20 Python
Pythont特殊语法filter,map,reduce,apply使用方法
Feb 27 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
Apr 25 Python
python实现单链表中删除倒数第K个节点的方法
Sep 28 Python
python 保存float类型的小数的位数方法
Oct 17 Python
Django框架会话技术实例分析【Cookie与Session】
May 24 Python
python快速编写单行注释多行注释的方法
Jul 31 Python
给 TensorFlow 变量进行赋值的方式
Feb 10 Python
python根据字典的键来删除元素的方法
Aug 16 Python
python tkinter实现连连看游戏
Nov 16 Python
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
Jun 11 Python
python游戏开发之pygame实现接球小游戏
Apr 22 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读写音频文件信息的详解(支持WMA和MP3)
2013/05/10 PHP
解析php中static,const与define的使用区别
2013/06/18 PHP
PHP随机字符串生成代码(包括大小写字母)
2013/06/24 PHP
php微信公众平台开发(四)回复功能开发
2016/12/06 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
基于jquery的修改当前TAB显示标题的代码
2010/12/11 Javascript
js面向对象之静态方法和静态属性实例分析
2015/01/10 Javascript
JavaScript 学习笔记之操作符(续)
2015/01/14 Javascript
Javascript基础教程之if条件语句
2015/01/18 Javascript
js实现图片点击左右轮播
2015/07/08 Javascript
JS实现可调整倒计时间代码分享
2015/08/18 Javascript
深入解析桶排序算法及Node.js上JavaScript的代码实现
2016/07/06 Javascript
深入理解bootstrap框架之入门准备
2016/10/09 Javascript
jquery 动态增加,减少input表单的简单方法(必看)
2016/10/12 Javascript
移动端脚本框架Hammer.js
2016/12/15 Javascript
一道面试题引发的对javascript类型转换的思考
2017/03/06 Javascript
Angular4学习笔记之新建项目的方法
2017/07/18 Javascript
使用vue构建移动应用实战代码
2017/08/02 Javascript
Angular2+如何去除url中的#号详解
2017/12/20 Javascript
vue element-ui el-date-picker限制选择时间为当天之前的代码
2019/11/07 Javascript
Vue打包后访问静态资源路径问题
2019/11/08 Javascript
vue与django集成打包的实现方法
2019/11/11 Javascript
python if not in 多条件判断代码
2016/09/21 Python
pyqt5利用pyqtDesigner实现登录界面
2019/03/28 Python
基于python3生成标签云代码解析
2020/02/18 Python
Pycharm 跳转回之前所在页面的操作
2021/02/05 Python
利用Canvas模仿百度贴吧客户端loading小球的方法示例
2017/08/13 HTML / CSS
奥地利顶级内衣丝袜品牌英国站:Wolford英国
2016/08/29 全球购物
玩具反斗城天猫官方旗舰店:享誉全球的玩具店
2017/10/10 全球购物
优秀研究生自我鉴定
2013/12/04 职场文书
会计专业毕业生求职信分享
2014/01/03 职场文书
2014年领班工作总结
2014/11/25 职场文书
个人年度总结报告
2015/03/09 职场文书
JavaScript 防篡改对象的用法示例
2021/04/24 Javascript
Python实战之实现简易的学生选课系统
2021/05/25 Python
如何用vue实现网页截图你知道吗
2021/11/17 Vue.js