IPython Notebook Kernel在运行Kmeans时死机

时间:2015-09-14 21:06:03

标签: python numpy pandas ipython scikit-learn

我在12个变量的400K观测值上运行K-means聚类。最初,当我使用Kmeans代码运行单元格时,它会在2分钟后弹出一条消息,说内核被中断并将重新启动。然后需要很长时间,好像内核已经死了,代码将不再运行。

所以我尝试了125k观察,同样没有。变量。但仍然是我得到的同样的信息。

这是什么意思?这是否意味着ipython笔记本无法在125k观察中运行kmeans并杀死内核?

如何解决这个问题?这对我来说非常重要。 :(

请指教。

我使用的代码:

来自sklearn.cluster导入KMeans 来自sklearn.metrics导入silhouette_score

index.php

1 个答案:

答案 0 :(得分:2)

从某些调查来看,这可能与iPython Notebook / Jupyter无关。这似乎与sklearn存在问题,后者追溯到numpy的问题。请参阅相关的github问题sklearn herehere以及基本的numpy问题here

最终,计算“轮廓分数”需要计算一个非常大的距离矩阵,并且似乎距离矩阵在系统中占用了大量行的太多内存。例如,在类似计算的两次运行期间查看我的系统上的内存压力(OSX,8GB ram) - 第一个峰值是具有10k记录的Silhouette Score计算,第二个......高原...具有40k记录:< / p>

memory pressure

根据相关的SO回答here,您的内核进程可能会被操作系统杀死,因为它占用了太多内存。

最终,这需要在sklearn和/或numpy的基础代码库中进行一些修复。您可以在过渡期间尝试的一些选项:

  • 关闭计算机上运行的每个无关程序(spotify,slack等),希望释放足够的内存,并在脚本运行时密切监视内存
  • 在比你的机器有更多RAM的临时远程服务器上运行计算,看看是否有帮助(虽然因为我认为内存使用至少是样本数量的多项式,这可能不起作用)
  • 使用您的完整数据集训练您的分类器,然后使用您的数据的随机子集计算轮廓分数。 (大多数人似乎能够通过20-30k的观察来实现这一点)

或者,如果您比我聪明并且有空闲时间,请考虑尝试为sklearn和/或numpy提供修复:)