我尝试使用scikit-learn提供的光谱聚类方法来聚合我的数据集行(仅16000 )。
我的问题是在预计算亲和矩阵(1600x16000浮点矩阵)后出现的,它或多或少分配了3gb。 我最多可以达到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.square form (
scipy.spatial.distance.PD ist (data _ slice,' sqeuclidean ' ) )
similarity _ matrix=scipy.exp (-pairwise _ dists/(2* self._ sigm a* *2) )
其中data_slice是numpy数组,该行是我的实例,self._sigma是存储振动的基准参数。 在