机器学习笔记:主成分分析

本文介绍了机器学习中的降维技术,重点讲解了主成分分析(PCA)。PCA通过对数据进行坐标轴变换,保留方差最大的方向,实现数据降维,常用于去除噪声和不重要的特征。文中还提及因子分析和独立成分分析,但指出PCA在实际应用中最为广泛,并给出了PCA在马的疝气病数据上的应用案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

机器学习:主成分分析


1 简介

  降维是对数据高维度特征的一种预处理方法。降维是将高维度的数据保留下最重要的一些特征,去除噪声和不重要的特征,从而实现提升数据处理速度的目的。在实际的生产和应用中,降维在一定的信息损失范围内,可以为我们节省大量的时间和成本。降维也成为了应用非常广泛的数据预处理方法。
   降维具有如下一些优点:

(1)使得数据集更易使用
(2)降低算法的计算开销
(3)去除噪声
(4)使得结果容易理解

2 降维技术

  这里介绍三种降维方法,分别是主成分分析,因子分析和独立成分分析。
  1.主成分分析法( PrincipalComponentAnalysis, P C A )。在 PCA中,数据从原来的坐标系转换到了新的坐标系,新坐标系的选择是由数据本身决定的。第一个新坐标轴选择的是原始数据中方差最大的方向,第二个新坐标轴的选择和第一个坐标轴正交且具有最大方差的方向。该过程一直重复,重复次数为原始数据中特征的数目。我们会发现,大部分方差都包含在最前面的几个新坐标轴中。因此,我们可以忽略余下的坐标轴,即对数据进行了降维处理。

  2.因子分析(Factor Analysis)。在因子分析中,我们假设在观察数据的生成中有一 些观察不到的隐变量(latent variable)。假设观察数据是这些隐变量和某些噪声的线性组合。那么隐变量的数据可能比观察数据的数目少,也就是说通过找到隐变量就可以实现数据的降维。

  3.独立成分分析(Independent Component Analysis, ICA)。ICA假设数据是从N个数据源生成的,这一点和因子分析有些类似。假设数据为多个数据源的混合观察结果,这些数据源之间在统计上是相互独立的,而在PCA中只假设数据是不相关的。同因子分析一样,如果数据源的数目少于观察数据的数目,则可以实现降维过程。

  在上述三种降维技术中,PCA的应用最为广泛,这里我们着重介绍PCA。


3 PCA

  前面已经提到,PCA通过寻找当前方差最大的方向来确定当前坐标轴的方向,下面给出实际操作的步骤:

去除平均值
计算协方差矩阵
计算协方差矩阵的特征值和特征向量
将特征值从大到小排序
保留最上面的前N个特征向量
将数据转换到上述N个特征向量构建的新空间中

  代码实现如下:

def pca(dataMat, topNfeat=9999999):           #如果没有第二个参数,就返回所有新的维度
    meanVals = mean(dataMat, axis=0)
    meanRemoved = dataMat - meanVals #remove mean
    covMat = cov(meanRemoved, rowvar=0)
    eigVals,eigVects = linalg.eig(mat(covMat))
    eigValInd = argsort(eigVals)              #排序
    eigValInd = eigValInd[:-(topNfeat+1):-1]  #去除多余成分
    redEigVects = eigVects[:,eigValInd]       #逆序
    lowDDataMat = meanRemoved * redEigVects   #把数据转换到新的维度
    reconMat = (lowDDataMat * redEigVects.T) + meanVals
    return lowDDataMat, reconMat

4 应用

  这次我把PCA应用到了之前的马的疝气病的数据上,这组数据有21个属性,在实际问题中这其实并不算多,但我们可以通过对这组数据的主成分分析得到一些启发。
  应用了PCA后,我得到了下面的结果:

降维后的各主成分的方差值:

各成分方差值所占比重:

转化成图表:


  PCA出色的完成了任务,原本数据中有21个属性,处理后数据的维度明显下降。可以看到,主成分分析得到的前6个选项就占据了绝大多数比重,余下的部分占比及其细小。实际上,前6个成分已经达到了的百分比,剩下的成分不过是在填补那不到的空缺而已,某种程度上讲他们是可以忽略的。
  这里要提到一点的是,PCA是一种有效的降维手段,但他可能会损失原始数据的一些信息,就像我们这里的后面那些成分,虽然他们占比微小,但不能说他们不包含有用的信息,只是在总体面前不太显著罢了。
  当然,PCA在实际应用中的确是一种强有力的手段,我们这里的数据只有21个属性,数据条目也只有100项,就算不进行PCA,处理起来仍不困难,但如果这组数据有上百个甚至更多的属性呢?如果实际数据有上百万条呢?真正遇到大数据的情况时,计算能力和时间成本也会成为我们考虑的因素,这时,为了解决问题而牺牲一些正确率,这完全是可以接受的。


5 总结

  (1)降维是一种数据集预处理技术,往往在数据应用在其他算法之前使用,它可以去除掉数据的一些冗余信息和噪声,使数据变得更加简单高效,提高其他机器学习任务的计算效率。
  (2)pca可以从数据中识别主要特征,通过将数据坐标轴旋转到数据角度上那些最重要的方向(方差最大);然后通过特征值分析,确定出需要保留的主成分个数,舍弃其他主成分,从而实现数据的降维


woreked by zzzzzr

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值