有没有办法减少小批量kmeans的内存使用?

时间:2017-04-11 17:26:28

标签: python scikit-learn k-means bigdata

我使用的数据集是640万个500维样本,我试图将其分组到200个集群中。我限制为90GB的内存,当我尝试从sklearn.cluster运行MiniBatchKmeans时,操作系统会因为占用太多内存而终止进程。

这是代码:

data = np.loadtxt('temp/data.csv', delimiter=',')
labels = np.genfromtxt('temp/labels', delimiter=',')

kmeans = cluster.MiniBatchKMeans(n_clusters=numClusters, random_state=0).fit(data)
predict = kmeans.predict(data)
Tdata = kmeans.transform(data)

它没有超越群集。

2 个答案:

答案 0 :(得分:1)

解决方案是使用sklearn的partial_fit方法 - 并非所有算法都有此选项,但MiniBatchKMeans拥有此选项。

所以你可以“部分”训练,但你必须分开你的数据而不是一次性阅读,这可以用生成器完成,有很多方法可以做到,如果你使用pandas例如,您可以使用this

然后,您应该使用fit进行培训,而不是使用partial_fit

答案 1 :(得分:0)

我认为您也可以尝试降低数据的精度,以减少分配的内存量。尝试使用float32而不是默认值。