Python中缺少值的PCA

Python中缺少值的PCA,python,numpy,pca,Python,Numpy,Pca,我正试图对一个蒙版阵列进行PCA分析。据我所知,如果原始2D矩阵缺少值,matplotlib.mlab.PCA将不起作用。有人建议在Python中使用缺失值进行PCA吗 谢谢。我认为在进行PCA之前,您可能需要对数据进行一些预处理。 您可以使用: sklearn.impute.SimpleImputer 使用此功能,您可以自动替换平均值、中值或最频繁值的缺失值。这两个选项中哪一个是最好的很难说,这取决于许多因素,例如数据的外观 顺便说一下,您也可以使用相同的库使用PCA,包括: sklear

我正试图对一个蒙版阵列进行PCA分析。据我所知,如果原始2D矩阵缺少值,
matplotlib.mlab.PCA
将不起作用。有人建议在Python中使用缺失值进行PCA吗


谢谢。

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

sklearn.impute.SimpleImputer

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

顺便说一下,您也可以使用相同的库使用PCA,包括:

sklearn.decomposition.PCA


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

输入数据会使结果产生偏差,从而可能使主成分分析估计产生偏差。一种更好的方法是使用PPCA算法,该算法给出与PCA相同的结果,但在某些实现中可以更稳健地处理缺失数据

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

  • 在PyPI上打包PPCA,称为
  • 包PyPPCA,在PyPI和
  • 由于这些包的维护率很低,您可能希望自己实现它。上面的代码建立在Tipping和Bishop在1999年发表的一篇引用良好(写得很好!)的论文中提出的理论基础上。如果您需要有关如何正确实施PPCA的指导,请访问

    另一方面,实际上是一个基于TippingBishop1999的PPCA实现,但他们没有选择以处理缺失值的方式来实现它


    编辑:上述两个库都有问题,因此我自己无法直接使用它们。我用叉子叉了PyPPCA,bug把它修好了

    您可以查找非线性迭代偏最小二乘()。我不知道是否有任何Python实现,但该算法在缺少值的情况下运行良好,因此,如果您能够找到一个实现(或自己编写!),您应该能够找到它。对于那些希望在使用PyPPCA执行分解后为传入数据计算PC坐标的人,答案在。y=(ss*np.眼(尺寸)+C_o@C_o.T)@C_o@z_o. 其中z是缺失值的新数据,_o仅指“观察到的”行。现在我只需要弄清楚如何处理这些矩阵在我的例子中太大的错误。哎呀,一开始就忘了np.linalg.inv小心:PyPPCA的输出已经从纸张的输出翻转了尺寸(例如,在纸张C是dxD,但程序的输出是dxD)