【问题标题】:Calculating optimal K value in K-means clustering with elbow curve用肘曲线计算 K-means 聚类中的最佳 K 值
【发布时间】:2020-12-16 16:38:15
【问题描述】:

我对各种 k 值进行了 K-means 聚类,并得到了每个 k 值的惯性(据我所知,惯性是所有聚类的标准差之和)

ks = range(1,30)
inertias = []
for k in ks:
    km = KMeans(n_clusters=k).fit(trialsX)
    inertias.append(km.inertia_)
    
plt.plot(ks,inertias)

根据我的阅读,最佳 k 值位于该图的“肘部”,但肘部的计算已被证明是难以捉摸的。如何以编程方式使用这些数据来计算 k?

【问题讨论】:

    标签: python machine-learning scikit-learn artificial-intelligence


    【解决方案1】:

    我会发布这个,因为这是迄今为止我想出的最好的:

    似乎使用一些缩放到沿曲线的一阶导数范围的阈值可能会做得很好。这可以通过拟合样条来完成:

    y_spl = UnivariateSpline(ks,inertias,s=0,k=4)
    x_range = np.linspace(ks[0],ks[-1],1000)
    
    y_spl_1d = y_spl.derivative(n=1)
    
    plt.plot(x_range,y_spl_1d(x_range))
    

    然后,您可能可以通过这条曲线的 90% 来定义 k。我想这是一种相当一致的方法,但可能有更好的选择。

    【讨论】:

      猜你喜欢
      • 2020-10-08
      • 2011-04-11
      • 2019-05-04
      • 2013-08-05
      • 2012-07-22
      • 1970-01-01
      • 2015-04-11
      • 2019-09-15
      • 2020-03-25
      相关资源
      最近更新 更多