当前位置:  开发笔记 > 编程语言 > 正文

Sklearn.KMeans:如何避免内存或值错误?

如何解决《Sklearn.KMeans:如何避免内存或值错误?》经验,为你挑选了1个好方法。

我正在研究一个图像分类问题,我正在创建一个单词模型.为此,我提取了所有图像的SIFT描述符,我必须使用KMeans算法来查找要用作我的文字包的中心.

这是我的数据:

图片数量:1584

SIFT描述符的数量(32个元素的向量):571685

中心数量:15840

所以我运行了一个KMeans算法来计算我的中心:

dico = pickle.load(open('./dico.bin', 'rb')) # np.shape(dico) = (571685, 32)
k = np.size(os.listdir(img_path)) * 10 # = 1584 * 10

kmeans = KMeans(n_clusters=k, n_init=1, verbose=1).fit(dico)

pickle.dump(kmeans, open('./kmeans.bin', 'wb'))
pickle.dump(kmeans.cluster_centers_, open('./dico_reduit.bin', 'wb'))

有了这段代码,我得到了一个内存错误,因为我的笔记本电脑上没有足够的内存(只有2GB)所以我决定将中心数除以2并随机选择一半的SIFT描述符.这一次,我得到了Value Error : array is too big.

如果没有内存问题,我该怎么做才能获得相关结果?



1> Pierre..:

正如@sascha在这篇评论中所说,我只需要使用MiniBatchKMeans类来避免这个问题:

dico = pickle.load(open('./dico.bin', 'rb'))

batch_size = np.size(os.listdir(img_path)) * 3
kmeans = MiniBatchKMeans(n_clusters=k, batch_size=batch_size, verbose=1).fit(dico)

pickle.dump(kmeans, open('./minibatchkmeans.bin', 'wb'))

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有