主成分分析,需要选择多少个成分?

5
我不太理解PCA的一个点。PCA会返回每个特征方向上的最大方差吗?也就是说,它将为原始空间中的每个特征返回一个分量,并且只有前k个分量将用作新子空间的轴?如果我在50维中,其中49个特征具有强烈的方差,那么我可以直接转到49维空间吗?当然,我用通俗易懂的语言,没有正式或技术性的术语。
谢谢。

是的,但我的意思是,如果我们看一下协方差矩阵算法,返回的特征向量和特征值的数量是N,但其中只有k个作为最终维度返回。那个N是什么?应该是我们的数据矩阵X的列数...是吗?编辑:因此,在2维中返回2个组件,因为特征数是2。 - rollotommasi
1
输入特征使用 PCA 进行分析,以发现所有顶部正交动态,这些动态明确不是从输入特征进行一对一映射的... 因此,您的 50D 输入特征可能会被降至只有 3 个维度...通常,没有一个输入特征纯粹只是 PCA 输出维度之一... 想象一把铅笔扔在地上... 在平坦的 2D 表面上,您只有两个可能的维度,所以所有这些铅笔经过 PCA 处理后将仅表示为 X 和 Y 所代表的这两个向量...每个 PCA 输出都是正交的-独立于其他输出。 - Scott Stensland
这里有一个确认,每个特征都有一个组件,但是 Pca 允许使用特征值优先考虑它们!https://deeplearning4j.org/eigenvector#covariance - rollotommasi
为了真正理解PCA,我建议你避免只是将数据扔进某个库函数中...相反,要动手写自己的PCA算法...当然,在生产阶段可以使用别人的库,但在学习阶段不要这样做...PCA算法并不神奇,你可以用几页代码自己实现。 - Scott Stensland
1个回答

7
如果您的原始数据有50个维度,那么PCA将返回50个主成分。您需要选择一个子集k,该子集可以解释最多的方差,通常至少为90%的方差。您使用的PCA软件通常会计算每个主成分解释的方差量,因此只需累加方差并选择前k个即可达到总方差的90%。参见这个PCA教程:PCA tutorial
一般来说,我们希望选择最小的K,使得解释总方差的85%至95%(等价于0.85到0.99),这些值是基于PCA最佳实践得出的。
当我们说PCA可以减少维度时,我们的意思是PCA可以计算主成分,用户可以选择最小数量的K来解释0.95的方差。如果K相对于原始特征数D较小,则结果会令人满意。

非常感谢。所以,我选择的k个组件应该解释我们总数据的大部分方差,对吧?我的意思是,选择最佳的k个组件(从方差的角度),应该给我一个子空间,其中我们新投影的数据的方差被最大化了吗? - rollotommasi
每个主成分解释了一小部分的方差,你的软件应该按照方差递减的顺序返回主成分。所以如果你选择了前 k=1 个主成分,那么这个 k=1 的主成分最大化了由一个主成分张成的子空间的方差。如果你选择了前 k 个主成分,那么这些 k 个主成分最大化了由 k 个主成分张成的子空间的方差。这是因为主成分是按照递减顺序排序的。然后你需要选择正确的 k 值来达到90%的总方差。 - stackoverflowuser2010
你能告诉我这个吗?数据集是 M = 特征数 = 700 和 N = 观测数 = 91 如果我应用PCA,那么应该形成多少个主成分? 是N个还是M个? 我知道选择具有最大方差的成分,但在选择之前,PCA会创建或制作多少个成分? - Rabnawaz
@Rabnawaz:你的PCA软件应该返回与特征数相同数量的主成分。因此,在你的情况下,它应该返回M=700个主成分。选择其中前k个则取决于你。 - stackoverflowuser2010
但是当我在R中运行它时,它应该返回一个91 X 91行的矩阵。从中,我必须选择前k个组件。我对它的符号表示感到困惑。@stackoverflowuser2010 - Rabnawaz
@Rabnawaz:如果您对PCA的R实现有疑问,那么您应该提出一个单独、具体的问题。添加“r”标签。 - stackoverflowuser2010

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接