scipy.linalg.sparse.eigsh不适用于广义特征值

时间:2016-01-20 13:56:14

标签: python machine-learning pca eigenvector eigenvalue

我正在开展一个机器学习项目,该项目涉及对一些标记数据进行主成分分析,并使用这些标签从数据中提取更多有价值的信息。

为此,我正在计算每个类的散点矩阵,对于每对类,我需要解决散射矩阵的广义特征值问题,如下所示:

S_i * v = w *(S_j + b.I)* v

其中b是乘数,I是单位矩阵。现在,这是python中的代码:

        jeigenvalues = eigsh(scatter_j, k=10, return_eigenvectors=False, maxiter=100)
        print('eigenvalues made')
        beta = betaMult*mean(jeigenvalues)
        print(beta)
        print(scatter_j+beta*eye(shape(x_data)[1]))
        w, v = eigsh(scatter_i,M=scatter_j+beta*eye(shape(x_data)[1]),k=int(numberOfEVs/45), maxiter=100)
        print(i,j,'done')

我的当前代码中的numberOfEVs为90(因此它可以被45整除)。

但问题是,在我使用上述公式的eigsh的那一行,它从来没有给我答案。它一直在吃掉越来越多的内存,甚至没有完成一次迭代(我把它的maxiter输入设置为1,它仍然没有给出答案)。当我没有给eigsh函数赋予M参数(它是广义EV问题右侧的矩阵,并且在未指定时它被假定为“I”),它可以正常工作。但是当提供M时,它变得没有反应。

有什么想法吗?

编辑:散布矩阵的条目相当小,大多数在10 ^ -5左右。我也尝试将左侧乘以RHS矩阵的倒数,并且它再次具有相同的问题(持续很长时间没有答案)。这些条目的小问题是什么?那怎么解决呢?

0 个答案:

没有答案