更新:最后,解我选择使用聚类我大数据集由以下Anony -摩丝建议之一。 也就是说,使用ELKI的DBSCAN执行力度做我的集群,而不是scikit学习的。 它可以通过命令行,并用正确的索引上运行,进行几个小时之内这个任务。 使用GUI和小样本数据集工作,你要使用,然后去镇上的选项。 值得探讨。 Anywho,我原来问题的描述和一些有趣的讨论阅读。
我有一个约2.5万个样本,每行35个特征(浮点值),我试图以集群的数据集。 我一直在试图与scikit学习的实现DBSCAN要做到这一点,利用曼哈顿距离度量和小量的值从数据得出一些小的随机样本估计。 到现在为止还挺好。 (这里是片段中,以供参考)
db = DBSCAN(eps=40, min_samples=10, metric='cityblock').fit(mydata)
我目前的问题是,我很容易耗尽内存。 (我目前正在一台机器上有16 GB的RAM)
我的问题是,DBSCAN计算上飞成对距离矩阵,因为它运行,而那正是吞噬了我的记忆? (250万^ 2)* 8个字节显然是愚蠢的大,我理解这一点。 如果我无法使用fit()
方法? 更一般地,是有解决这个问题的一种方式,还是我一般在这里找错了树?
如果答案卷起是显而易见的道歉。 我一直在琢磨不透这几天。 谢谢!
附录:此外,如果任何人都可以解释的区别fit(X)
和fit_predict(X)
对我来说更明确地我也很感激-我怕我只是不太明白这一点。
附录#2:可以肯定的,我只是〜550 GB的RAM试过这样的机器上,它仍然炸毁了,所以我觉得像DBSCAN很可能试图使成对距离矩阵或东西,我显然不希望它去做。 我想现在最大的问题是如何停止该行为,或者发现可能适合我的需要更多的其他方法。 谢谢你在我这儿轴承。
附录#3(!):我忘了附上回溯,在这儿,
Traceback (most recent call last):
File "tDBSCAN.py", line 34, in <module>
db = DBSCAN(eps=float(sys.argv[2]), min_samples=10, metric='cityblock').fit(mydata)
File "/home/jtownsend/.local/lib/python2.6/site-packages/sklearn/base.py", line 329, in fit_predict
self.fit(X)
File "/home/jtownsend/.local/lib/python2.6/site-packages/sklearn/cluster/dbscan_.py", line 186, in fit
**self.get_params())
File "/home/jtownsend/.local/lib/python2.6/site-packages/sklearn/cluster/dbscan_.py", line 69, in dbscan
D = pairwise_distances(X, metric=metric)
File "/home/jtownsend/.local/lib/python2.6/site-packages/sklearn/metrics/pairwise.py", line 651, in pairwise_distances
return func(X, Y, **kwds)
File "/home/jtownsend/.local/lib/python2.6/site-packages/sklearn/metrics/pairwise.py", line 237, in manhattan_distances
D = np.abs(X[:, np.newaxis, :] - Y[np.newaxis, :, :])
MemoryError