PCA主成分分析

1、解决什么问题?

用于提取矩阵中的最主要成分,剔除冗余数据,同时降低数据纬度。现实世界中的数据可能是多种因数叠加的结果,如果这些因数是线性叠加,PCA就可以通过线性转化,还原这种叠加,找到最原始的数据源

 例子:

  • 拿到一个汽车的样本,里面既有以“千米/每小时”度量的最大速度特征,也有“英里/小时”的最大速度特征,显然这两个特征有一个多余。

  • 拿到一个数学系的本科生期末考试成绩单,里面有三列,一列是对数学的兴趣程度,一列是复习时间,还有一列是考试成绩。我们知道要学好数学,需要有浓厚的兴趣,所以第二项与第一项强相关,第三项和第二项也是强相关。那是不是可以合并第一项和第二项呢?

  • 拿到一个样本,特征非常多,而样例特别少,这样用回归去直接拟合非常困难,容易过度拟合。比如北京的房价:假设房子的特征是(大小、位置、朝向、是否学区房、建造年代、是否二手、层数、所在层数),搞了这么多特征,结果只有不到十个房子的样例。要拟合房子特征->房价的这么多特征,就会造成过度拟合。

  • 假设在IR中我们建立的文档-词项矩阵中,有两个词项为“learn”和“study”,在传统的向量空间模型中,认为两者独立。然而从语义的角度来讲,两者是相似的,而且两者出现频率也类似,是不是可以合成为一个特征呢?

  • 在信号传输过程中,由于信道不是理想的,信道另一端收到的信号会有噪音扰动,那么怎么滤去这些噪音呢?

 

2、PCA的数学原理?(最大方差理论、最小平方误差理论

为矩阵X(X的列向量是一条记录,行向量是一个feature)找到一个线性转换矩阵P,使其转换为矩阵Y,且使得Y的协方差矩阵具有如下特点:

1)对角线元素从左上角到右下角降序排列

2)非对角线元素全部为0

*为什么要满足这些条件?

对角线上的元素是Y的行向量(某种特征的所有数据)的方差,非对角线上的元素是协方差。方差越大,表示保留的信息越多越重要;协方差越小,表示相关性越低,冗余性越小。


3、PCA的前提假设?

  • 变量符合高斯分布(正太分布)

  • 变量之间的影响是线性的,也就是可以通过线性变化将数据还原成主要因数

  • 协方差最大的元素对应的转换向量越重要

  • 转换矩阵是正交的

*怎么作高斯分布检验?对于矩阵X,其中的变量(xij)符合高斯分布。


4、PCA的使用建议

  • 压缩数据,主成份一般在90%,95%和99%几档,根据实际需要选取

  • 加速模型建模,缩短时间(PCA处理后,建模,需要保留转换向量P,并用P处理预测数据)

  • 可视化,如果前两个或三个数据可以表示90%以上的成分,那么可以进行可视化

  • PCA处理数据之前需要去报每个列的均值为0(mean      normalization),同时需要确保量纲相同(scaling),否则数值较大的几个变量会占据主要成分。

  • 不要将PCA作为解决过拟合的方法,虽然使用PCA后,确实可以减少过拟合,但是原因可能是feature减少了。采用regulations缓解过拟合。

  • 设计ML系统时,不要一开始就期望使用PCA,提高模型性能。只有当所有非PCA方法无法达到效果时,在使用PCA。PCA处理数据时没有考虑到y,会损失部分有价值信息。


5、PCA求解过程与代码实例

求解过程:

(1)首先计算数据集的协方差矩阵

(2)计算协方差矩阵的特征值和特征向量

(3)保留最重要的n个特征

(4)计算新的矩阵

# -*- coding:utf-8 -*-
import numpy as np

# 随机生成50个数据(行),每个数据有4个特征(列),作为原始数据
dataMat = np.random.random((50,4))

# 沿着特征(列)方向计算特征均值
meanVals = np.mean(dataMat, axis=0)

# 原始数据减去特征均值
meanRemoved = dataMat - meanVals

# 用标准差归一化
stded = meanRemoved / std(dataMat)

# 计算协方差方阵
covMat = cov(stded, rowvar=0)

# 求特征值和特征向量
eigVals, eigVects = linalg.eig(mat(covMat)) 

# 对特征值进行排序,保留特征值最大的topNfeat个特征
eigValInd = argsort(eigVals) 
eigValInd = eigValInd[:-(topNfeat + 1):-1]

# 除去不需要的特征向量
redEigVects = eigVects[:, eigValInd]

# 求新的数据矩阵
lowDDataMat = stded * redEigVects



转载于:https://my.oschina.net/u/2318847/blog/422593

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值