为什么 PCA 效果很好,而保留的总方差很小?

Why PCA works well while the total variance retained is small?

我正在通过查看其他人在 kaggle 上的内核来学习机器学习,特别是这个 Mushroom Classification kernel。作者首先将 PCA 应用于变换后的指标矩阵。后来他只用了2个主成分做可视化。然后我检查它保持了多少方差,发现只保持了16%的方差。

in [18]: pca.explained_variance_ratio_.cumsum()
out[18]: array([0.09412961, 0.16600686])

但准确率达到 90% 的测试结果表明它运行良好。我的问题是,如果方差代表信息,那么在丢失了这么多信息的情况下,ML 模型如何运作良好?

您应该注意到,原始向量 space 中的许多变量都是稀疏编码的分类变量。 PCA 不是最适合此类变量的,并且不推荐在您引用的代码中完成它的方式。

现在您的明显问题是:为什么它首先起作用?为什么只有两个变量?问问自己:如果我告诉你蘑菇的颜色是红色且有鳃(薄片),你能判断蘑菇是否有毒吗?如果您对蘑菇有所了解,那么是的,在绝大多数情况下您都能分辨出来。这就是这里的算法正在做的事情。解释的方差不多,因为有很多变量,并且一些最有意义的变量(例如颜色)被稀疏编码,因此对于分布在许多变量上的 PCA 非常有效。

此外,我不会说它效果很好,可视化效果恰好显示了这一点。考虑这张显示逻辑回归测试集结果的图像:

根据测试结果,它有90%的准确率。你看的时候,你觉得做得好吗?在左下角,混合了可食用和有毒的蘑菇。显然那是我们的两个计算特征不够用的地方; ruby 牛肝菌是红色的,可以食用。