PCA降维

雨点打透心脏的1/2处 2023-06-01 06:06 171阅读 0赞

概念

在机器学习中经常会碰到一些高维的数据集,而在高维数据情形下会出现数据样本稀疏,距离计算等困难,这类问题是所有机器学习方法共同面临的严重问题,称之为“ 维度灾难 ”。另外在高维特征中容易出现特征之间的线性相关,这也就意味着有的特征是冗余存在的。基于这些问题,降维思想就出现了。

降维方法有很多,而且分为线性降维和非线性降维,本篇文章主要讲解线性降维中的主成分分析法(PCA)降维。顾名思义,就是提取出数据中主要的成分,是一种数据压缩方法,常用于去除噪声、数据预处理,是机器学习中常见的降维方法。

PCA的本质就是找一些投影方向,使得数据在这些投影方向上的方差最大,而且这些投影方向是相互正交的。这其实就是找新的正交基的过程,计算原始数据在这些正交基上投影的方差,方差越大,就说明在对应正交基上包含了更多的信息量。可以证明原始数据协方差矩阵的特征值越大,对应的方差越大,在对应的特征向量上投影的信息量就越大。

PCA的全部工作简单点说,就是对原始的空间中顺序地找一组相互正交的坐标轴,第一个轴是使得方差最大的,第二个轴是在与第一个轴正交的平面中使得方差最大的,第三个轴是在与第1、2个轴正交的平面中方差最大的,这样假设在N维空间中,我们可以找到N个这样的坐标轴,我们取前r个去近似这个空间,这样就从一个N维的空间压缩到r维的空间了,但是我们选择的r个坐标轴能够使得空间的压缩使得数据的损失最小。

因此,关键点就在于:如何找到新的投影方向使得原始数据的“信息量”损失最少?

样本的“信息量”指的是样本在特征方向上投影的方差。方差越大,则样本在该特征上的差异就越大,因此该特征就越重要。在分类问题里,样本的方差越大,越容易将不同类别的样本区分开。

1503464-20190806211455943-157860966.png

如上图中共有3个类别的数据,很显然,方差越大,越容易分开不同类别的点。样本在X轴上的投影方差较大,在Y轴的投影方差较小。方差最大的方向应该是中间斜向上的方向(图中红线方向)。如果将样本按照中间斜向上的方向进行映射,则只要一维的数据就可以对其进行分类,相比二维的原数据,就相当降了一维。

在原始数据更多维的情况下,先得到一个数据变换后方差最大的方向,然后选择与第一个方向正交的方向,该方向是方差次大的方向,如此下去,直到变换出与原特征个数相同的新特征或者变换出前N个特征(在这前N个特征包含了数据的绝大部分信息)。

从参考文献中可以具体了解到前\(n\)个大特征值对应的特征向量,就是前n个主成分,而且主成分\(\xi_i\)对应的方差\(var(\xi_i)\)即等于协方差矩阵的特征值\(v\)。

在多数情况下,数据的不部分方差集中在较少的几个主成分上,因此,通常一般计算前\(k\)个主成分就可以了。前\(k\)个主成分所代表的\(n\)维原始数据全部方差的比例是
\[ \frac{\sum_{i=1}^k v_i}{\sum_{i=1}^n v_i} \]
通过方差的百分比来计算将数据降到多少维是比较合适的。

方差是用来描述一维数据的,而协方差可以用来描述多维数据,方差的定义如下:
\[ var(x) = \frac{\sum_{i=1}^n (x_i -\bar x)^2}{n-1} \]
相似的,两个变量的协方差定义如下:
\[ cov(x, y) = \frac{\sum_{i=1}^n (x_i -\bar x)(y_i - \bar y)}{n - 1} \]
式中分母是\(n-1\)而不是\(n\),是因为这样就能够使用样本的协方差的期望值去更好地逼近总体的协方差,即”无偏估计”。当变量多于两维时,就需要协方差矩阵了。协方差矩阵就是计算多个协方差,变量两两之间计算协方差,因为协方差具有”对称性”,即\(cov(x, y) = cov(y, x)\),所以对于一个\(n\)维的数据集的协方差矩阵,需要计算\(\frac{C^2_n}{2}\)次协方差,而且这个矩阵是对称的。假设数据是3维的,它的协方差矩阵如下:

\[ \sum = \begin{pmatrix} cov(x, x) & cov(x, y) & cov(x, z) \\ … & cov(y ,y) & cov(y, z) \\ … & … & cov(z, z) \\ \end{pmatrix} \]

总之,PCA就是用一个超平面对所有样本进行恰当的表达,这个超平面的维度小于原始维度,所以总是不可避免的会丢失一些信息,所以这也是PCA的缺点。该超平面应该具有以下性质:

  • 最近重构性:样本点到这个超平面的距离都足够近;
  • 最大可分性:样本点在这个超平面上的投影能尽量分开。

这两种性质能够得到等价推导。

计算过程

算法步骤:

  1. 设有m条n维数据。
  2. 将原始数据按列组成n行m列矩阵X
  3. 将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值
  4. 求出协方差矩阵
  5. 求出协方差矩阵的特征值及对应的特征向量
  6. 将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P
  7. 即为降维到k维后的数据

PCA计算举例

使用Demo

  1. from sklearn.decomposition import PCA import numpy as np from sklearn.preprocessing import StandardScaler x = np.array([[10001, 2, 55], [16020, 4, 11], [12008, 6, 33], [13131, 8, 22]]) # 标准化,可取消 X_scaler = StandardScaler() x = X_scaler.fit_transform(x) print(x, "\n") # PCA pca = PCA(n_components=0.9) # 保证降维后的数据保持90%的信息 pca.fit(x) print(pca.transform(x)) """ 输出: [ 1.48440157 -0.4472136 -1.18321596] [-0.35938143 0.4472136 0.16903085] [ 0.15671236 1.34164079 -0.50709255]] [[ 2.36863319 0.38298087] [-1.50952734 1.23481789] [ 0.14360068 -0.58040917] [-1.00270653 -1.03738959]] """

PCA方法参数n_components,如果设置为整数\(x\),则表示将数据降至\(x\)维,如果是小数,则表明降维后保留的信息量比例。

参考链接

PCA 降维及python 实现
python 主成分分析(PCA)降维
PCA 数学原理
PCA 计算举例

转载于:https://www.cnblogs.com/zhhfan/p/11311895.html

发表评论

表情:
评论列表 (有 0 条评论,171人围观)

还没有评论,来说两句吧...

相关阅读

    相关 补:PCA

    结合网上的资料,细看了两种求解PCA的方式。当进行协方差矩阵上求解特征值时,若矩阵的维数较小,则可以使用传统的求解方式,直接求出协方差矩阵的所有特征值和对应的特征向量。但是如果

    相关 笔记:PCA

    作为一个非监督学习的降维方法,PCA(Principal Components Analysis)顾名思义,就是找出数据里最主要的方面,用数据里最主要的方面来代替原始数据。具体

    相关 ,PCA,SVD

    降维 > 机器学习的算法的计算量往往伴随着维度\\(d\\)的增长呈现指数型增长,例如线性感知机的VC维是\\(d+1\\) > > 去除无用的维度,保留有用的特征可以

    相关 PCA

    概念 在机器学习中经常会碰到一些高维的数据集,而在高维数据情形下会出现数据样本稀疏,距离计算等困难,这类问题是所有机器学习方法共同面临的严重问题,称之为“ 维度灾难 ”。

    相关 PCA原理

    PCA最重要的降维方法之一,在数据压缩消除冗余和数据噪音消除等领域都有广泛的应用,一般我们提到降维最容易想到的算法就是PCA,目标是基于方差提取最有价值的信息,属于无监督问题。

    相关 PCA分析

    这里写目录标题 PCA降维的优化目标为: 关于为什么对协方差矩阵求特征值和特征向量可以实现各个变量两两间协方差为0,而变量方差尽可能大 > 参考博客:htt

    相关 PCA简介

    PCA全称为principal component analysis,即主成成分分析,用于降维。对数据进行降维有很多原因。比如: 1:使得数据更易显示,更易懂 2:降低