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

2024-10-01 02:32:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个机器学习项目,包括对一些标记数据进行主成分分析,并使用这些标记从数据中提取更有价值的信息。你知道吗

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

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矩阵的倒数,同样的问题(持续了很长时间没有答案)。这些条目太小是问题所在吗?那我怎么解决呢?你知道吗


Tags: 数据答案代码标记data矩阵betaeye