python谱聚类算法_基于sklearn和大亲和矩阵的谱聚类

我试图使用scikit-learn提供的谱聚类方法来聚合我的数据集的行(只有只有16000)。

我的问题是在我预先计算了亲和力矩阵(1600x16000浮点矩阵)后产生的,它或多或少地分配了3g字节(我最多可以达到8gb),该方法通过argpack解算器调用该矩阵,需要更多的内存,而cpu在试图交换内存中的东西时会浪费太多时间,以致于计算速度减慢到死亡。

我也尝试在方法之前调用垃圾回收器,但没有成功:import gc

gc.collect()

我怎样才能知道发生了什么事的确切计划?

这是已知问题吗?python中有没有其他方法可以现成地执行谱聚类?在

如果需要,我可以发布一个最小的工作示例。在

更新

关于lobbcg解算器,我错了,一开始它似乎占用了我所有的内存,但后来它稳定在5Gb左右,过程继续,但另一个问题出现了。

似乎计算会导致一些数值误差,最终会产生NaN或类似这样的误差(当亲和力矩阵稍有变化时,出现的误差会发生变化,见下文):

^{pr2}$

我的亲和力度量是一个高斯核exp(-((X_1 - x_2)^2/2*sigma^2)),当尝试不同的sigma值时,结果会有很大的变化。我可以理解,当一些条目接近于零时,可能会出现一些不准确的情况,但当我使用较大的sigma值(=5.0)时,情况就不一样了,取而代之的是,它们更接近于1.0。在

现在我假设我漏掉了一点,或者我在这个过程中做错了什么,所以我用一个新的目标来更新这个问题。在

作为参考,我是如何计算亲和矩阵的:pairwise_dists = \

scipy.spatial.distance.squareform(

scipy.spatial.distance.pdist(data_slice,'sqeuclidean'))

similarity_matrix = scipy.exp(-pairwise_dists /(2 * self._sigma ** 2))

其中data_slice是一个numpy数组,它的行是我的实例,self._sigma存储高斯西格玛参数。在

你可能感兴趣的:(python谱聚类算法)