0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

PCA类在降维和数据重构的简单用法

lviY_AI_shequ 来源:lp 2019-04-17 09:57 次阅读

前言

前两篇文章介绍了PCA(主成分分析方法)和SVD(奇异值分解)的算法原理,本文基于scikit learn包介绍了PCA算法在降维和数据重构的应用,并分析了PCA类与sparsePCA类的区别。由于PCA算法的特征值分解是奇异值分解SVD的一个特例,因此sklearn工具的PCA库是基于SVD实现的。

本文内容代码链接:

https://github.com/zhangleiszu/machineLearning/tree/master/PCA

目录

1. PCA类介绍

2. sklearn.decomposition.PCA的参数说明

3. sklearn.decomposition.MiniBatchSparsePCA的参数说明

4. PCA类在降维的应用

5. PCA类与MiniBatchSparsePCA类的区别

6. PCA在数据重构的应用

7. 总结

1. PCA类介绍

所有PCA类都在sklearn.decompostion包中,主要有以下几类:

1) sklearn.decompostion.PCA:实际项目中用的最多的PCA类;

2) sklearn.decompostion.IncrementPCA:PCA最大的缺点是只支持批处理,也就是说所有数据都必须在主内存空间计算,IncrementalPCA使用多个batch,然后依次调用partial_fit函数,降维结果与PCA类基本一致 。

3) sklearn.decomposition.SparsePCA和sklearn.decomposition.MiniBatchSparsePCA:SparsePCA类和MiniBatchSparsePCA类算法原理一样,都是把降维问题用转换为回归问题,并在优化参数时增加了正则化项(L1惩罚项),不同点是MiniBatchSparsePCA使用部分样本特征并迭代设置的次数进行PCA降维 。

4) sklearn.decomposition.KernelPCA:对于线性不可分的特征,我们需要对特征进行核函数映射为高维空间,然后进行PCA降维 。流程图如下:

2. sklearn.decomposition.PCA类的参数说明

1) n_components:取值为:整形,浮点型,None或字符串。

n_components为空时,取样本数和特征数的最小值:

n_components == min(n_samples , n_features)

0 < n_components < 1时,选择主成分的方差和占总方差和的最小比例阈值,PCA类自动计算降维     后的维数。

n_components是大于等于1的整数,设置降维后的维数 。

n_components是字符串'mle',PCA类自动计算降维后的维数 。

2) copy:布尔型变量 。表示在运行时是否改变训练数据,若为True,不改变训练数据的值,运算结果写在复制的训练数据上;若为False,则覆盖训练数据 ,默认值为True。

3) whiten:布尔型变量 。若为True,表示对降维后的变量进行归一化;若为False,则不进行归一化 ,默认值为False。

4) svd_solver:字符串变量,取值为:'auto','full','arpack','randomized'

randomized:如果训练数据大于500×500,降维后的维数小于数据的最小维数0.8倍,采用加快SVD的随机算法 。

full:传统意义上的SVD算法,调用scipy.linalg.svd类。

arpack:调用scipy.sparse.linalg.svds类,降维后的维数符合:

0 < n_components < min(X.shape)

auto:自动选择最适合的SVD算法。

类成员属性:

components_:主成分分量的向量空间 。

explained_variance_:向量空间对应的方差值 。

explained_variance_ratio_:向量空间的方差值占总方差值的百分比 。

singular_values:向量空间对应的奇异值 。

3.sklearn.decomposition.MiniBatchSparsePCA的参数说明

本节就介绍两个常用的重要变量,用法与PCA类基本相同。

n_components:降维后的维数

alpha:正则化参数,值越高,主成分分量越稀疏(分量包含0的个数越多)。

4. PCA类在降维的应用

Iris数据集包含了三种花(Setosa,Versicolour和Virginica),特征个数为4。

下载Iris数据集:

iris = datasets.load_iris()X = iris.datay = iris.target

设置降维后的维数为2:

pca = PCA(n_components=2)

降维后的数据集:

X_r = pca.fit(X).transform(X)

降维后的特征分布图:

5. PCA类与MiniBatchSparsePCA类的区别

PCA类主成分分量是非零系数构成的,导致了PCA降维的解释性很差,若主成分分量包含了很多零系数,那么主成分分量可以将很多非主要成分的影响降维0,不仅增强了降维的解释性,也降低了噪声的影响 ,缺点是可能丢失了训练数据的重要信息。MiniBatchSparsePCA与PCA类的区别是使用了L1正则化项,导致了产生的主成分分量包含了多个0,L1正则化系数越大,0的个数越多,公式如下:

用图来说明区别:

左图是PCA类的主成分分量空间,右图是MiniBatchSparsePCA类的主成分分量空间,比较两图可知,右图能够定位到重要的特征部位 。

若是用数值表示,MiniBatchSparsePCA类的主成分分量值为:

由上图可知,主成分分量包含了很多零分量 。

6. PCA在数据重构的应用

数据重构算法借鉴上一篇文章的图:

浅蓝色部分矩阵的乘积为数据的重构过程,r为选择的主成分分量个数 。r越大,重构的数据与原始数据越接近或主成分分量的方差和比例越大,重构的数据与原始数据越接近 ,图形解释如下:

n_components是0.2的数据重构图:

n_components是0.9的数据重构图:

因此,主成分分量越多,重构的数据与原始数据越接近。

7. 总结

本文介绍了PCA类在降维和数据重构的简单用法以及分析了sparsePCA类稀疏主成分分量的原理。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    3865

    浏览量

    61307
  • 数据集
    +关注

    关注

    4

    文章

    1178

    浏览量

    24347
  • PCA算法
    +关注

    关注

    0

    文章

    2

    浏览量

    1287

原文标题:scikit learn中PCA的使用方法

文章出处:【微信号:AI_shequ,微信公众号:人工智能爱好者社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    #机器学习 维之PCA

    编程语言PCApython
    电子技术那些事儿
    发布于 :2022年09月18日 17:17:32

    FPGA的重构方式

    ,影响系统实时性。动态重构系统运行中能实时全部或部分重构,且不中断正常逻辑输出,因而更有灵活性和高速度。  大多数FPGA都是基于LUT查找表结构,它们只适用于静态重构,通过向LUT
    发表于 05-27 10:22

    基于FPGA的可重构系统结构分析

    某一个或若干个子模块的结构。此时不仅电路逻辑改变,连线资源也重新分配。重构所需的电路输出配置信息事先由编译软件生成。通常重构时系统需要暂停工作,待重构完成后再继续。这种重构系统设计
    发表于 05-27 10:24

    MPU+FPGA结构的可重构系统的结构特

    本帖最后由 mr.pengyongche 于 2013-4-30 03:24 编辑   通用微处理器具有良好的接口功能,便于构建可重构系统。按照MPU与FPGA之间的相互关系以及系统中所起的作用,主要可以分为两:MPU
    发表于 05-27 10:29

    求助,SVM分类时要不要先进行PCA维呢?

    大家知道,既然SVM可以较好地解决小样本、非线性、高维数等分类问题,那对于高维样本输入,需不需要提前进行PCA维呢?PCA维对SVM有意义吗?还有,当SVM进行高维样本分类时,有没
    发表于 10-27 20:13

    PCA9685模块51单片机的简单应用(舵机)

    PCA9685模块51单片机的简单应用(舵机)最近特别想搞机械臂,于是某宝上花了4百多买了一套机械臂模型,都是用舵机控制的,结果发现配套里没有舵机驱动板,Arduino板子直接驱动
    发表于 12-26 00:41

    llabview如何完成pca算法

    labview可以自己独立的做数据pca算法么?还是说只能运用脚本节点在MATLAB里面做?如果只能在matlab里做pca数据如何转化为矩阵信息传入matlab?
    发表于 04-21 10:51

    【FPGA学习】VHDL的数据类型预定义属性和数据范围预定义属性是怎么用的

    数据类型预定义属性数据类型的属性只有一个 t'BASE 类型属性,它必须由另一个值或函数类型属性用该属性。这个属性将返回类型或者子类型的基本类型,这个属性只能作另一属性的前缀,
    发表于 09-17 10:04

    重构波束天线技术增加网络容量应用

    对网络质量,也对服务区域、容量和数据速率产生巨大影响。更高的干扰实际上减小了3G和4G网络中的服务区域,反之,降低干扰可增大服务区域。规划3G和4G网络过程中的一大关键目标在于优化并降低干扰。  限制
    发表于 06-11 07:31

    为什么要重构?如何重组Python包?

      未经测试的代码设计上是不好的代码。您有测试用例吗?如果是这样,它们的完整性如何?这些测试用例是否最新?  为什么重构之前需要测试用例?您可以辩称,即使进行了简单的更改,也不需要
    发表于 09-15 15:28

    PCA9685寄存器用法和通信(一)精选资料推荐

    使用树莓派控制舵机的时候,由于树莓派自带的硬件PWM资源少,稳定性差,所以买了块PCA9685模块,芯片本身是比较简单的,但是网上教程混乱,互相抄袭,看的云里雾里,无奈只好自己啃了一下
    发表于 07-29 06:42

    讲解Matlab的简单用法

    command窗口该如何去使用呢?怎样matlab中创建一个一行四列的数组呢?
    发表于 11-18 06:32

    基于Autoencoder网络的数据维和重构

    在机器学习,模式识别以及数据挖掘等诸多研究领域中,往往会面临着“维数灾难”问题。因此,特征数据的降维方法,即将高维的特征数据如何进行简化投射到低维空间中再进行
    发表于 11-18 13:58 16次下载

    函数的形式及用法_PPT简单讲解

    函数的形式及用法_PPT简单讲解,感兴趣的小伙伴们可以瞧一瞧。
    发表于 08-23 17:56 0次下载

    STM8L定时器1和定时器4的简单用法

    STM8L定时器1和定时器4的简单用法背景介绍调试环境简介功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容
    发表于 12-27 18:30 12次下载
    STM8L定时器1和定时器4的<b class='flag-5'>简单用法</b>