当 PCA 不产生降维时,这意味着什么?

机器算法验证 Python 主成分分析 scikit-学习 降维 svd
2022-03-26 02:02:47

我是 PCA 的初学者,我正在尝试将它应用到我拥有的数据集上。特征是具有不同单位和可变性的不同几何参数,我通过减去均值并除以标准差来标准化特征矩阵。

对于 PCA,我使用基于奇异值分解 (SVD) 的PCA()方法sklearn一旦我拟合模型,如果我只选择 4 个组件,我会得到以下结果:

这是在告诉我一些关于我的特征的事情吗?或者我的方法有什么根本错误?谢谢!

3个回答

结果表明您的特征是相互正交的。考虑总方差意味着同时考虑方差和协方差。正交性限制了协方差。标准化等同于特征之间的差异。放在一起,每个特征对总方差的贡献大致相等,你的组件也是如此。

如果我们选择所有转换后的特征而不是它们的子集,PCA 可用于缩放和旋转数据。我的回答在这里给出了一个缩放和旋转数据的例子,但没有降维。如何在 PCA 和逻辑回归之间做出决定?


您的绘图表明,如果我们使用所有 12 个特征,则解释的方差为 100%,即没有信息丢失。但是如果你选择的特征数量小于 12,就会有信息丢失。

请注意,在大多数情况下,PCA 可以降低维度,但代价是丢失信息如果您想保持 99% 的方差,除非您具有高度相关(冗余特征),否则 PCA 将无法提供帮助。

换句话说,您的绘图显示您的数据集中没有太多冗余。


以下是这两种情况的示例(具有 5 个功能)。

set.seed(0)
x1=matrix(rnorm(1000),ncol=5)

x2 = matrix(rnorm(600),ncol=3)
x2=cbind(x2,x2[,3]*runif(200)*0.01)
x2=cbind(x2,x2[,3]*runif(200)*0.01)

您可以在 x1 和 x2 上运行 PCA,以查看相对于所选特征数量的方差差异。

对于 x2,您会看到 3 个特征可以解释大部分差异,因为其他两个特征与 x2 的第三列高度相关。

好吧,很明显,如果您要对数据集执行 PCA,然后对结果执行 PCA,与只执行一次 PCA 相比,您不会获得任何好处。因此,如果您的原始数据集已经具有 PCA 结果的属性(即正交性),那么将 PCA 应用于它不会产生任何进一步的好处。数据集越正交,它已经“PCA 优化”越多,PCA 的帮助就越小。您应该检查原始数据集的相关矩阵,看看变量之间有多少相关性。