IPython笔记本内核在运行Kmeans时死亡

zzwlnbp8  于 2022-10-23  发布在  Python
关注(0)|答案(2)|浏览(220)

我用12个变量对大约400K个观测值进行K-means聚类。最初,当我用Kmeans代码运行单元时,它会在2分钟后弹出一条消息,说内核被中断并将重新启动。然后它需要很长时间,就像内核死掉了一样,代码将不再运行。
所以我尝试了125k个观察值和相同数量的变量。但我还是收到了同样的信息。
这是什么意思?。这是否意味着ipython笔记本无法在125k的观测数据上运行kmeans并杀死内核?。
如何解决这个问题?。这对我来说是非常重要的(
请告知。
我使用的代码:
来自sklearn。从sklearn集群导入KMean。指标导入剪影核心


# 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)
bsxbgnwa

bsxbgnwa1#

根据一些调查,这可能与iPython Notebook/Jupyter无关。这似乎是sklearn的问题,这可以追溯到numpy问题。请参阅相关的github问题sklearnherehere,以及底层的numpy问题here
最终,计算轮廓分数需要计算一个非常大的距离矩阵,而对于大量的行,距离矩阵似乎占用了系统太多的内存。例如,看看我的系统(OSX,8GB内存)在类似计算的两次运行中的内存压力-第一次峰值是用10k记录计算的Silhouette Score,第二次…plateau…用40k记录计算:


小时
根据相关的SO答案here,您的内核进程可能会被OS杀死,因为它占用了太多内存。
最终,这将需要对sklearn和/或numpy的底层代码库进行一些修复。在此期间,您可以尝试一些选项:

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

或者,如果你比我聪明,有空闲时间,可以考虑尝试对sklearn和/或numpy进行修复:)

fwzugrvs

fwzugrvs2#

即使这是老的,对于那些可能受益的人来说。。。
也许本文中的讨论会有所帮助。设置n_jobs=1为我解决了这个问题。但是,请注意,有一个关于n_jobsdeprecation的FutureWarning。

相关问题