5 分钟带你弄懂 k-means 聚类

5 分钟带你弄懂 k-means 聚类聚类与分类的区别分类 类别是已知的 通过对已知分类的数据进行训练和学习 找到这些不同类的特征 再对未分类的数据进行分类 属于监督学习 聚类 事先不知道数据会分为几类 通过聚类分析将数据聚合成几个群体 聚类不需要对数据进行训练和学习 属于无监督学习 关于监督学习和无监督学习 这里给一个简单的介绍 是否有监督 就看输入数据是否有标签 输入数据有标签 则为有监督学习 否则为无监督学习 更详尽的解释会在后续

聚类与分类的区别

分类:类别是已知的,通过对已知分类的数据进行训练和学习,找到这些不同类的特征,再对未分类的数据进行分类。属于监督学习。

聚类:事先不知道数据会分为几类,通过聚类分析将数据聚合成几个群体。聚类不需要对数据进行训练和学习。属于无监督学习。

关于监督学习和无监督学习,这里给一个简单的介绍:是否有监督,就看输入数据是否有标签,输入数据有标签,则为有监督学习,否则为无监督学习。更详尽的解释会在后续博文更新,这里不细说。

k-means 聚类

聚类算法有很多种,K-Means 是聚类算法中的最常用的一种,算法最大的特点是简单,好理解,运算速度快,但是只能应用于连续型的数据,并且一定要在聚类前需要手工指定要分成几类。

K-Means 聚类算法的大致意思就是“物以类聚,人以群分”:

  1. 首先输入 k 的值,即我们指定希望通过聚类得到 k 个分组;
  2. 从数据集中随机选取 k 个数据点作为初始大佬(质心);
  3. 对集合中每一个小弟,计算与每一个大佬的距离,离哪个大佬距离近,就跟定哪个大佬。
  4. 这时每一个大佬手下都聚集了一票小弟,这时候召开选举大会,每一群选出新的大佬(即通过算法选出新的质心)。
  5. 如果新大佬和老大佬之间的距离小于某一个设置的阈值(表示重新计算的质心的位置变化不大,趋于稳定,或者说收敛),可以认为我们进行的聚类已经达到期望的结果,算法终止。
  6. 如果新大佬和老大佬距离变化很大,需要迭代3~5步骤。

1.设定 k 值为2

2.选择初始大佬(就选 P1 和 P2)

3.计算小弟与大佬的距离:

这里写图片描述
从上图可以看出,所有的小弟都离 P2 更近,所以次站队的结果是:

4.召开选举大会:

这时可以看到P2、P3离P1更近,P4、P5、P6离P哥更近,所以第二次站队的结果是:

我们可以发现,这次站队的结果和上次没有任何变化了,说明已经收敛,聚类结束,聚类结果和我们最开始设想的结果完全一致。

K-Means 聚类 MATLAB 实现

关于 K-Means 的算法具体代码,网上有各种版本,这里也不赘述了,下面结合 MATLAB 中的一些函数给出一个较为简洁的版本:

X2 = zscore(X); % zscore方法标准化数据 Y2 = pdist(X2); % 计算距离(默认欧式距离) Z2 = linkage(Y2); % 定义变量之间的连接,用指定的算法计算系统聚类树 T = cluster(Z2,6); % 创建聚类 H = dendrogram(Z2); %作出系谱图 

当然,MATLAB 也提供了 kmeans() 函数可供直接聚类使用,详情可参与其文档。


———————— END ————————


喜欢本文的朋友,欢迎关注公众号 “机器修行”,收看更多精彩内容

在这里插入图片描述

点个[在看],是对博主最大的支持!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/175962.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午11:00
下一篇 2026年3月26日 下午11:00


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号