艾巴生活网

您现在的位置是:主页>科技 >内容

科技

什么是PCA,何时应该使用PCA_PCA是如何工作的

2024-03-17 16:47:01科技帅气的蚂蚁
很多朋友对什么是PCA,何时应该使用PCA_PCA是如何工作的不是很了解,艾巴小编刚好整理了这方面的知识,今天就来带大家一探究竟。编者按:大

什么是PCA,何时应该使用PCA_PCA是如何工作的

很多朋友对什么是PCA,何时应该使用PCA_PCA是如何工作的不是很了解,艾巴小编刚好整理了这方面的知识,今天就来带大家一探究竟。

编者按:大会数据科学讲师Matt Brems讲解了主成分分析的原理、数学和最佳实践。在统计学经典教材《卡塞拉伯杰》(Casella Berger)的序言中,作者完美地解释了为什么选择编写这本教材:

有人发现你在编教材,会问以下两个问题。第一个是“你为什么要写一本书?”第二个是“你的书和现有的有什么不同?”第一个问题很容易回答。写一本书,因为你对现有的文本不完全满意。

主成分分析是统计学和数据科学中非常重要的技术.但是我在备课的时候发现网上的信息太专业了,不能完全满足我的需求,甚至提供了相互矛盾的信息。因此,我可以有把握地说,我对现有的案文不完全满意。

所以我要说的是PCA的3W1H:什么是PCA(什么),什么时候应用PCA(什么时候),PCA如何工作(如何),为什么PCA有效(为什么)。另外,我还会提供一些资源来深入讲解这个话题。我特别想呈现这种方法的原理,底层数学,一些最佳实践,以及潜在的缺陷。

虽然我想让PCA尽可能的平易近人,但是我们要讨论的算法还是挺有技术含量的。熟悉以下知识更容易理解本文和PCA方法:矩阵运算/线性代数(矩阵乘法、矩阵求逆、矩阵分解、特征向量/特征值)和统计学/机器学习(标准化、方差、协方差、独立性、线性回归、特征选择)。

在文章中,我添加了解释这些话题的链接,但这些链接(我希望)主要是作为复习以防遗忘,并不要求阅读。

什么是PCA?

假设你想预测美国今年的GDP。你有很多信息:2017年一季度美国GDP数据,去年GDP,前年GDP.你有所有的公共经济指标,比如失业率、通货膨胀率等等。你有2010年的人口普查数据,你可以估计每个行业有多少美国人工作,并在两次人口普查之间更新这些估计的美国社区调查数据。你知道两党在参议院和众议院有多少席位吗?

你可以收集股价、首次公开募股的数量,以及有多少首席执行官似乎已经对参与政治感兴趣。

TL;DR——有很多变量需要考虑。如果你之前处理过大量的变量,你就会知道这会带来问题。你了解所有变量之间的关系吗?你是否有太多的变量使得过度拟合的风险显著增加?或者违反建模策略的假设?

你可能会问,“我怎么能只专注于收集少量的变量呢?”用专业术语来说,你要“降低特征空间的维度”。通过降低特征空间的维度,你需要考虑的变量之间的关系没有那么多,过拟合的风险也没那么高。(注:这并不意味着我们不需要考虑合身等问题。——但是,我们的方向是正确的!)

不出意外,降低特征空间的维度称为“降维”。降维的方法有很多种,但大部分属于:特征消除,特征提取,顾名思义,特征消除是通过消除特征来降低特征空间的维数。在上面这个GDP的例子中,我们可以保留三个我们认为最能预测美国GDP的特征,舍弃其他所有特征,而不是考虑所有特征。特征消去法的优点是:简单,并且保持了变量的可解释性。

特征消去法的缺点是不能从丢弃的变量中获取信息。如果只用去年的GDP,制造业人口比例(根据最新的美国社区调查数据)和失业率来预测今年的GDP,我们将失去所有丢弃变量的信息,这些信息本可以对模型有所贡献。在消除特性的同时,我们也彻底消除了丢弃变量可能带来的任何好处。

特征提取不存在这个问题。假设我们有十个独立变量。在特征提取中,我们创建十个“新”自变量,每个自变量都是“旧”自变量的组合。然而,我们以特定的方式创建这些新的自变量,并根据它们预测因变量的能力对它们进行排序。

你可能会说,“降维在哪里?”好了,让我们保留我们需要的新的自变量,丢弃“最不重要的”因为我们根据新变量预测它的能力对因变量进行排序,我们知道哪个变量最重要,哪个变量最不重要。但是——的关键部分来了。因为这些新的自变量是旧变量的组合,所以我们仍然保留了旧变量中最有价值的部分,尽管我们已经丢弃了一个或几个“新”变量!

主成分分析(PCA)是一种特征提取技术。——以特定的方式组合输入变量,然后丢弃“最不重要”的变量,同时保留所有变量中最有价值的部分!这也带来了有益的副作用,PCA得到的所有“新”变量都是相互独立的。这是有益的,因为线性模型的假设要求自变量相互独立。如果我们用这些“新”变量来拟合一个线性回归模型(见后面的“主成分回归”),这个假设肯定会得到满足。

什么时候应该使用五氯苯甲醚?要不要减少变量的数量,却找不到可以完全去掉的变量?是否要确保变量相互独立?你能接受让自变量变得不那么容易解释吗?如果这三个问题的答案都是“是”,那么PCA就是一个非常合适的选择。如果第三个问题的答案是“否”,那么你就不应该使用PCA。PCA是如何工作的?下一节将讨论PCA为什么有效。在解释算法之前,我们先简单总结一下整个过程:

我们将计算一个总结变量互相关的矩阵。

然后我们把这个矩阵分成两部分:方向和大小。然后我们就可以知道数据的“方向”和它的“大小”(也就是每个方向有多重要)。下图显示了数据的两个主要方向:“红色方向”和“绿色方向”。在这种情况下,“红色方向”更为重要。

我们稍后会讨论为什么会这样,但是如果你看给定数据点的排列,你能看出为什么“红色方向”比“绿色方向”更重要吗?(提示:最符合这些数据的直线是什么样的?)

图片来源:setosa.io我们会沿着一个重要的方向(原始变量的组合)对原始数据进行变换。下图是转换后的数据,X轴和Y轴跟随“红色方向”和“绿色方向”。最符合这些数据的直线是什么样的?图片来源:setosa.io

虽然这里的可视化例子是二维的(所以我们有两个“方向”),但是我们可以想象数据有更多的维度。通过识别哪些方向是最重要的,我们可以通过丢弃最不重要的方向将数据压缩到更小的特征空间中。通过将数据投影到更小的特征空间,我们降低了特征空间的维度。但是因为数据是根据这些不同的“方向”进行转换的,所以我们确保模型保留了所有的原始变量。

接下来,我将详细解释推导PCA的算法。我尽量避免把这篇文章写得太专业,但是这里的细节不能忽略,所以我的目标是尽可能解释清楚。下一节将深入讨论为什么这个算法工作的直觉。在开始之前,将数据以表格形式排列,N行p 1列,其中一列对应因变量(通常表示为Y),P列对应自变量(这个自变量矩阵通常表示为X)。根据上一段的定义,把数据分为y和X——,我们主要处理x。

在自变量矩阵X的每一列上,从每个条目中减去该列的均值。(这确保每列的均值为0.)

决定是否标准化。给定X的列,是否高方差的特征比低方差的特征更重要?(这里重要指特征能更好地预测Y。)如果特征的重要性独立于特征的方差,那么将列中的每项观测除以该列的标准差。(结合第二步、第三步,我们将X的每列标准化了,确保每列的均值为零,标准差为1.)所得矩阵称为Z。

转置矩阵Z,将转置矩阵和原矩阵相乘。(数学上写为ZTZ.)所得矩阵为Z的协方差矩阵(无视常数差异)。

(这大概是最难的一步——跟紧了。)计算ZTZ的本征向量和相应的本征值。在大多数计算软件包下,这都很容易做到——事实上,ZTZ的本征分解为将ZTZ分解为PDP-1,其中P为本征向量矩阵,D为对角线为本征值、其余值均为零的对角矩阵。D的对角线上的本征值对应P中相应的列——也就是说,D对角线上的第一个元素是1,相应的本征向量是P的第一列。

我们总是能够计算出这样的PDP-1。(奖励:致对此感兴趣的读者,我们之所以总是能够计算出这样的PDP-1是因为ZTZ是一个对称正定矩阵。)

将本征值1,2…,p由大到小排列。并据此排列P中相应的本征向量。(例如,如果2是最大的本征值,那么就将P的第二列排到第一。)取决于计算软件包,这可能可以自动完成。我们将这一经过排序的本征向量矩阵记为P*。(P*的列数应当与P相同,只不过顺序可能不同。)注意这些本征向量相互独立。

计算Z*=ZP*。这一新矩阵Z*不仅是X的标准化版本,同时其中的每个观测是原变量的组合,其中的权重由本征向量决定。一个额外的好处是,由于P*中的本征向量是相互独立的,Z*的每一列也是相互独立的!

左为原数据X,右为经PCA转换后的数据Z*(图片来源:setosa.io)

上图中,有两点值得注意:

由于我们的主成分相互之间是正交的,因此它们在统计学上是相互独立的……这就是为什么Z*中的列相互独立的原因!

左图和右图显示的是同样的数据,但右图表现的是转换后的数据,坐标轴为主成分。

不管是左图还是右图,主成分相互垂直。事实上,所有主成分总是互相正交(正交是垂直的正式数学术语)。

最后,我们需要决定要保留多少特征,丢弃多少特征。决定这一事项有三种常见的方法,我们下面将讨论这三种方法并举例说明:

现在我们简单解释下解释方差比例这个概念。因为每个本征值大致等于相应本征向量的重要性,所以解释方差比例等于保留特征的本征值之和除以所有特征的本征值。

基因数据的陡坡图(来源:improvedoutcomes.com)

考虑上面的基因数据的陡坡图。红线表明每个特征的解释方差比例,将该主成分的本征值除以所有本征值之和可以得到这一数值。仅仅包括主成分1的解释方差比例是1/(1+ 2+ … + p),约为23%. 仅仅包括主成分2的解释方差比例是2/(1+ 2+ … + p),约为19%.

包括主成分1和主成分2的解释方差比例是(1+ 2)/(1+ 2+ … + p),约为42%. 也就是图中黄线的部分,黄线表明包括到该点为止的所有主成分的解释方差比例。例如,PC2处的黄点表明包括主成分1和主成分2可以解释42%的模型总方差。

下面,让我们看一些例子:

注意:有些陡坡图的Y轴是本征向量大小而不是方差比例。这样的陡坡图得出的结果是等价的,不过需要手工计算方差比例。

图片来源:statsoft.com

法一:假设我想保留模型中的5个主成分。在上面的基因数据例子中,这5个主成分可以解释66%的总方差(包括全部13个主成分的方差)。

法二:假设我想包括足够的主成分,解释90%的总方差。在上面的基因数据例子中,我将包括前10个主成分,丢弃最后3个变量。

法三:这次我们想要“找到肘部”。从上图中,我们看到,在主成分2和主成分3之间有解释方差比例的较大下降。在这一情形下,我们打算包括前两个特征,丢弃其余特征。如你所见,这个方法有一定的主观性,因为“肘部”没有一个数学上精确的定义,并且在这个例子中,包括前两个特征的模型只能解释42%的总方差。

法一:随意选择想要保留多少维度。也许我想在二维平面上可视化数据,所以我可能只保留两个特征。这取决于用例,没有硬性规则。

法二:计算每个特征的解释方差比例(下面将简要解释这一概念),选取一个阈值,不断加上特征直到达到阈值。(例如,如果你想要让模型可以解释80%的总方差,那就加上解释方差比例最大的特征,直到可解释的方差比例达到或超过80%.)

法三:这一方法和法二密切相关。计算每个特征的解释方差比例,根据解释方差比例排序特征,并随着更多特征的保留,标绘出解释方差的累计比例。(这一图形称为陡坡图,见下。)根据陡坡图可以决定包含的特征的数量,在陡坡图中找到解释方差比例明显小于前一点的点,然后选择到该点为止的特征。

(这个方法叫做“找肘法”,因为它通过寻找陡坡图的“弯曲处”或“肘部”以判定解释方差比例最大下降在何处发生。)

丢弃了我们想要丢弃的转换后的变量,就可以收工了!这就是PCA.

但是,为什么PCA有效?

尽管PCA是一个深度依赖线性代数算法的非常技术性的方法,仔细想想,它其实是一个相对直观的方法。

首先,协方差矩阵ZTZ包含了Z中每个变量和其他各个变量相关性的估计。这是一个了解变量相关性的强力工具。

其次,本征值和本征向量很重要。本征向量表示方向。设想下将数据绘制在一张多维的散布图上。每个本征向量可以想像成数据散布图的一个“方向”。本征值表示大小,或者重要性。更大的本征值意味着更重要的方向。

最后,我们做了一个假设,一个特定方向上的更多差异和解释因变量行为的能力相关。大量差异通常意味着信号,而极少差异通常意味着噪音。因此,一个特定方向上的更多差异,理论上意味着这一方向上有一些我们想要检测的重要东西。

所以说,PCA是一个结合了以下概念的方法:

变量之间的相关性的测度(协方差矩阵)。

数据散布的方向(本征向量)。

这些不同方向的相对重要性(本征值)。

PCA组合了预测因子,让我们可以丢弃相对不那么重要的本征向量。

PCA有扩展吗?

有,不过限于篇幅,这里不多说。最常见到的是主成分回归,在Z*中未曾丢弃的特征子集上进行回归。这里Z*的相互独立发挥了作用;在Z*上回归Y,我们知道一定能满足自变量相互独立这一点。不过,我们仍然需要检查其他假设。

另一个常见的变体是核PCA,即先使用核函数升维,再使用PCA降维,从而将PCA应用于非线性情形。

以上就是关于什么是PCA,何时应该使用PCA_PCA是如何工作的的知识,希望能够帮助到大家!