【问题标题】:LinAlgError: SVD did not converge in matplotlib PCALinAlgError:SVD 在 matplotlib PCA 中没有收敛
【发布时间】:2014-11-30 08:01:50
【问题描述】:

我正在尝试对 matplotlib 中的矩阵进行 PCA,但一直遇到 LinAlgError:SVD 未收敛。我检查了我的数据是否存在错误值。我能够在类似的数据集上毫无问题地实现 PCA,但在这种情况下,我切换了维度,因为行数必须大于 PCA 类的列数。我的矩阵有 345 行和 146 列介于 0.0 和 1.0 之间的浮点数。我不确定这里发生了什么或如何调试。如果这有所不同,我正在使用 iPython,同时拥有 numpy 和 scipy 的最新版本(我在以前的版本中读过有与此功能相关的错误)。

我也在同一个单元格上遇到这个警告,我不确定它是否相关:

RuntimeWarning: invalid value encountered in true_divide

return (x - self.mu)/self.sigma

这是我的单元格代码:

import numpy as np
from matplotlib.mlab import PCA
t = []
c = []
master = []
for s in sample_master_list.values():
   if s.t2d:
      t.append(s.pathways.values())
   else:
      c.append(s.pathways.values())
master = t + c
pca = PCA(np.array(master))

如果有人对我如何找出导致问题的原因有任何提示,我将不胜感激。

【问题讨论】:

  • 最好附上带有变量sample_master_lists 的独立代码,以便我们运行并重现您的问题。

标签: python numpy matplotlib ipython


【解决方案1】:

master 中的一列可能是常量。看看np.std(master)。如果其中一个值为 0,则master 的对应列是一个常数。如果是这种情况,您可以使用pca = PCA(np.array(master), standardize=False) 作为可能的解决方法。 standardize 参数告诉 PCA 是否将每列中的数据除以该列的标准差。 (或者您可以删除常量列。它无论如何都没有提供任何有用的信息,因此忽略它不会有任何害处。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    相关资源
    最近更新 更多