返回

肘方法确定KMeans聚类的最佳K值

发布时间:2022-11-05 12:57:09 443
# windows# 数据

当Kmeans聚类的K没有指定时,可以通过肘部法来估计聚类数量

K_means参数的最优解是以成本函数最小化为目标

成本函数为各个类畸变程度之和

每个类的畸变程度等于该类重心与其内部成员位置距离的平方和

但是平均畸变程度会随着K的增大先减小后增大,所以可以求出最小的平均畸变程度

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
from sklearn.cluster import KMeans
from scipy.spatial.distance import cdist
# 1 数据可视化
cluster1 = np.random.uniform(0.5, 1.5, (2, 10))
cluster2 = np.random.uniform(3.5, 4.5, (2, 10))
X = np.hstack((cluster1, cluster2)).T
plt.figure()
plt.axis([0, 5, 0, 5])
plt.grid(True)
plt.plot(X[:, 0], X[:, 1], 'k.')
plt.show()

# 2 肘部法求最佳K值
K = range(1, 10)
mean_distortions = []
for k in K:
kmeans = KMeans(n_clusters=k)
kmeans.fit(X)
mean_distortions.append(
sum(
np.min(
cdist(X, kmeans.cluster_centers_, metric='euclidean'), axis=1))
/ X.shape[0])
plt.plot(K, mean_distortions, 'bx-')
plt.xlabel('k')
font = FontProperties(fname=r'c:\windows\fonts\msyh.ttc', size=20)
plt.ylabel(u'平均畸变程度', fontproperties=font)
plt.title(u'用肘部法确定最佳的K值', fontproperties=font)
plt.show()

 

 

 

 

 

肘方法确定KMeans聚类的最佳K值_数据可视化

 

从图中可以看出图片像一只手肘,肘处的K即为最佳K值:K=2

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
HDFS常用命令常用 2022-11-05 12:11:50