IPython Notebook 内核在运行 Kmeans 时死机

Posted

技术标签:

【中文标题】IPython Notebook 内核在运行 Kmeans 时死机【英文标题】:IPython Notebook Kernel getting dead while running Kmeans 【发布时间】:2015-12-10 23:52:23 【问题描述】:

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

所以我尝试了 125k 的观察结果和相同的编号。的变量。但我收到的信息仍然相同。

这是什么意思?这是否意味着 ipython notebook 无法在 125k 观测值上运行 kmeans 并杀死内核?

如何解决这个问题?这对我今天做的很重要。 :(

请指教。

我使用的代码:

从 sklearn.cluster 导入 KMeans 从 sklearn.metrics 导入剪影分数

    # Initialize the clusterer with n_clusters value and a random generator
    # seed of 10 for reproducibility.
kmeans=KMeans(n_clusters=2,init='k-means++',n_init=10, max_iter=100)
kmeans.fit(Data_sampled.ix[:,1:])
cluster_labels = kmeans.labels_
    # The silhouette_score gives the average value for all the samples.
    # This gives a perspective into the density and separation of the formed
    # clusters
silhouette_avg = silhouette_score(Data_sampled.ix[:,1:],cluster_labels)

【问题讨论】:

恐怕我对SKLearn不熟悉。我不知道发生了什么,但也许我可以帮助调试一下。您是否尝试过退化案例,例如 5 次观察?如果这也失败了,则表明问题与观察数量有关,您可以查看其他地方。例如,将迭代次数从 100 次减少到 5 次;更改 n_init 以使算法做更少的工作。我猜今天得到一个合理的答案比得到最好的答案更重要。 我刚刚尝试了 62K obs,只有 12 个变量。我再次收到相同的消息“内核似乎已经死机。请重新启动”。重新启动后它永远不会完成。怎么了?。 ipython 也不能处理 100K obs 吗?.. 我在 Mac 最新的操作系统上运行 16GB 内存。 从文档中,这是否相关? “在实践中,k-means 算法非常快(可用的最快的聚类算法之一),但它属于局部最小值。这就是为什么重新启动它几次会很有用。” 你能从普通的python解释器中运行你想要的吗?似乎是joblib 的问题你使用MAC OS 吗? Python版本大于3.4? this 也可能是相关的 嗯,如果n_jobs=1,那么它可能没有使用joblib,所以问题肯定不在它。 【参考方案1】:

根据一些调查,这可能与 iPython Notebook / Jupyter 无关。这似乎是sklearn 的问题,这可以追溯到numpy 的问题。请参阅相关的 github 问题 sklearn here 和 here,以及底层 numpy 问题 here。

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

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

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

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

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

【讨论】:

以上是关于IPython Notebook 内核在运行 Kmeans 时死机的主要内容,如果未能解决你的问题,请参考以下文章

IPython3 notebook 成功配置Python2和Python3内核(Kernel)

服务器(Ubuntu)远程访问ipython notebook(服务器运行ipython notebook 本地浏览器访问)

在 IPython Notebook 中自动运行 %matplotlib inline

Jupyter Notebook(iPython)

IPython Notebook 运行python Spark程序

Ipython notebook 小技巧