kmeans算法入门案例以聚类中心数的确定

简介: kmeans算法入门案例以聚类中心数的确定

kmeans案例分析


kmeans具体流程


第一步:指定聚类类数k(文章后面会讲解k的选择方法)

第二步:选定初始化聚类中心。随机或指定k个对象,作为初始化聚类中心

第三步:得到初始化聚类结果。计算每个对象到k个聚类中心的距离,把每个对象分配给离它最近的聚类中心所代表的类别中,全部分配完毕即得到初始化聚类结果,聚类中心连同分配给它的对象作为一类

第四步:重新计算聚类中心。得到初始化聚类结果后,重新计算每类的类中心点(计算均值),得到新的聚类中心

第五步:迭代循环,得到最终聚类结果。重复第三步和第四步,直到满足迭代终止条件


案例讲解


生成的数据


在本次实验中,我们先使用make_blobs()这个函数设置中心点并且生成了五个簇。生成的图像如下

代码


1. import matplotlib.pyplot as plt
2. from sklearn.cluster import MiniBatchKMeans,KMeans
3. from sklearn import metrics
4. from sklearn.datasets._samples_generator import make_blobs
5. 
6. #生成数据集,其中X为二维数组,y为一维数组
7. X,y=make_blobs(n_samples=100,n_features=2,centers=[[-1,-1],[0,0],[1,1],[2,2],[4,4]],
8.                cluster_std=[0.4,0.2,0.2,0.2,0.2],random_state=9)
9. 
10. 
11. #生成数据散点图
12. #plt.scatter(X[:,0],X[:,1],marker='o')
13. # plt.show()
14. 
15. for index,k in enumerate((2,3,4,5)):
16. # 将图像划分为两行两列的四个子图
17.     plt.subplot(2,2,index+1)
18. 
19. #调用MiniBatchKMeans算法接口函数
20. #n_clusters中心点的个数,batch_size确定MiniBatchKMeans的采样集的大小,random_state确定用于质心初始化的随机数生成
21. #计算群集中心并预测每个样本的群集索引
22.     y_pred = MiniBatchKMeans(n_clusters=k,batch_size=200,random_state=9).fit_predict(X)
23. 
24. #给聚类结果一个评分
25.     score = metrics.calinski_harabasz_score(X,y_pred)
26. 
27. #绘制散点图,参数c为颜色
28.     plt.scatter(X[:,0],X[:,1],c=y_pred)
29. #添加说明,前三个参数为x,y,字符串,transform为移动坐标轴,horizontalalignment为水平对其方式
30.     plt.text(.99,.01,('k=%d,score:%.2f' % (k,score)),transform=plt.gca().transAxes,
31.              size=10,horizontalalignment='right')
32. 
33. plt.show()

结果


然后进入一个循环,设置不同的聚类中心点k的值,调用kmeans算法的一个接口进行分类,并且通过数据可视化的手段将结果表现在一张图片上。图片如下

聚类中心数的确定

肘部法


肘部法则对于K-means算法的K值确定起到指导作用

简单叙述一下肘部法则,由下图,y轴为平均畸变程度,x轴为k的取值,随着x的增加,SSE会随之降低,当下降幅度明显趋向于缓慢的时候,取该值为K的值。

 

手肘法案例分析


我们先生成一个分为两簇的列表,然后带入到算法当中,观察手肘法能否判断出k为2。


生成的数据

代码


1. import numpy as np
2. from sklearn.cluster import KMeans
3. from scipy.spatial.distance import cdist
4. import matplotlib.pyplot as plt
5. 
6. #生成数据集
7. #random.uniform()随机生成范围在(0.5,1.5)内的2*10的实数列表
8. cluster1 = np.random.uniform(0.5, 1.5, (2, 10))
9. cluster2 = np.random.uniform(3.5, 4.5, (2, 10))
10. 
11. #将两个两行十列的列表进行纵向叠加,生成一个20*2的列表
12. X = np.hstack((cluster1, cluster2)).T
13. 
14. 
15. #展示随机生成的数据
16. plt.figure()
17. plt.axis([0, 5, 0, 5])
18. plt.grid(True)
19. plt.plot(X[:,0],X[:,1],'k.');
20. plt.show()
21. 
22. 
23. #遍历k并且可视化
24. K = range(1, 10)
25. meandistortions = []
26. for k in K:
27.     kmeans = KMeans(n_clusters=k)
28.     kmeans.fit(X)
29. #axis=0时会分别取每一列的最大值或最小值,axis=1时,会分别取每一行的最大值或最小值
30. print(cdist(X, kmeans.cluster_centers_, 'euclidean'))
31.     meandistortions.append(sum(np.min(cdist(X, kmeans.cluster_centers_, 'euclidean'), axis=1)) / X.shape[0])
32. 
33. #用蓝色带拐点的线展示meandistortions的变化
34. plt.plot(K, meandistortions, 'bx-')
35. #设置x轴坐标
36. plt.xlabel('k')
37. #设置y轴坐标
38. # plt.ylabel('平均畸变程度',fontproperties=font)
39. plt.ylabel('Ave Distor')
40. #设置标题
41. plt.title('Elbow method value K');
42. plt.show()

结果


目录
打赏
0
0
0
0
8
分享
相关文章
DeepSeek加持的通义灵码2.0 AI程序员实战案例:助力嵌入式开发中的算法生成革新
本文介绍了通义灵码2.0 AI程序员在嵌入式开发中的实战应用。通过安装VS Code插件并登录阿里云账号,用户可切换至DeepSeek V3模型,利用其强大的代码生成能力。实战案例中,AI程序员根据自然语言描述快速生成了C语言的base64编解码算法,包括源代码、头文件、测试代码和CMake编译脚本。即使在编译错误和需求迭代的情况下,AI程序员也能迅速分析问题并修复代码,最终成功实现功能。作者认为,通义灵码2.0显著提升了开发效率,打破了编程语言限制,是AI编程从辅助工具向工程级协同开发转变的重要标志,值得开发者广泛使用。
7877 68
DeepSeek加持的通义灵码2.0 AI程序员实战案例:助力嵌入式开发中的算法生成革新
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
222 6
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
107 0
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。
这些算法在实际应用中有哪些具体案例呢
【10月更文挑战第19天】这些算法在实际应用中有哪些具体案例呢
110 1
机器学习入门:理解并实现K-近邻算法
机器学习入门:理解并实现K-近邻算法
62 0
Threejs路径规划_基于A*算法案例完整版
这篇文章详细介绍了如何在Three.js中完整实现基于A*算法的路径规划案例,包括网格构建、路径寻找算法的实现以及路径可视化展示等方面的内容。
133 0
Threejs路径规划_基于A*算法案例完整版
Threejs路径规划_基于A*算法案例V2
这篇文章详细介绍了如何在Three.js中使用A*算法进行高效的路径规划,并通过三维物理电路的实例演示了路径计算和优化的过程。
127 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等