K 意味着在 scikit 中学习内核死亡 - 由于长时间计算
Posted
技术标签:
【中文标题】K 意味着在 scikit 中学习内核死亡 - 由于长时间计算【英文标题】:K means in scikit learn Kernel died - due to long computations 【发布时间】:2017-04-08 01:23:12 【问题描述】:我正在尝试使用 k 表示使用 scikit learn 进行聚类。因此使用肘法找到 k 的最佳值。
def elbow(df, n):
kMeansVar = [KMeans(n_clusters=k).fit(df.values) for k in range(10, n)]
centroids = [X.cluster_centers_ for X in kMeansVar]
k_euclid = [cdist(df.values, cent) for cent in centroids]
dist = [np.min(ke, axis=1) for ke in k_euclid]
wcss = [sum(d**2) for d in dist] #TILL HERE THE CODE RAN PROPERLY
tss = sum(pdist(df.values)**2)/df.values.shape[0]
bss = tss - wcss
plt.plot(bss)
plt.show()
我的数据框有 14 列和 188233 行。当我试图将整个数据帧传递给函数时,内核死了。当我试图只传递一列时,即使在那种情况下内核也死了。当我尝试进行分类时,我能够弄清楚代码运行到上面函数中标有注释的行。请建议我如何解决这个问题。
【问题讨论】:
死了是什么意思?你的程序有没有报错? @WasiAhmad 不,它没有显示任何错误,而是笔记本停止响应并且内核状态变为死亡。 你能检查一下是不是因为内存问题吗?当您运行程序时,您可以检查内存使用情况。你能在不改变列数的情况下用更少的行数进行测试,看看会发生什么? @WasiAhmad 它适用于 30k 行 @vikky 我相信我的猜测是正确的。您正在尝试进行内存昂贵的计算!您可以在具有更多内存的系统中运行代码,也可以将计算拆分为多个单元。 【参考方案1】:与其重新计算所有距离,不如使用 k-means 对象提供的inertia_
?
那么您就不需要有问题的行(它使用低效的 dats 结构)。
【讨论】:
以上是关于K 意味着在 scikit 中学习内核死亡 - 由于长时间计算的主要内容,如果未能解决你的问题,请参考以下文章
用python演绎神奇的生命游戏,在游戏中学习numpy和matplotlib动画
pytorch&scikit-learn机器学1- 赋予计算机从数据中学习的能力