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()

结果


目录
相关文章
|
14天前
|
存储 算法
算法入门:专题一:双指针(有效三角形的个数)
给定一个数组,找出能组成三角形的三元组个数。利用“两边之和大于第三边”的性质,先排序,再用双指针优化。固定最大边,左右指针从区间两端向内移动,若两短边之和大于最长边,则中间所有组合均有效,时间复杂度由暴力的O(n³)降至O(n²)。
|
13天前
|
存储 算法 编译器
算法入门:剑指offer改编题目:查找总价格为目标值的两个商品
给定递增数组和目标值target,找出两数之和等于target的两个数字。利用双指针法,left从头、right从尾向中间逼近,根据和与target的大小关系调整指针,时间复杂度O(n),空间复杂度O(1)。找不到时返回{-1,-1}。
|
15天前
|
机器学习/深度学习 算法 数据可视化
基于MVO多元宇宙优化的DBSCAN聚类算法matlab仿真
本程序基于MATLAB实现MVO优化的DBSCAN聚类算法,通过多元宇宙优化自动搜索最优参数Eps与MinPts,提升聚类精度。对比传统DBSCAN,MVO-DBSCAN有效克服参数依赖问题,适应复杂数据分布,增强鲁棒性,适用于非均匀密度数据集的高效聚类分析。
|
1月前
|
算法 数据挖掘 定位技术
基于密度的聚类算法能够在含有噪声的数据集中识别出任意形状和大小的簇(Matlab代码实现)
基于密度的聚类算法能够在含有噪声的数据集中识别出任意形状和大小的簇(Matlab代码实现)
|
21天前
|
机器学习/深度学习 分布式计算 算法
【风场景生成与削减】【m-ISODATA、kmean、HAC】无监督聚类算法,用于捕获电力系统中风场景生成与削减研究(Matlab代码实现)
【风场景生成与削减】【m-ISODATA、kmean、HAC】无监督聚类算法,用于捕获电力系统中风场景生成与削减研究(Matlab代码实现)
107 0
|
1月前
|
机器学习/深度学习 数据采集 算法
【风光场景生成】基于改进ISODATA的负荷曲线聚类算法(Matlab代码实现)
【风光场景生成】基于改进ISODATA的负荷曲线聚类算法(Matlab代码实现)
|
2月前
|
人工智能 算法 安全
【博士论文】基于局部中心量度的聚类算法研究(Matlab代码实现)
【博士论文】基于局部中心量度的聚类算法研究(Matlab代码实现)
|
2月前
|
算法 数据可视化 数据挖掘
基于AOA算术优化的KNN数据聚类算法matlab仿真
本程序基于AOA算术优化算法优化KNN聚类,使用Matlab 2022A编写。通过AOA搜索最优特征子集,提升KNN聚类精度,并对比不同特征数量下的聚类效果。包含完整仿真流程与可视化结果展示。
|
3月前
|
机器学习/深度学习 人工智能 算法
AP聚类算法实现三维数据点分类
AP聚类算法实现三维数据点分类
134 0
|
3月前
|
机器学习/深度学习 数据采集 算法
你天天听“数据挖掘”,可它到底在“挖”啥?——数据挖掘算法入门扫盲篇
你天天听“数据挖掘”,可它到底在“挖”啥?——数据挖掘算法入门扫盲篇
63 0

热门文章

最新文章