PCA(Principal Component Analysis)

PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。

PCA算法是如何实现的?

简单来说,就是将数据从原始的空间中转换到新的特征空间中,例如原始的空间是三维的(x,y,z),x、y、z分别是原始空间的三个基,我们可以通过某种方法,用新的坐标系(a,b,c)来表示原始的数据,那么a、b、c就是新的基,它们组成新的特征空间。在新的特征空间中,可能所有的数据在c上的投影都接近于0,即可以忽略,那么我们就可以直接用(a,b)来表示数据,这样数据就从三维的 (x,y,z) 降到了二维的(a,b)。

问题是如何求新的基(a,b,c)?

一般步骤是这样的:先对原始数据零均值化,然后求协方差矩阵,接着对协方差矩阵求特征向量和特征值,这些特征向量组成了新的特征空间。具体的细节,推荐Andrew Ng的网页教程:Ufldl 主成分分析 ,写得很详细。

PCA本质上是将方差最大的方向作为主要特征,并且在各个正交方向上将数据“离相关”,也就是让它们在不同正交方向上没有相关性。

python算法实现

零均值化(特征中心化)

假如原始数据集为矩阵data_matdata_mat中每一行代表一个样本,每一列代表同一个特征。零均值化就是求每一列的平均值,然后该列上的所有数都减去这个均值。也就是说,这里零均值化是对每一个特征而言的,零均值化都,每个特征的均值变成0。实现代码如下:

def zero_mean(data_mat):
    mean_val = np.mean(data_mat,axis=0)     #按列求均值,即求各个特征的均值
    data = data_mat-mean_val
    return data, mean_val

函数中用numpy中的mean方法来求均值,axis=0表示按列求均值。
该函数返回两个变量,data是零均值化后的数据,mean_val是每个特征的均值,是给后面重构数据用的。

求协方差矩阵

data, mean_val = zero_mean(data_mat)
cov_mat = np.cov(data,rowvar=False)

numpy中的cov函数用于求协方差矩阵,cov_mat即所求的协方差矩阵。

求特征值、特征向量

调用numpy中的线性代数模块linalg中的eig函数,可以直接由cov_mat求得特征值和特征向量:

eig_vals, eig_vects=np.linalg.eig(np.mat(cov_mat))

eig_vals存放特征值,行向量。
eig_vects存放特征向量,每一列带别一个特征向量。
特征值和特征向量是一一对应的

保留主要的成分[即保留值比较大的前n个特征]

第三步得到了特征值向量eig_vals,假设里面有m个特征值,我们可以对其排序,排在前面的n个特征值所对应的特征向量就是我们要保留的,它们组成了新的特征空间的一组基n_eig_vect。将零均值化后的数据乘以n_eig_vect就可以得到降维后的数据。代码如下:

eig_val_indice = np.argsort(eig_vals)            # 对特征值从小到大排序

n_eig_val_indice = eig_val_indice[-1:-(n_components+1):-1]        #最大的n_components个特征值的下标

n_eig_vect = eig_vects[:,n_eig_val_indice]        #最大的n个特征值对应的特征向量

lowD_data_mat = data * n_eig_vect                 # 低维特征空间的数据

recon_mat =(lowD_data_mat * n_eig_vect.T) + mean_val  #重构数据

选择主成分个数

文章写到这里还没有完,应用PCA的时候,对于一个1000维的数据,我们怎么知道要降到几维的数据才是合理的?即n要取多少,才能保留最多信息同时去除最多的噪声?一般,我们是通过方差百分比来确定n的,这一点在Ufldl教程中说得很清楚,并且有一条简单的公式,下面是该公式的截图:

一般而言,设 x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值