跟我一起学scikit-learn21:PCA算法

PCA算法全称是Principal Component Analysis,即主成分分析算法。它是一种维数约减(Dimensionality Reduction)算法,即把高维度数据在损失最小的情况下转换为低维度数据的算法。显然,PCA可以用来对数据进行压缩,可以在可控的失真范围内提高运算速度。

1.PCA算法原理

我们先从最简单的情况谈起。假设需要把一个二维数据降维成一维数据,要怎么做呢?如下图所示。
figure10_1.png

我们可以想办法找出一个向量 u ( 1 ) u^{(1)} u(1),以便让二维数据的点(方形点)到这个向量所在的直线上的平均距离最短,即投射误差最小。

这样就可以在失真最小的情况下,把二维数据转换为向量 u ( 1 ) u^{(1)} u(1)所在直线上的一维数据。再进一步,假设需要把三维数据降为二维数据时,我们需要找出两个向量 u ( 1 ) u^{(1)} u(1) u ( 2 ) u^{(2)} u(2),以便让三维数据的点在这两个向量决定的平面上的投射误差最小。

如果从数学角度来一般地描述PCA算法就是:当需要从n维数据降为k维数据时,需要找出k个向量 u ( 1 ) u^{(1)} u(1) u ( 2 ) u^{(2)} u(2),……, u ( k ) u^{(k)} u(k),把n维的数据投射到这k个向量决定的线性空间里,最终使投射误差最小化的过程。

思考:什么情况下,进行PCA运算时误差为0?在上图中,当这些二维数据在同一条直线上时,进行PCA运算后,误差为0。

问题来了,怎样找出投射误差最小的k个向量呢?要完整的用数学公式推导这个方法,涉及较多高级线性代数的知识,这里不再详述。感兴趣的话可以参考后面扩展部分的内容。下面我们直接介绍PCA算法求解的一般步骤。

假设有一个数据集,用m x n维的矩阵A表示。矩阵中每一行表示一个样本,每一列表示一个特征,总共有m个样本,每个样本有n个特征。我们的目标是减少特征个数,保留最重要的k个特征。

1.数据归一化和缩放

数据归一化和缩放是一种数学技巧,旨在提高PCA运算时的效率。数据归一化的目标是使特征的均值为0。数据归一化公式为:
x j ( i ) = a j ( i ) − μ j x_j^{(i)}=a_j^{(i)}-\mu_j xj(i)=aj(i)μj

其中, a j ( i ) a_j^{(i)} aj(i)是指第i个样本的第j个特征的值, μ j \mu_j μj表示的是第j个特征的均值。当不同的特征值不在同一个数量级上的时候,还需要对数据进行缩放。数据归一化在缩放的公式为:
x j ( i ) = a j ( i ) − μ j s j x_j^{(i)}=\frac{a_j^{(i)}-\mu_j}{s_j} xj(i)=sjaj(i)μj

其中, a j ( i ) a_j^{(i)} aj(i)是指第i个样本的第j个特征的值, μ j \mu_j μj表示的是第j个特征的均值, s j s_j sj表示第j个特征的范围,即 s j = m a x ( a j ( i ) ) − m i n ( a j ( i ) ) s_j=max(a_j^{(i)})-min(a_j^{(i)}) sj=max(aj(i))min(aj(i))

2.计算协方差矩阵的特征向量

针对预处理后的矩阵X,先计算其协方差矩阵(Covariance Matrix):
Σ = 1 m X T X \Sigma=\frac{1}{m}X^TX Σ=m1XTX

其中, Σ \Sigma Σ表示协方差矩阵,用大写的Sigma表示,是一个n * n维的矩阵。

接着通过奇异值分解来计算协方差矩阵的特征向量:
[ U , S , V ] = s v d ( Σ ) [U,S,V]=svd(\Sigma) [U,S,V]=svd(Σ)

其中,svd是奇异值分解(Singular Value Decomposition)运算,是高级线性代数的内容。经过奇异值分解后,有3个返回值,其中矩阵U是一个n * n的矩阵,如果我们选择U的列作为向量,那么我们将得到n个列向量 u ( 1 ) u^{(1)} u(1) u ( 2 ) u^{(2)} u(2),……, u ( n ) u^{(n)} u(n),这些向量就是协方差矩阵的特征向量。它表示的物理意义是,协方差矩阵 Σ \Sigma Σ可以由这些特征向量进行线性组合得到。

3.数据降维和恢复

得到特征矩阵后,就可以对数据进行降维处理了。假设降维前的值是 x ( i ) x^{(i)} x(i),降维后是 z ( i ) z^{(i)} z(i),那么
z ( i ) = U r e d u c e T x ( i ) z^{(i)}=U_{reduce}^{T}x^{(i)}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值