python实现PCA降维的示例详解


Posted in Python onFebruary 24, 2020

概述

本文主要介绍一种降维方法,PCA(Principal Component Analysis,主成分分析)。降维致力于解决三类问题。

1. 降维可以缓解维度灾难问题;

2. 降维可以在压缩数据的同时让信息损失最小化;

3. 理解几百个维度的数据结构很困难,两三个维度的数据通过可视化更容易理解。

PCA简介

在理解特征提取与处理时,涉及高维特征向量的问题往往容易陷入维度灾难。随着数据集维度的增加,算法学习需要的样本数量呈指数级增加。有些应用中,遇到这样的大数据是非常不利的,而且从大数据集中学习需要更多的内存和处理能力。另外,随着维度的增加,数据的稀疏性会越来越高。在高维向量空间中探索同样的数据集比在同样稀疏的数据集中探索更加困难。

主成分分析也称为卡尔胡宁-勒夫变换(Karhunen-Loeve Transform),是一种用于探索高维数据结构的技术。PCA通常用于高维数据集的探索与可视化。还可以用于数据压缩,数据预处理等。PCA可以把可能具有相关性的高维变量合成线性无关的低维变量,称为主成分( principal components)。新的低维数据集会尽可能的保留原始数据的变量。

PCA将数据投射到一个低维子空间实现降维。例如,二维数据集降维就是把点投射成一条线,数据集的每个样本都可以用一个值表示,不需要两个值。三维数据集可以降成二维,就是把变量映射成一个平面。一般情况下,nn维数据集可以通过映射降成kk维子空间,其中k≤nk≤n。

假如你是一本养花工具宣传册的摄影师,你正在拍摄一个水壶。水壶是三维的,但是照片是二维的,为了更全面的把水壶展示给客户,你需要从不同角度拍几张图片。下图是你从四个方向拍的照片:

python实现PCA降维的示例详解

第一张图里水壶的背面可以看到,但是看不到前面。第二张图是拍前面,可以看到壶嘴,这张图可以提供了第一张图缺失的信息,但是壶把看不到了。从第三张俯视图里无法看出壶的高度。第四张图是你真正想要的,水壶的高度,顶部,壶嘴和壶把都清晰可见。

PCA的设计理念与此类似,它可以将高维数据集映射到低维空间的同时,尽可能的保留更多变量。PCA旋转数据集与其主成分对齐,将最多的变量保留到第一主成分中。假设我们有下图所示的数据集:

python实现PCA降维的示例详解

数据集看起来像一个从原点到右上角延伸的细长扁平的椭圆。要降低整个数据集的维度,我们必须把点映射成一条线。下图中的两条线都是数据集可以映射的,映射到哪条线样本变化最大?

python实现PCA降维的示例详解

显然,样本映射到黑色虚线的变化比映射到红色点线的变化要大的多。实际上,这条黑色虚线就是第一主成分。第二主成分必须与第一主成分正交,也就是说第二主成分必须是在统计学上独立的,会出现在与第一主成分垂直的方向,如下图所示:

python实现PCA降维的示例详解

后面的每个主成分也会尽量多的保留剩下的变量,唯一的要求就是每一个主成分需要和前面的主成分正交。

现在假设数据集是三维的,散点图看起来像是沿着一个轴旋转的圆盘。

python实现PCA降维的示例详解

这些点可以通过旋转和变换使圆盘完全变成二维的。现在这些点看着像一个椭圆,第三维上基本没有变量,可以被忽略。

当数据集不同维度上的方差分布不均匀的时候,PCA最有用。(如果是一个球壳形数据集,PCA不能有效的发挥作用,因为各个方向上的方差都相等;没有丢失大量的信息维度一个都不能忽略)。

python实现PCA降维代码

# coding=utf-8
from sklearn.decomposition import PCA 
from pandas.core.frame import DataFrame
import pandas as pd 
import numpy as np 
l=[]
with open('test.csv','r') as fd:
 
  line= fd.readline()
  while line:
    if line =="":
      continue
 
    line = line.strip()
    word = line.split(",")
    l.append(word)
    line= fd.readline()
 
data_l=DataFrame(l)
print (data_l)
dataMat = np.array(data_l) 
 
 
pca_sk = PCA(n_components=2) 
newMat = pca_sk.fit_transform(dataMat) 
 
 
data1 = DataFrame(newMat)
data1.to_csv('test_PCA.csv',index=False,header=False)

以上这篇python实现PCA降维的示例详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python写的一个squid访问日志分析的小程序
Sep 17 Python
Python工程师面试题 与Python Web相关
Jan 14 Python
django 修改server端口号的方法
May 14 Python
TensorFlow实现Logistic回归
Sep 07 Python
使用Python处理BAM的方法
Sep 28 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
May 07 Python
python实现图像检索的三种(直方图/OpenCV/哈希法)
Aug 08 Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
Mar 02 Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
May 11 Python
解决Pycharm 运行后没有输出的问题
Feb 05 Python
Python中使用Selenium环境安装的方法步骤
Feb 22 Python
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
Mar 03 Python
Python sklearn库实现PCA教程(以鸢尾花分类为例)
Feb 24 #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
You might like
在PHP3中实现SESSION的功能(三)
2006/10/09 PHP
深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
2013/02/06 PHP
PHP的Yii框架中过滤器相关的使用总结
2016/03/29 PHP
php解决约瑟夫环算法实例分析
2019/09/30 PHP
新浪中用来显示flash的函数
2007/04/02 Javascript
IE php关于强制下载文件的代码
2008/08/23 Javascript
javascript获取选中的文本的方法代码
2013/10/30 Javascript
jquery ajax jsonp跨域调用实例代码
2013/12/11 Javascript
js判断字符是否是汉字的两种方法小结
2014/01/03 Javascript
jquery和css3实现的炫酷时尚的菜单导航
2014/09/01 Javascript
js显示文本框提示文字的方法
2015/05/07 Javascript
JS实现的新浪微博大厅文字内容滚动效果代码
2015/11/05 Javascript
浅析Bootstrap缩略图组件与警示框组件
2016/04/29 Javascript
Vue.js 2.0 移动端拍照压缩图片上传预览功能
2017/03/06 Javascript
JQuery实现图片轮播效果
2017/05/08 jQuery
webpack项目使用eslint建立代码规范实现
2019/05/16 Javascript
vue 解除鼠标的监听事件的方法
2019/11/13 Javascript
Vue-cli3生成的Vue项目加载Mxgraph方法示例
2020/05/31 Javascript
Vue+element-ui添加自定义右键菜单的方法示例
2020/12/08 Vue.js
Python中zfill()方法的使用教程
2015/05/20 Python
Python之ReportLab绘制条形码和二维码的实例
2018/01/15 Python
使用python实现BLAST
2018/02/12 Python
解决Python pandas df 写入excel 出现的问题
2018/07/04 Python
python字符串判断密码强弱
2020/03/18 Python
Pycharm连接远程服务器过程图解
2020/04/30 Python
Python xml、字典、json、类四种数据类型如何实现互相转换
2020/05/27 Python
python 解决pycharm运行py文件只有unittest选项的问题
2020/09/01 Python
html5-canvas中使用clip抠出一个区域的示例代码
2018/05/25 HTML / CSS
美国知名的百货清仓店:Neiman Marcus Last Call
2016/08/03 全球购物
牧马人澳大利亚官网:Wrangler澳大利亚
2019/10/08 全球购物
俄罗斯电动工具和设备购物网站:Vseinstrumenti.ru
2020/11/12 全球购物
成人毕业生自我鉴定
2013/10/18 职场文书
信息专业学生学习的自我评价
2014/02/17 职场文书
2014年预备党员学习两会心得体会
2014/03/17 职场文书
三好学生演讲稿范文
2014/04/26 职场文书
答谢会策划方案
2014/05/12 职场文书