选择要保留的主成分数量

机器算法验证 r 主成分分析
2022-02-06 17:10:23

向我建议的一种方法是查看碎石图并检查“肘部”以确定要使用的正确 PC 数量。但是如果情节不清楚,R是否有计算确定数字?

fit <- princomp(mydata, cor=TRUE)
3个回答

以下文章:Cangelosi 和 Goriely的主成分分析中的成分保留以及对 cDNA 微阵列数据的应用给出了相当好的概述,以检测研究中的成分数量的标准经验法则。(碎石图、解释的总方差比例、平均特征值规则、对数特征值图等)它们中的大多数在 R 中实现起来非常简单。

一般来说,如果你的碎石情节非常不确定,那么你只需要“挑选你的毒药”。任何数据都没有绝对的对错,因为实际上要使用的 PC 数量实际上取决于您对问题的理解。您可以“真正”知道其维度的唯一数据集是您自己构建的数据集。:-) 最终,主成分在 RSS 指标下提供了数据的最佳分解(作为副产品,您可以让每个成分代表一种主要的变异模式)并包括或排除给定数量的成分决定了你对问题维度的看法。

出于个人喜好,我喜欢 Minka 关于 PCA 的这种自动选择维度的方法,它基于 PCA 的概率解释,但话又说回来,你进入了尝试对给定维度的数据的可能性进行建模的游戏。(如果您希望遵循此基本原理,链接提供了 Matlab 代码。)

尝试更多地了解您的数据。例如。您真的相信 99.99% 的数据集变化是由于模型的协变量造成的吗?如果不是,您可能不需要包含在总方差中所占比例如此之小的维度。您是否认为实际上一个组件反映的变化低于仅显着差异的阈值?这可能再次意味着将该组件包含到您的分析中几乎没有相关性。

无论如何,祝你好运并仔细检查您的数据。(绘制它们也会产生奇迹。)

自从最初提出并回答了这个问题以来,在过去的几年里,关于这个问题的后续工作一直很好。我强烈推荐 Gavish 和 Donoho 的以下论文:The Optimal Hard Threshold for Singular Values is 4/sqrt(3)

他们的结果基于渐近分析(即,当您的数据矩阵变得无限大时,有一个明确定义的最优解),但它们显示了令人印象深刻的数值结果,表明渐近最优过程适用于小型和实际大小的数据集,即使在不同的噪声下楷模。

本质上,最佳过程归结为估计添加到矩阵每个元素的基于此,您计算阈值并删除奇异值低于阈值的主成分。对于一个方阵,比例常数 4/sqrt(3) 如标题所示:σn×n

λ=4σn3

他们还在论文中解释了非正方形的情况。他们在这里有一个很好的代码补充(在 MATLAB 中),但是这些算法很容易在 R 或其他任何地方实现:https ://purl.stanford.edu/vg705qn9070

注意事项:

  • 如果您缺少数据,我不确定这是否可行
  • 如果数据集中的每个特征都有不同的噪声幅度,我不确定这是否可行(尽管在某些假设下白化可能会解决这个问题)
  • 看看类似的结果是否适用于其他低秩矩阵分解(例如非负矩阵分解)会很有趣。

Kaiser 准则(所有特征值都大于 1)的问题在于,无论许多附加因素是否为噪声,提取的因素数量通常约为电池中项目或刻度数量的三分之一。并行分析和碎石标准通常是确定要提取的因素数量的更准确的程序(根据 Harmon 和 Ledyard Tucker 的经典文本以及 Wayne Velicer 的最新工作。