目录

kmeans案例分析

kmeans具体流程

案例讲解

生成的数据

代码

结果

聚类中心数的确定

肘部法

手肘法案例分析

生成的数据

代码

结果


kmeans案例分析

kmeans具体流程

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

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

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

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

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

案例讲解

生成的数据

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

代码

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

结果

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

聚类中心数的确定

肘部法

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

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

手肘法案例分析

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

生成的数据

代码

import numpy as np
from sklearn.cluster import KMeans
from scipy.spatial.distance import cdist
import matplotlib.pyplot as plt#生成数据集
#random.uniform()随机生成范围在(0.5,1.5)内的2*10的实数列表
cluster1 = np.random.uniform(0.5, 1.5, (2, 10))
cluster2 = np.random.uniform(3.5, 4.5, (2, 10))#将两个两行十列的列表进行纵向叠加,生成一个20*2的列表
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()#遍历k并且可视化
K = range(1, 10)
meandistortions = []
for k in K:kmeans = KMeans(n_clusters=k)kmeans.fit(X)#axis=0时会分别取每一列的最大值或最小值,axis=1时,会分别取每一行的最大值或最小值print(cdist(X, kmeans.cluster_centers_, 'euclidean'))meandistortions.append(sum(np.min(cdist(X, kmeans.cluster_centers_, 'euclidean'), axis=1)) / X.shape[0])#用蓝色带拐点的线展示meandistortions的变化
plt.plot(K, meandistortions, 'bx-')
#设置x轴坐标
plt.xlabel('k')
#设置y轴坐标
# plt.ylabel('平均畸变程度',fontproperties=font)
plt.ylabel('Ave Distor')
#设置标题
plt.title('Elbow method value K');
plt.show()

结果

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

  1. python实现kmeans算法对图片的聚类分割

    kmeans算法未调用库,使用基本数据结构实现 1.     对于给定的图片IMGP8080.jpg,要求把河流部分划分出来.可以采用以下方法:在该图像中分别在河流部分与非河流部分画出一个窗口,把在这 ...

  2. 基于 K-means 算法实现的文本聚类(干货)

    k-means算法又称k均值,顾名思义就是通过多次求均值而实现的聚类算法.是一种无监督的机器学习方法,即无需知道所要搜寻的目标,而是直接通过算法来得到数据的共同特征.其具体算法思想如下图所示: 1.首 ...

  3. 基于Kmeans算法的文档聚类(包含Java代码及数据格式)

    本文作者:合肥工业大学 管理学院 钱洋 email:1563178220@qq.com 内容可能有不到之处,欢迎交流. 未经本人允许禁止转载. 介绍 给定多篇文档,如何对文档进行聚类.本博客使用的是k ...

  4. ML之Clustering之K-means:K-means算法简介、应用、经典案例之详细攻略

    ML之Clustering之K-means:K-means算法简介.应用.经典案例之详细攻略 目录 K-means算法简介 1.K-means算法适用的数据类型​ 2.K-Means算法的全局最优解和 ...

  5. Kmeans算法及简单案例

    Kmeans算法及简单案例 Kmeans算法流程 选择聚类的个数k. 任意产生k个聚类,然后确定聚类中心,或者直接生成k个中心. 对每个点确定其聚类中心点. 再计算其聚类新中心. 重复以上步骤直到满足 ...

  6. matlab 职坐标,机器学习入门之机器学习实战ByMatlab(三)K-means算法

    本文主要向大家介绍了机器学习入门之机器学习实战ByMatlab(三)K-means算法,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助.K-means算法属于无监督学习聚类算法,其计算步 ...

  7. 典型聚类——K-means算法原理及python实战

    1 聚类算法简要介绍 1.1 聚类是什么        聚类是机器学习中的一种重要的无监督算法,可以将数据点归为一系列的特定组合.聚类算法可以将数据点聚成不同的类,揭示数据集中蕴含的不为人知的规律,从 ...

  8. kmeans中的k的含义_聚类分析:kmeans 算法簇个数的确定

    kmeans算法是无监督聚类学习中最常见.最常用的算法之一,其基本原理如下: 1.随机初始化k个聚类中心点,并计算数据中每个点到k个点的距离: 2.将每个数据点分到距离聚类中心点最近的聚类中心中: 3 ...

  9. 聚类(Clustering): K-means算法

    聚类(Clustering): K-means算法 1.归类: 聚类(clustering)属于非监督学习(unsupervised learning) 无类别标记( class label) 3. ...

最新文章

  1. linux vsftpd架设
  2. 使用php+swoole对client数据实时更新
  3. 错误处理笔记 导入 torch.utils.tensorboard时 找不到tensorboard
  4. 【Android】SDDL刷机
  5. 特斯拉自动驾驶使用的技术_使用自回归预测特斯拉股价
  6. apache axis 1.4的invoke方法设置超时_Kubernetes 网络故障常见排查方法
  7. 软件开发模型_20202021企业软件开发流程(5)软件开发过程模型瀑布模型(2)软件设计、编码...
  8. Windows10远程连接服务器时出现“这可能是由于CredSSP加密数据库修正”的错误提示的解决办法
  9. 矩阵的特征值及特征向量理解
  10. 计算机故障升温降温法,电脑故障排除1000例
  11. Ubuntu: 使用U盘拷贝文件
  12. signature=00e71e60a412c9a393d6d1740e539e14,2006年江苏专转本(英语)真题试卷
  13. 来来来,一起去看临泉王冲林岗的红枫叶
  14. 【单片机毕业设计】【mcuclub-103】智能花盆 | 智能养殖箱 | 多功能花盆 | 多功能养殖箱【实物设计】
  15. 【突然断电后电脑无法开机】
  16. python求对数_python中取对数
  17. JVM基本概念,Java编译方式,Javac编译的过程
  18. 亚马逊上卖毛绒玩具CPC认证注意事项
  19. 联想拯救者R7000(自带windows)安装ubuntu20.04,解决GTX1650驱动问题
  20. 名编辑电子杂志大师教程 | 输出HTML,*.EXE,*.ZIP,*.APP电子杂志格式

热门文章

  1. VScode 代码特效
  2. 咖啡馆破圈的下一站是中国
  3. 家电怕买贵 双11实测比价揭迷雾:9款大牌家电京东价最低​
  4. 中国互联网九大骨干网
  5. python最新版本安卓下载_Python文档app最新版下载-Python文档app安卓版下载v1.0- 游侠下载站...
  6. 机器学习中的评价指标(分类指标评Accuracy、Precision、Recall、F1-score、ROC、AUC )(回归指标评价MSE、RMSE、MAE、MAPE、R Squared)
  7. c#设计12星座速配软件_十二星座速配系统程序代码
  8. TR069之CPE与ACS的Digest验证
  9. 时间格式区别之YYYY/MM/dd HH:mm 与 yyyy/MM/dd HH:mm
  10. Elasticsearch搜索引擎该怎么使用,这篇文章彻底讲透(荣耀典藏版)