确定K-means算法中的k值:方法与实践

作者:热心市民鹿先生2024.02.16 00:14浏览量:11

简介:确定K-means算法中的k值是一个关键问题,有多种方法可以帮助我们解决这个问题。本文将介绍一些常见的方法,包括肘部法则、轮廓系数和Calinski-Harabasz准则。通过这些方法,我们可以选择最佳的k值,从而获得更好的聚类效果。

千帆应用开发平台“智能体Pro”全新上线 限时免费体验

面向慢思考场景,支持低代码配置的方式创建“智能体Pro”应用

立即体验

确定K-means算法中的k值是一个重要的问题,因为k值的选择直接影响聚类的质量和结果。有许多方法可以帮助我们确定最佳的k值。以下是一些常见的方法:

  1. 肘部法则

肘部法则是一种通过观察误差平方和曲线来确定最佳k值的方法。该方法的思想是根据不同的k值进行聚类,并计算误差平方和。随着k值的增加,误差平方和会减小;但当k值达到某个点后,误差平方和的下降速度会急剧减缓。这个点就是“肘部”。选择使误差平方和下降最快的k值,可以获得更好的聚类效果。

下面是一个使用肘部法则确定最佳k值的Python代码示例:

  1. from sklearn.cluster import KMeans
  2. from sklearn.datasets import make_blobs
  3. import matplotlib.pyplot as plt
  4. # 生成样本数据
  5. X, y = make_blobs(n_samples=300, centers=4, random_state=0)
  6. # 计算不同k值下的误差平方和
  7. kmeans = KMeans(n_clusters=2, random_state=0)
  8. sse = []
  9. for k in range(1, 10):
  10. kmeans.set_params(n_clusters=k)
  11. kmeans.fit(X)
  12. sse.append(kmeans.inertia_)
  13. # 绘制误差平方和曲线
  14. plt.plot(range(1, 10), sse)
  15. plt.title('Elbow Method')
  16. plt.xlabel('Number of clusters (k)')
  17. plt.ylabel('Sum of squared distances')
  18. plt.show()

在绘制出的误差平方和曲线上,我们可以观察到曲线的“肘部”,选择使误差平方和下降最快的k值。

  1. 轮廓系数

轮廓系数是一种结合内聚度和分离度两种因素的评价指标。通过计算每个样本点到其同簇其他样本点的距离之和的平均值和该点到其他各簇的所有点的平均距离的最小值,可以得到每个样本点的轮廓系数。取所有样本点轮廓系数的平均值,即为该聚类结果的轮廓系数。轮廓系数越接近于1,聚类效果越好。

下面是一个使用轮廓系数确定最佳k值的Python代码示例:

  1. from sklearn.cluster import KMeans
  2. from sklearn.datasets import make_blobs
  3. import numpy as np
  4. # 生成样本数据
  5. X, y = make_blobs(n_samples=300, centers=4, random_state=0)
  6. # 计算不同k值下的轮廓系数
  7. silhouette_scores = []
  8. for k in range(1, 10):
  9. kmeans = KMeans(n_clusters=k, random_state=0)
  10. kmeans.fit(X)
  11. silhouette_avg = np.mean(silhouette_score(X, kmeans.labels_))
  12. silhouette_scores.append(silhouette_avg)
  13. # 绘制轮廓系数曲线
  14. plt.plot(range(1, 10), silhouette_scores)
  15. plt.title('Silhouette Method')
  16. plt.xlabel('Number of clusters (k)')
  17. plt.ylabel('Silhouette Score')
  18. plt.show()

在绘制出的轮廓系数曲线上,我们可以观察到曲线的峰值,选择使轮廓系数最大的k值。

article bottom image

相关文章推荐

发表评论