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
的基础代码库中进行一些修复。您可以在此期间尝试一些选项:
或者,如果你比我聪明并且有空闲时间,可以考虑尝试为sklearn
和/或numpy
提供修复:)
【讨论】:
以上是关于IPython Notebook 内核在运行 Kmeans 时死机的主要内容,如果未能解决你的问题,请参考以下文章
IPython3 notebook 成功配置Python2和Python3内核(Kernel)
服务器(Ubuntu)远程访问ipython notebook(服务器运行ipython notebook 本地浏览器访问)
在 IPython Notebook 中自动运行 %matplotlib inline