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的Django中django-userena组件的简单使用教程
May 30 Python
Ruby元编程基础学习笔记整理
Jul 02 Python
基于python爬虫数据处理(详解)
Jun 10 Python
Python cookbook(数据结构与算法)从字典中提取子集的方法示例
Mar 22 Python
python实现数据库跨服务器迁移
Apr 12 Python
python版本单链表实现代码
Sep 28 Python
Python实现去除列表中重复元素的方法总结【7种方法】
Feb 16 Python
Python Web框架之Django框架Model基础详解
Aug 16 Python
使用keras框架cnn+ctc_loss识别不定长字符图片操作
Jun 29 Python
Python字符串split及rsplit方法原理详解
Jun 29 Python
python爬虫筛选工作实例讲解
Nov 23 Python
python实现猜拳游戏项目
Nov 30 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
我的论坛源代码(二)
2006/10/09 PHP
比较时间段一与时间段二是否有交集的php函数
2011/05/31 PHP
PHP strip_tags()去除HTML、XML以及PHP的标签介绍
2014/02/18 PHP
thinkPHP中配置的读取与C方法详解
2016/12/05 PHP
PHP 断点续传实例详解
2017/11/11 PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
2017/11/28 PHP
关于二级域名下使用一级域名下的COOKIE的问题
2011/11/07 Javascript
js查错流程归纳
2012/05/04 Javascript
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
confirm的用法示例用于按钮操作时确定是否执行
2014/06/19 Javascript
JavaScript父子窗体间的调用方法
2015/03/31 Javascript
js删除数组元素、清空数组的简单方法(必看)
2016/07/27 Javascript
JS无缝滚动效果实现方法分析
2016/12/21 Javascript
基于jPlayer三分屏的制作方法
2016/12/21 Javascript
js数组去重的hash方法
2016/12/22 Javascript
js实现淡入淡出轮播切换功能
2017/01/13 Javascript
Vue 去除路径中的#号
2018/04/19 Javascript
实例讲解Vue.js中router传参
2018/04/22 Javascript
jQuery实现获取动态添加的标签对象示例
2018/06/28 jQuery
一步步教你用Python实现2048小游戏
2017/01/19 Python
Python图形绘制操作之正弦曲线实现方法分析
2017/12/25 Python
Python管理Windows服务小脚本
2018/03/12 Python
在Python 中实现图片加框和加字的方法
2019/01/26 Python
关于python中密码加盐的学习体会小结
2019/07/15 Python
python实现飞行棋游戏
2020/02/05 Python
python如何求圆的面积
2020/07/01 Python
python3:excel操作之读取数据并返回字典 + 写入的案例
2020/09/01 Python
Python 多进程、多线程效率对比
2020/11/19 Python
手工制作的音乐盒:Music Box Attic
2019/09/05 全球购物
财务主管自我鉴定
2014/01/17 职场文书
运动会入场解说词300字
2014/01/25 职场文书
团日活动策划书
2014/02/01 职场文书
物流管理专业推荐信
2014/09/06 职场文书
2014统计局民主生活会对照检查材料思想汇报
2014/10/02 职场文书
销售辞职信范文
2015/03/02 职场文书
党务工作者主要事迹材料
2015/11/03 职场文书