用于降维的PCA算法的设计原理及其从头开始在Python中的实现

介绍

借助高性能CPU和GPU的可用性,几乎可以使用机器学习和深度学习模型解决所有回归,分类,聚类和其他相关问题。但是,在开发此类模型时,仍有许多部分会导致性能瓶颈。数据集中的大量特征是影响训练时间以及机器学习模型准确性的主要因素之一。

维数的诅咒

在机器学习中,“维数”仅指数据集中特征(即输入变量)的数量。

尽管如果我们添加其他特征/维度,任何机器学习模型的性能都会提高,但在某些时候,进一步的增加会导致性能下降,即特征的数量与数据集中观测值的数量相当大时,会出现几种线性算法努力训练有效的模型。这被称为“ 维数诅咒”。

降维是一组技术,用于研究如何缩小数据大小,同时保留最重要的信息并进一步消除维数的诅咒。它在分类和聚类问题的执行中起着重要作用。

该图说明了将3-D特征空间划分为两个1-D特征空间,然后,如果发现存在关联,则可以进一步减少特征数量。

用于降维的各种技术包括:

  • 主成分分析(PCA)
  • 线性判别分析(LDA)
  • 广义判别分析(GDA)
  • 多维缩放(MDS)
  • 局部线性嵌入(LLE)
  • 等度量映射(IsoMap)
  • 自动编码器(Autoencoders)

本文重点介绍PCA的设计原理及其在python中的实现。

主成分分析(PCA)

主成分分析(PCA)是最流行的线性降维算法之一。这是一种基于投影的方法,通过将数据投影到一组正交(垂直)轴上来转换数据。

“ PCA的工作条件是,将高维空间中的数据映射到低维空间中的数据,而低维空间中的数据的方差或散布应该最大。”

在下图中,数据在二维空间中沿红线具有最大方差。

让我们对PCA进行直观的了解。假设您希望根据食物的营养含量来区分它们。哪个变量是区分食物的好选择?如果您选择的变量从一种食品到另一种食品变化很大,则可以正确分离它们。如果所选变量在食品中的数量几乎相同,则您的工作将更加困难。如果数据没有一个变量可以正确隔离食品怎么办?我们可以通过线性组合原始变量来创建人工变量New_Var = 4*Var1 - 4*Var2 + 5*Var3。这实际上是PCA所做的,它找到了原始变量的最佳线性组合,因此沿新变量的方差或散布最大。

假设我们必须将数据点的二维表示转换为一维表示。因此,我们将尝试找到一条直线并在其上投影数据点。(一条直线是一维的),选择直线有很多可能性。

数据集

PCA运动

红色线将是我们的新维度。如果看到红线(连接蓝点在红色线上的投影),即每个数据点与直线的垂直距离就是投影误差。所有数据点的误差之和将成为总投影误差。我们的新数据点将是那些原始蓝色数据点的投影(红色点)。如我们所见,通过将它们投影到一维空间(即一条直线)上,我们已将二维数据点转换为一维数据点。那条红色的直线称为主轴。由于我们要投影到一个维度,因此只有一个主轴。我们应用相同的过程从残差中找到下一个主轴。除了是最大方差的方向外,下一个主轴必须与其他主轴正交(垂直或互不相关)。

一旦获得所有主轴,则将数据集投影到这些轴上。投影或转换后的数据集中的列称为主成分

主成分本质上是原始变量的线性组合,该组合中的权重向量实际上是找到的特征向量,而特征向量又满足最小二乘原理。

幸运的是,由于有了线性代数,我们不必为PCA花费太多精力。线性代数的特征值分解和奇异值分解(SVD)是PCA中用于减少维数的两个主要过程。

特征值分解

矩阵分解是将矩阵简化为其组成部分以简化一系列更为复杂的操作的过程。特征值分解是最常用的矩阵分解方法,它涉及将平方矩阵(n * n)分解为一组特征向量和特征值。

特征向量是单位向量,这意味着它们的长度或大小等于1.0。

特征值是应用于特征向量的系数,它们赋予向量其长度或大小。例如,负特征值可以反转特征向量的方向,作为缩放它的一部分。

从数学上讲,向量是A满足以下等式的任何n * n平方矩阵的特征向量:

Av = v

这称为特征值方程,其中A是我们要分解的n * n个父方矩阵,v是矩阵的特征向量, 表示特征值标量。

在简单的话,一个向量的线性变换vA 具有由因子缩放向量的相同的效果。注意,对于具有m≠n的m*n非正方形矩阵AAv为m- D向量,v是n-D向量,即,未定义特征值和特征向量。

特征值分解

将这些组成矩阵相乘在一起,或将这些矩阵表示的转换组合在一起,将得到原始矩阵。

分解操作不会导致矩阵压缩。相反,它将其分解为组成部分,以使矩阵上的某些操作更易于执行。与其他矩阵分解方法一样,特征分解被用作一个成分来简化其他更复杂的矩阵运算的计算。

奇异值分解(SVD)

奇异值分解是一种将矩阵分解为其他三个矩阵的方法。

SVD

数学奇异值分解由下式给出:

A是一个m × n矩阵U是一个m × n 正交矩阵S是一个n × n 对角矩阵V是n × n正交矩阵

如图所示,SVD生成三个矩阵U、S和V。U和V正交矩阵,其列分别表示AAT和ATA的特征向量。矩阵S是对角矩阵,对角线值称为奇异值。每个奇异值都是相应特征值的平方根。

降维如何适合这些数学方程式?

一旦计算出特征值和特征向量,就选择重要的特征向量来形成一组主轴。

特征向量的选择

特征向量的重要性由相应特征值解释的总方差的百分比来衡量。假设V1&V2是两个特征向量,分别具有40%&10%的总方差及其方向。如果要求从这两个特征向量中选择一个,我们的选择将是V1,因为它为我们提供了有关数据的更多信息。所有特征向量根据其特征值以降序排列。现在,我们必须确定要保留多少个特征向量,为此,我们需要讨论两种解释总方差陡坡图方法。

总方差说明

总解释方差用于衡量模型与实际数据之间的差异。它是模型总方差的一部分,由存在的因素来解释。

假设我们有一个n特征值向量(e0,...,en)降序排列。取每个索引的特征值的累积和,直到该和大于95%总方差则拒绝该索引之后的所有特征值和特征向量。

陡坡图

从陡坡图中,我们可以在添加主成分时读出所解释数据的方差百分比。

它在y轴上显示特征值,在x轴上显示因子数。它始终显示向下的曲线。曲线的斜率趋于平稳的点(“肘部”)表示因素的数量。

陡坡图

例如,在上方的陡坡图中,急剧弯曲(弯头)为4。因此,主轴数应为4。


下面的示例定义一个小的3×2矩阵,将数据居中放置在矩阵中,计算中心数据的协方差矩阵,然后对协方差矩阵进行特征值分解。特征向量和特征值被当作主成分和奇异值,最终用于将原始数据投影到新轴上。

输出:原始矩阵:[[5 6] [8 10] [12 18]] 协方差矩阵:[[12.33333333 21.33333333] [21.33333333 37.33333333]] 特征向量:[[-0.86762506 -0.49721902] [0.49721902 -0.86762506]] 特征值:[0.10761573 49.55905094] 预计的数据:[[0.24024879 6.28473039] [-0.37375033 1.32257309] [0.13350154 -7.60730348]]

结论

尽管PCA具有所有功效,但是如果变量数量很大,则很难解释主成分。当变量之间具有线性关系时,PCA最合适。而且,PCA容易受到较大异常值的影响。

PCA是一种古老的方法,并且已经进行了充分的研究。基本PCA有许多扩展,可以解决其缺点,例如robust PCA,kernel PCA,incremental PCA。

pca主成分分析_降维:主成分分析(PCA)相关推荐

  1. pca 主成分分析_超越普通PCA:非线性主成分分析

    pca 主成分分析 TL;DR: PCA cannot handle categorical variables because it makes linear assumptions about t ...

  2. PCA降维算法(内含PCA可视化迷你案例+PCA人脸识别降维案例+PCA逆转降噪案例)

    文章目录 1.sklearn中的降维算法 (1)PCA (2)SVD (3)思考 2.重要参数n_components 3.PCA中的SVD 4.重要接口inverse_transform 5.重要接 ...

  3. 吴恩达机器学习(十二)主成分分析(降维、PCA)

    目录 0. 前言 1. 主成分分析(PCA) 2. 主成分分析PCA的流程 3. 低维空间维度的选择 4. 主成分分析使用方式 学习完吴恩达老师机器学习课程的降维,简单的做个笔记.文中部分描述属于个人 ...

  4. pca降维python实例_主成分分析(Principal component analysis, PCA)例子–Python | 文艺数学君...

    摘要这一篇是关于PCA的实战, 我们会举一个例子, 看一下PCA具体在实战中是如何来进行的. 同时我们会比较同一个数据下, 使用PCA(主成分分析)和FA(因子分析)得到结果的不同. 简介 这一篇文章 ...

  5. pca 主成分分析_六分钟的主成分分析(PCA)的直观说明。

    pca 主成分分析 Principle Component Analysis (PCA) is arguably a very difficult-to-understand topic for be ...

  6. Python数据集可视化:抽取数据集的两个特征进行二维可视化、主成分分析PCA对数据集降维进行三维可视化(更好地理解维度之间的相互作用)

    Python数据集可视化:抽取数据集的两个特征进行二维可视化.主成分分析PCA对数据集降维进行三维可视化(更好地理解维度之间的相互作用) 目录 Python数据集可视化:抽取数据集的两个特征进行二维可 ...

  7. Matlab中特征降维主成分分析(PCA)使用方法(整套流程)

    1. PCA简介: PCA(Principal Component Analysis)主成分分析方法是一种常见的数据降维方法.数据维度过高可能会使得模型效果不佳.PCA主要原理是将高维原数据通过一个转 ...

  8. PCA主成分分析 特征降维 opencv实现

    最近对PCA主成分分析做了一定的了解,对PCA基础和简单的代码做了小小的总结 有很多博客都做了详细的介绍,这里也参考了这些大神的成果: http://blog.sina.com.cn/s/blog_7 ...

  9. JAVA实现PCA主成分分析_主成分分析PCA(principal component analysis)原理

    PCA在很多方面均有应用,但是之前没有仔细探究过,最近看了一些博客和论文,做一下总结. 主成分分析(Principal Component Analysis,PCA), 是一种统计方法.通过正交变换将 ...

最新文章

  1. json.parse()和json.stringify()
  2. [转载]使用RoboCopy 命令
  3. 关于python语言和人工智能下哪个说法不正确_“在资源管理器”窗口中,文件夹图标左侧有“...
  4. 真空压力变送器怎么样零点标定_恒压供水设备中液位变送器分类及工作原理
  5. 朴素贝叶斯(naive Bayes) 二
  6. Spring学习总结(12)——Druid连接池及监控在spring配置
  7. WebStorm-2018.2.2配置
  8. Lesson 013 —— python 数字
  9. 冬季打针后忌用手按摩
  10. iBeiKe十周年照片~
  11. android pokemon go,安卓Pokemon GO懒人版
  12. NPM酷库050:xmlbuilder,创建XML文件
  13. PHP-laravel框架一1
  14. 2021-09-28 网安实验-取证分析-Stuxnet病毒
  15. Tomcat Caused by:java.lang.IllegalArgumentException: 指定的主资源集[……]无效
  16. 5分钟看懂XCP协议
  17. 性能指标TP99介绍
  18. 重庆OA办公系统目前推出PC端、移动终端(安卓、IOS、平板)- 上弦科技
  19. maven pc配置要求_竞速游戏《F1 2019》PC配置要求 GTX 1660ti即可畅玩
  20. 关于Kurento 和 WebRTC-Kurento学习(一)

热门文章

  1. 直播丨国产数据库的机遇与挑战
  2. 并行导致的进程数过大无法连接数据库
  3. 如何手工配置DBControl
  4. 《数据安全警示录》一书修订版出版
  5. 今天你的静态变量和静态代码块执行了吗?
  6. 华为云PB级数据库GaussDB(for Redis)揭秘第六期:Feed流场景中的应用
  7. 常见的6种MySQL约束
  8. 详解GaussDB(DWS) explain分布式执行计划
  9. 应用性能调优分析与总结
  10. 【Python3网络爬虫开发实战】1.4.1-MySQL的安装