python - LinAlg错误: SVD did not converge in matplotlib PCA

标签 python numpy matplotlib ipython

我试图在 matplotlib 中的矩阵上进行 PCA,但不断遇到 LinAlgError: SVD 未收敛。我检查了我的数据是否有错误值。我能够在类似的数据集上实现 PCA,没有任何问题,但在这种情况下,我切换了维度,因为行数必须大于 PCA 类的列数。我的矩阵有 345 行和 146 列, float 在 0.0 到 1.0 之间。我不确定这里发生了什么或如何调试。我正在 iPython 中工作,如果这有什么不同的话,我有最新版本的 numpy 和 scipy (我在以前的版本中读到有与此函数相关的错误)。

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

运行时警告:true_divide 中遇到无效值

返回(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))

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

最佳答案

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

关于python - LinAlg错误: SVD did not converge in matplotlib PCA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27211263/

相关文章:

python - 在 numpy 中创建密度估计

python - 如何将列表python计算成矩阵相似度

python - Networkx:替换节点标签

python - 如何在 matplotlib pyplot 中将标签添加到 y 轴的区间组?

python - 画一条线或一系列线并计算线的总长度?

python pandas - 字符串匹配

python - 如何在 Alembic/SQLAlchemy 中使用 USING 子句?

python - 用 DRY 解决方案替换多个条件

python - 将数字分配给给定字符串的字母

python - 根据值的范围在 matplotlib 热图中创建刻度