2017-04-11 61 views
2

我正在处理一个具有500个维度的640万个样本的数据集,并且我试图将它分组为200个集群。我仅限于90GB的内存,当我尝试从sklearn.cluster运行MiniBatchKmeans时,操作系统将杀死用尽太多内存的进程。有没有办法减少小批量kmeans的内存使用量?

这是代码:

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) 

它不会让过去集群。

+0

对不起,我之前的回答是错误的。我错过了你没有使用GPU,但实际用完了主RAM。 –

+0

我确实拥有GPU访问权限。你认为我可以重写这个在GPU上工作而不占用太多内存吗? – user1816679

+0

不,你想要做的是延迟加载数据文件,我。即一片一片。我知道这是可能的,而且不是非常困难,但不幸的是现在不记得具体细节。 –

回答

1

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

所以,你可以训练“部分”,但你必须拆分你的数据,而不是一口气读完,这可以用发电机完成,有很多方法可以做到,如果你使用熊猫例如,您可以使用this

然后,而不是使用fit,你应该使用partial_fit来训练。

相关问题