Python scikit-learn KMeans 在计算轮廓分数时被杀死(9)

Posted

技术标签:

【中文标题】Python scikit-learn KMeans 在计算轮廓分数时被杀死(9)【英文标题】:Python scikit-learn KMeans is being killed (9) while computing silhouette score 【发布时间】:2015-07-31 01:09:51 【问题描述】:

我目前正在处理一个图像数据集(250 000 张图像,与特征向量一样多,每个都由 132 个特征组成)并尝试使用 sklearn 提供的 KMeans 函数。

我在 Mac OS X 10.10、Python 2.7 和 sklearn 0.15.2 上运行它,一段时间后我只得到一个:

杀死:9

运行这些命令行时出错:

nb_cls = int(raw_input("Number of clusters chosen :"))
clusterer = sklearn.cluster.KMeans(n_clusters=nb_cls)
clusters_labels = clusterer.fit_predict(X)
silhouette = sklearn.metrics.silhouette_score(X, clusters_labels)
print "n clusters =", nb_cls, "/ silhouette_score =", silhouette

请注意,在不计算剪影分数的情况下,代码不会被杀死

对于较小的数据集(± 2 500 张图像),相同的算法是有效的,并且没有此类 Python 错误。

我怎样才能避免这个 Killed 9 错误?这个计算对我的笔记本电脑来说是否过于雄心勃勃?

【问题讨论】:

【参考方案1】:

这意味着您的脚本已被操作系统杀死。在大多数情况下,这是因为它使用了太多的内存。您的情况似乎很可能,因为当您仅使用 2 500 张图像时,您的代码可以正常工作。

如果是内存问题,您将不得不获得更多 RAM(在 mac 上不可能?)、使用另一台具有更多 RAM 的计算机或减小数据集的大小。

【讨论】:

好的。我正在使用 16Gb RAM,但这可能还不够,我同意。但是有没有办法阻止操作系统杀死脚本,即使它需要更多时间? 我不知道。但是,如果 silhouette_score 要求将所有数据加载到内存中,那么无论如何这可能是不可能的。我想您应该首先通过监视执行来确定是否是内存问题。

以上是关于Python scikit-learn KMeans 在计算轮廓分数时被杀死(9)的主要内容,如果未能解决你的问题,请参考以下文章

Kmean聚类聚类中的***术语

使用sklearn Kmeans时如何避免Kmean局部最优

无法实例化类型集群,Mahout 中的 KMean 集群示例

如何从集群实现 sklearn -AgglomerativeClustering?

机器学习 - KMean

按升序生成 Kmeans 的质心