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

Posted

技术标签:

【中文标题】有没有办法减少小批量 kmeans 的内存使用?【英文标题】:Is there a way to reduce memory usage of mini-batch kmeans? 【发布时间】:2017-09-07 05:33:23 【问题描述】:

我正在处理一个包含 500 个维度的 640 万个样本的数据集,我正在尝试将其分组为 200 个集群。我被限制为 90GB 的 RAM,当我尝试从 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)

它没有通过聚类。

【问题讨论】:

对不起,我之前的回答是错误的。我错过了你没有使用 GPU,但实际上用完了主 RAM。 我确实有 GPU 访问权限。你认为我可以在不占用太多内存的情况下重写它以在 GPU 上工作吗? 不,您要做的是延迟加载数据文件,即。 e.一块一块的。我知道这是可能的,而且不是很困难,但不幸的是,现在不记得具体细节了。 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

那么,你应该使用partial_fit来训练,而不是使用fit

【讨论】:

以上是关于有没有办法减少小批量 kmeans 的内存使用?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法减少使用软件的系统中的内存数量?

使用太多内存来减少图像尺寸......有没有办法使用更少的内存来做到这一点?

当我增加批量大小时,为啥 tensorflow GPU 内存使用量会减少?

有没有办法降低 scipy/numpy 精度以减少内存消耗?

Kmeans 聚类与火花中的地图减少

用kmeans创建集群时,有没有办法输出每一行的失真?