#1. 拿到数据(x) # 2.设定k[1,10]分别得到不同kmeans模型的代价 # 3.画肘部曲线 # 4.找到最优K # 5.用最优k训练新的kmeans模型 # 6.实现测试数据聚类预测 import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import KMeans plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus']=False # 2.设定k[1,10]分别得到不同kmeans模型的代价 def curve(x): k_list=[]#横轴数据记录 inertia_list=[]#纵轴数据记录 for i in range(10): k=i+1 #声明一个类别为当前k值的kmeans模型 model=KMeans(n_clusters=k) #用数据训练 model.fit(x) k_list.append(k)#记录当前k值 inertia_list.append(model.inertia_)#记录当前模型损失值 plt.plot(k_list,inertia_list,c='g') plt.scatter(k_list,inertia_list,c='r') plt.title('肘部曲线') plt.xlabel('K值') plt.ylabel('距离平方和J') #给点加标注 for i in range(10): plt.annotate(str(k_list[i]),xy=(k_list[i],inertia_list[i]), textcoords='offset points',xytext=(+1,+5),fontsize=15) plt.show() #画样本点和聚类中心 def sample_center(x,k,kmeans_model): sample_mark=['or','ob','og','oy','ok']#样本点样式库 center_mark=['Dr','Db','Dg','Dy','Dk']#聚类中心样式库 (D代表方块) center_vec=kmeans_model.cluster_centers_ #获取聚类中心的坐标 sample_label=kmeans_model.predict(x) #预测每个样本点所属聚类中心索引,即类别标签 #画样本点 for i in range(len(x)): plt.plot(x[i,0],x[i,1],sample_mark[sample_label[i]]) #画聚类中心 for j in range(k): plt.plot(center_vec[j,0],center_vec[j,1],center_mark[j],markersize=20) plt.show() #1. 拿到数据(x) x=np.loadtxt(r'./test.txt') plt.scatter(x[:,0],x[:,1]) plt.show() # 3.画肘部曲线 curve(x) #确定最优k值 k=4 #4.声明一个新的kmeans模型对x进行训练 kmeans_model=KMeans(n_clusters=k) kmeans_model.fit(x) #5.画出样本点x,并根据类别标签上色:所属聚类中心的索引 #画出聚类中心:聚类中心的坐标 sample_center(x,k,kmeans_model)
聚类,肘部曲线,聚类中心
最新推荐文章于 2023-11-30 14:13:35 发布
本文通过实例展示了如何使用K-means算法进行数据聚类,并通过绘制肘部曲线找出最佳聚类数K。首先,通过设置不同的K值训练模型,计算模型的代价;然后,创建肘部曲线帮助选择最优K值;最后,用选定的K值训练模型并对测试数据进行预测。
摘要由CSDN通过智能技术生成