主成分分析PCA在R及Python中

大数据文摘作品,转载要求见文末

编译团队

李小帅,姚佳灵

有太多不如没有!如果一个数据集有太多变量,会怎么样?这里有些可能的情况你也许会碰上——

1.你发现大部分变量是相关的。2.你失去耐心,决定在整个数据集上建模。这个模型返回很差的精度,于是你的感觉很糟糕。3.你变得优柔寡断,不知道该做什么。4.你开始思考一些策略方法来找出几个重要变量。

相信我,处理这样的情形不是像听上去那样难。统计技术,比如,因子分析,主成分分析有助于解决这样的困难。在本文中,我详细地解释了主成分分析的概念。我一直保持说明简要而详实。为了操作上的理解,我也演示了在R使用这个技术并带有解释。

注意:

要理解本文的内容,需要有统计学的知识。

什么是主成分分析?

简而言之,主成分分析是一种从一个数据集的一大组可用变量中提取重要变量的方法。它从高维度数据集中提取出低维度特征变量集合,并尽可能多地捕捉到信息。变量越少,数据可视化也变得更有意义。处理3维或者更高维度的数据集时,主成分分析方法更有效。

它总是在一个对称相关或协方差矩阵上施行。这意味着矩阵应该是数值型的,并且有着标准化的数据。

让我们通过一个例子来理解:

假设我们有一个(n)X50(p)维度的数据集。n代表着样本集数量,p代表着预测值的数目。由于我们有个很大的p值,p=50,因此,会有p(p-1)/2个散布图,也就是说,有可能超过个散布图需要分析变量间的关系。在这样的数据集中做探索分析是不是一件非常繁琐的事呀?

在这样的情况下,选取一个捕捉到尽可能多信息的预测值子集p(p50)是一个明晰的办法。接着在得到的低维度空间绘制观察结果。

下图显示了利用主成分分析从高维度(三维)数据到低维度(二维)数据的转换。请别忘了,每一个所得到的维度都是特征p的线性组合。

图片来源:nlpca

什么是主成分?

主成分是数据集中的初始预测值规范化后的线性组合。在上图中,PC1和PC2便是主成分。假设我们有一个预测值集合:X1,X2...,Xp

主成分可以写成:

Z1=Φ11X1+Φ21X2+Φ31X3+....+Φp1Xp

其中——

◇Z1是第一主成分

◇Φp1是构成第一主成分负载量(Φ1,Φ2…)的加载向量。该向量被限制成模长为1。这是因为加载向量的数值巨大的模也许会导致巨大的差异。它还定义了沿着数据变化最大的主成分(Z1)的方向。这样一来,它使得在P维度空间中存在一条最接近n样本集的直线。拟合的程度由欧式距离平方均值来衡量。

◇X1..Xp是规范化后的预测值。规范化后的预测值的均值为0、标准差为1。

因此,

第一主成分是在数据集中捕捉最大方差的初始预测变量的线性组合。它决定了数据中最高变异性的方向。在第一主成分中,捕捉到的变异性越大,成分捕捉到的信息就越多。没有比第一主成分有更高变异性的成分。

第一主成分形成一条最接近数据的直线,也就是说,它把数据点和该直线之间的距离平方和最小化了。

类似地,我们也能够计算第二主成分。

第二主成分(Z2)也是捕捉到数据集中剩余方差的线性组合,和第一主成分(Z1)不相关。换句话说,第一主成分与第二主成分间的相关系数为0。它可以表示成:

Z2=Φ12X1+Φ22X2+Φ32X3+....+Φp2Xp

如果两个成分是不相关的,那么两者应该是正交的(见下图)。下图是在模拟数据上用两个预测值绘制的。需要注意的是,主成分的方向,正如预期的那样,是正交的。这表明在这两个主成分之间的相关系数为0。

所有接下来的主成分都跟从着相似的概念,即它们捕捉前一个主成分剩余的变化,并与之不相关。一般而言,对于nxp维度的数据,能够构建最小的主成分向量为(n-1,p)。

这些主成分的方向是以无监督的方式确定的,也即响应变量(Y)不是用来决定主成分方向的。因此,这是以无监督的方式。

注意:偏最小二乘法(Partialleastsquare,简称PLS)是替代主成分分析的一种监督方法。偏最小二乘法分配较高的权重给与响应变量y具有强相关关系的变量,以此决定主成分。

为什么变量规范化是必须的?

主成分是由原始预测数据规范化后提供的。这是因为原始预测数据可能具有不同的范围尺度。例如,想象一下这么一个数据集,在该数据集中存在很多变量的度量单位:加仑、公里、光年等等。可以肯定的是在这些变量中的方差范围会很大。

在没有规范化的变量上执行主成分分析会导致带有高方差变量近乎疯狂的大量的负荷。反过来,这将导致一个主成分依赖于具有高方差的变量。这不是我们所希望的。

如下图所示,主成分分析在一个数据集上执行了两次(带有未缩放和缩放的预测值)。该数据集有大约40个变量,正如你所见,第一主成分由变量Item_MRP所主导。同时,第二主成分由变量Item_Weight主导。这种主导普遍存在是因为变量有相关的高方差。当变量被缩放后,我们便能够在二维空间中更好地表示变量。

在PythonR中应用

主成分分析方法

(带有代码注解)

要选多少主成分?我可以深入研究理论,但更好是用编程实战来回答这一问题。

作为演示示例,我将使用来自BIgMartPredictionChallenge上的数据。

请记住,主成分分析仅能应用于数值型数据,因此,如果数据集中存在分类变量,必须将其转换成数值型的。而且在应用这个技术前前,必须进行了基本的数据清理。让我们快点完成原始数据的加载和清理步骤:

#目录路径

path-".../Data/Big_Mart_Sales"

#设定工作目录

setwd(path)

#加载训练和测试文件

train-read.csv("train_Big.csv")

test-read.csv("test_Big.csv")

#增加一列

test$Item_Outlet_Sales-1

#合并数据集









































北京市中科医院
白癜风诊疗目标



转载请注明:http://www.92nongye.com/zyjs/204619823.html