机器学习算法-PCA降维技术

机器学习算法-PCA降维

一、引言

在实际的数据分析问题中我们遇到的问题通常有较高维数的特征,在进行实际的数据分析的时候,我们并不会将所有的特征都用于算法的训练,而是挑选出我们认为可能对目标有影响的特征。比如在泰坦尼克号乘员生存预测的问题中我们会将姓名作为无用信息进行处理,这是我们可以从直观上比较好理解的。但是有些特征之间可能存在强相关关系,比如研究一个地区的发展状况,我们可能会选择该地区的GDP和人均消费水平这两个特征作为一个衡量指标。显然这两者之间是存在较强的相关关系,他们描述的都是该地区的经济状况,我们是否能够将他们转成一个特征呢?这样就能达到降低特征维度的特征,同时也能够避免因特征过多而产生的过拟合问题。

二、PCA降维技术

用于给数据降低维度的方法大致有三种,主成分分析法、因子分析法、独立成分分析法。由于主成分分析法在三者之中使用的比较多,这里我们只对主成分分析进行深入探讨。

2.1  PCA算法思想

在主成分分析中,通过坐标变化将原来的坐标系转化到新的坐标系。新坐标的坐标轴的选择是与原始数据有关的,第一个坐标轴选择的是原始数据中方差最大的方向,第二个坐标轴的选择和第一个坐标正交且具有最大方差,这样一直重复,直到坐标维数与数据的特征维数相同。可以发现,大部分的方差都包含在前面的几个新的坐标轴中。因此可以忽略余下的坐标轴,这样就对数据进行了一个降维。

2.2 PCA算法的计算方法

首先我们来介绍一些PCA的计算方法,在这之后我们将从数学上来对PCA算法进行分析。

PCA的计算过程如下:

Ste1:去除每维特征的均值,目的是将数据的中心移动到原点上。

Ste2:计算协方差矩阵。

Ste3:计算协方差矩阵的特征值和特征向量。

Ste4:将特征值从大到小序,找出其中最上面的N个特征向量。

Step5:将原始数据转换到上述N个特征向量构建的新的空间中去。

通过以上5个步骤,我们就能将原始数据降低到我们想要达到的维度。主成分分析的主要思想是基于方差最大、维度最小理论,因此我们可以通过计算累计贡献率来来确定N的值的大小。定义贡献率如下:

其中λ(i)表示的为第i个维度对应的特征值。我们可以设置适当的阈值,一般为0.8,如果前N个特征值的贡献率之和达到该阈值,我们就可以认为N维代表了原始数据的主要信息。

2.3 PCA技术的数学原理

在上一节中我们已经讨论了PCA的计算方法,下面我们将讨论为什么要这计算。在信号处理中认为信号具有较大的方差,而噪声具有较小的方差。信噪比表示的是信号方差与噪声方差之比。信噪比越高则表数据越好。通过坐标变换,我们可以计算在新坐标下每一个维度的方差,如果变换后某一个坐标轴上的方差很小我们就可以认为该维特征是噪声及干扰特征。因此坐标变换最好的方式就是

将变换之后N维特征的每一维方差都很大。

图1

如图1所示蓝色加粗线条表示坐标变化之后的某个维度,表示经过去除平均值之后的数据的第i个样本,u是该维度的方向向量,表示的是在该维度上到原点的距离。现在我们要做的就是找出u使得数据在该维度上投影的方差之和最大。由于经过去除平均值处理之后的平均值为0,容易证明它们在任何方向上的投影的平均值也为0.因此在u方向的方差之后为:

上式中的中间部分正好表示的就是样本特征的协方差矩阵如果用λ表示var,用表示,那么上式就能够表示成为。根据特征值的的定义,λ就是的一特征值,u就是特征向量。最佳的投影直线是特征值λ最大时对应的特征向量,依次类推。也就是说特征值的大小等价于归一化之后数据的的方差大小。因此我们只需要对协方差矩阵进行特征值分解,得到前N个特征值对应的特征向量,并且这N维新的特征是正交的。因此可以通过以下计算方式将n维原数据转化为新的N维数据:

通过选取最大的前N维使得他们累计贡献率达到一定值,我们就能抛弃掉方差较小的特征,实现降维的目的。

2.4 PCA技术的python实现

定义函数PCA如下:

def pca(dataMat, minRation):
    meanVals = mean(dataMat, axis=0)
    meanRemoved = dataMat - meanVals #去除平均值
    covMat = cov(meanRemoved,rowvar=0)#计算协方差矩阵
    eigVals,eigVects = linalg.eig(mat(covMat))#计算特征值特征向量
    eigValInd=argsort(-eigVals)#从小大到排序
    ratio=0
    topNfeat=1
    for i in range(len(eigVals)):
        index=eigValInd[i]
        ratio=ratio+eigVals[index]#计算累计贡献率
        topNfeat=i+1
        if ratio>minRation:break
    eigValInd=eigValInd[1:topNfeat+1]
    redEigVects=eigVects[:,eigValInd]
    lowDDataMat = meanRemoved * redEigVects#将数据转化到新的维度空间
    return topNfeat lowDDataMat

该函数输入为一个原始矩阵,和累计贡献率的阈值。首先去除平均值,然后利用numy库提供的cov()函数计算去除平均值之后的数据的协方差矩阵。再通过linalg.eig()函数计算该协方差矩阵的特征值和特征向量。通过argsort函数对(-eigVals)进行排序,相当于对eigVals进行逆序排序,返回排序后的索引值。其中的循环是用来计算新空间下的维数,lowData是变换到新空间下的数据。最终该函数输出为变换后的数据,以及该空间的维数topNfeat。

三、PCA技术的应用

3.1 问题描述

延续之前的回声探测的问题,即从60个不同的方向对岩石进行测试,根据回声的结果来探测的物体是岩壁还是矿井。该数据集共有208个数据,每个数据的维度为60.

3.2 PCA降维处理

我们已经在adabost使用过这个例子,这次我们对进行PCA降维之后的数据再次用adabost算法,计算测试的准确率。测试的准确率及运行时间如下表。


累计贡献率阈值p


处理后的维数N


测试的平均准确率r


程序平均时间t


0.80


7


0.27


1.44


0.85


9


0.26


1.84


0.90


12


0.28


2.40


0.95


17


0.30


3.01


0.98


24


0.21


5.1


1.00


60


0.28


5.70

  结果发现如果把累计贡献率设置为0.9则新的空间下的维度为19维,大大降低了数据的维度。而在相同的数据集上,降维之后算法的准确率几乎没有变化。这表明降维对于数据的处理是一种有效的手段。

四、总结

  本文从方差理论的角度对CA降维技术的原理进行了分析,然后通过与之前Adaboost算法结合比较在降维前后算法准确率的变化。在本例中,数据集经降维处理之后在数据集上的准确率变化不大,但是时间却大大缩短了。当然,在其的数据上我也做过一些实验,发现有些数据算法效率能够显著提升,而有些则不能。因此降维技术并不是万能的,而是需要根据实际数据集进行分析是否适合使用。

原文地址:https://www.cnblogs.com/xfydjy/p/9291119.html

时间: 2024-10-11 01:17:16

机器学习算法-PCA降维技术的相关文章

[机器学习之13]降维技术——主成分分析PCA

始终贯彻数据分析的一个大问题就是对数据和结果的展示,我们都知道在低维度下数据处理比较方便,因而数据进行简化成为了一个重要的技术.对数据进行简化的原因: 1.使得数据集更易用使用.2.降低很多算法的计算开销.3.去除噪音.4.使得结果易懂 这里我们关心的数据降维技术为主成分分析(PCA).在PCA中,数据原来的坐标系转换成了新的坐标系,新的坐标系是由数据本身决定的.第一个新的坐标轴的选择是原始数据中方差最大的方向,第二个新的坐标轴的选择和第一个坐标轴正交且具有最大方差方向.这个过程一直重复,重复次

跟我学算法-PCA(降维)基本原理推导

Pca首先 1.对数据进行去均值 2.构造一个基本的协方差矩阵1/m(X)*X^T 3对协方差矩阵进行变化,得到对角化矩阵,即对角化上有数值,其他位置上的数为0(协方差为0),即求特征值和特征向量的过程 4.求得特征向量的单位化矩阵,单位化特征向量矩阵*原始数据(去均值后的)即降维操作,单位化特征向量的维度决定了降维的维度 以下是实际推导过程 实例求解过程 原文地址:https://www.cnblogs.com/my-love-is-python/p/9784657.html

机器学习算法 - PCA理论分析

  主元分析(PCA)理论分析及应用 转载:http://www.360doc.com/content/10/0318/20/1024901_19297267.shtml

【机器学习算法-python实现】PCA 主成分分析、降维

1.背景 PCA(Principal Component Analysis),PAC的作用主要是降低数据集的维度,然后挑选出主要的特征. PCA的主要思想是移动坐标轴,找到方差最大的方向上的特征值,什么叫方差最大的方向的特征值呢.就像下图中的曲线B,一样,它的覆盖范围最广. 基本步骤:(1)首先计算数据集的协方差矩阵 (2)计算协方差矩阵的特征值和特征向量 (3)保留最重要的n个特征 what is 协方差矩阵: 定义是变量向量减去均值向量,然后乘以变量向量减去均值向量的转置再求均值.例如x是变

机器学习笔记----四大降维方法之PCA(内带python及matlab实现)

大家看了之后,可以点一波关注或者推荐一下,以后我也会尽心尽力地写出好的文章和大家分享. 本文先导:在我们平时看NBA的时候,可能我们只关心球员是否能把球打进,而不太关心这个球的颜色,品牌,只要有3D效果,看到球员扣篮的动作就可以了,比如下图: 如果我们直接对篮球照片进行几百万像素的处理,会有几千维甚至几万维的数据要计算,计算量很大.而往往我们只需要大概勾勒出篮球的大概形状就可以描述问题,所以必须对此类数据降维,这样会使处理数据更加轻松.这个在人脸识别中必须要降维,因为我们在做特征提取的时候几万维

数据降维技术(1)—PCA的数据原理

PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维.网上关于PCA的文章有很多,但是大多数只描述了PCA的分析过程,而没有讲述其中的原理.这篇文章的目的是介绍PCA的基本数学原理,帮助读者了解PCA的工作机制是什么. 当然我并不打算把文章写成纯数学文章,而是希望用直观和易懂的方式叙述PCA的数学原理,所以整个文章不会引入严格的数学推导.希望读者在

ML: 降维算法-PCA

        PCA (Principal Component Analysis) 主成份分析 也称为卡尔胡宁-勒夫变换(Karhunen-Loeve Transform),是一种用于探索高维数据结构的技术.PCA通常用于高维数据集的探索与可视化.还可以用于数据压缩,数据预处理等.PCA可以把可能具有相关性的高维变量合成线性无关的低维变量,称为主成分( principal components).新的低维数据集会尽可能的保留原始数据的变量.PCA将数据投射到一个低维子空间实现降维.例如,二维数

降维技术---PCA

数据计算和结果展示一直是数据挖掘领域的难点,一般情况下,数据都拥有超过三维,维数越多,处理上就越吃力.所以,采用降维技术对数据今夕简化一直是数据挖掘工作者感兴趣的方向. 对数据进行简化的好处:使得数据集更易于使用,降低很多算法的计算开销,去除噪声,使得结果易懂. 主成分分析法(PCA)是一种常用的降维技术.在PCA中,数据从原来的坐标系转换到了新的坐标系,新坐标系的选择是由数据本身决定的.第一个新坐标轴选择的是原始数据中方差最大的方向,第二个新坐标轴的选择和第一个坐标轴正交且具有最大方差的方向.

PCA 降维算法详解 以及代码示例

转载地址:http://blog.csdn.net/watkinsong/article/details/38536463 1. 前言 PCA : principal component analysis ( 主成分分析) 最近发现我的一篇关于PCA算法总结以及个人理解的博客的访问量比较高, 刚好目前又重新学习了一下PCA (主成分分析) 降维算法, 所以打算把目前掌握的做个全面的整理总结, 能够对有需要的人有帮助. 自己再看自己写的那个关于PCA的博客, 发现还是比较混乱的, 希望这里能过做好