Python 中缺失值的 PCA

PCA with missing values in Python

我正在尝试对屏蔽阵列进行 PCA 分析。据我所知,如果原始二维矩阵有缺失值,matplotlib.mlab.PCA 将不起作用。有没有人建议在 Python 中进行缺少值的 PCA?

谢谢。

我认为您可能需要在进行 PCA 之前对数据进行一些预处理。 您可以使用:

sklearn.impute.SimpleImputer

https://scikit-learn.org/stable/modules/generated/sklearn.impute.SimpleImputer.html#sklearn.impute.SimpleImputer

使用此功能,您可以自动替换平均值、中位数或最频繁值的缺失值。很难说哪个选项最好,这取决于许多因素,例如数据的外观。

顺便说一下,您还可以使用与以下相同的库来使用 PCA:

sklearn.decomposition.PCA

http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html

以及许多其他统计函数和机器学习技术。

输入数据会以可能使 PCA 估计产生偏差的方式扭曲结果。更好的方法是使用 PPCA 算法,它给出与 PCA 相同的结果,但在某些实现中可以更稳健地处理缺失数据。

我找到了两个图书馆。你有

  1. 在PyPI上打包PPCA,调用PCA-magic on github
  2. PyPPCA 包,在 PyPI 和 github
  3. 上同名

由于包的维护成本较低,您可能希望自己实施。上面的代码基于 Tipping 和 Bishop 1999 年引用(并且写得很好!)的论文中提出的理论。如果您需要有关如何正确实施 PPCA 的指导,可以在 Tippings home page 上找到它。

顺便说一句,sklearn implementation of PCA实际上是一个基于TippingBishop1999的PPCA实现,但他们没有选择以处理缺失值的方式实现它。

编辑: 上面的两个库都有问题,所以我自己不能直接使用它们。我分叉了 PyPPCA 并修复了它。 Available on github.