我是靠谱客的博主 怡然蜡烛,最近开发中收集的这篇文章主要介绍Kmeans聚类算法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Kmeans聚类算法概述 

Kmeans聚类算法是一种迭代求解的聚类分析算法,是一种无监督学习算法。

聚类就是将物理或抽象对象的集合分成由类似的对象组成的多个类的过程,通俗的讲就是将相似的样本自动归到一个类别中。聚类算法事先并不知道数据的类别标签,只是根据数据特征进行学习,找到相似数据的特征,然后把已知的数据集划分成几个不同的类别。

Kmeans聚类算法流程

首先需要指定K值,K值就是你要将数据划分的类别数,假设要把数据分成3类,那么K值就是3。

因为K值是3,所以算法在空间上随机生成3个点,这3个点就是中心点。

计算所有的点到这3个点的距离,每个点选择距离自己最近的点作为自己的中心点,这个时候,数据就已经被Kmeans算法划分成3类了。

计算这3类数据当中,每类数据的均值,以这个均值作为新的中心点。

再次计算所有点到这3个新的中心点的距离,再次计算均值求新的中心点,重复操作,直到达到规定轮数,或者中心点的变动幅度很小的时候,算法就可以结束了。

确定K值

在实际的应用当中,我们是不知道数据分为多少类的,又或者说是不知道把数据分为多少类比较好,所以选择K值是需要思考比较困难的。

手肘法

随着聚类数k的增大,样本划分会更加精细,每个簇的聚合程度会逐渐提高,那么每个数据点到中心点的距离之和就越小。举个例子,如果所有的数据都是一类的,那么每个点到中心点的距离都是两点一线,到中心点距离之和就是唯一的,如果分为两类,每个数据就会选择两个中心点当中比较近的一个中心点,那么中心点距离之和就要比只有一个类的时候要小很多,最极端的情况就是每一个数据就是一个类,每一个数据点都是中心点,那这些数据点到中心点的距离之和就是0。手肘法的原理就是循环尝试K值,计算在不同K值的情况下,观察每个数据点到中心点距离之和的变化趋势,在k值的增长中,会有一个很明显的拐点,在这个值中,小于这个值的距离之和的值下降迅速,大于这个值的距离之和的值下降缓慢,那这个拐点的值就是最佳的K值,这个拐点也被成为是手肘。当然这个方法只适用于K值不大的情况,如果K值过大,那进行比较计算的次数就太多了,效率不高,不过也可以用一个学习率来加以改进,不过肯定是需要时间的。

轮廓系数法

轮廓系数公式为

s=frac{b-a}{max(b,a)}

其计算公式如图所示,其中,a表示这个点与同一类中所有其他点的平均距离,即样本点与同一类中其他点的相似度。b表示这个点与下一个最近的中心点中所有点的平均距离,即样本点与下一个最近的一类中其他点的相似度。对于每个类而言,类内的数据差异小,而类外的数据差异大,轮廓系数S正是描述类内外差异的关键指标。由公式可知,S取值范围为(-1, 1),当S越接近于1,则聚类效果越好,越接近-1,聚类效果越差。若为0,则说明这个点在两个类的当中,求所有样本的轮廓系数的均值。得到的结果就可以判断当前的K值是否是合理的。

Kmeans聚类算法的优缺点

优点:

1.简单明了,计算复杂度低,收敛速度快。

2.算法的可解释度比较强。

3.对大规模数据集进行聚类分析时,算法聚类较高效且聚类效果较好。

缺点:

1.结果不稳定,由于初始值随机设定,以及数据的分布情况,每次训练的结果往往有一定的差异。

2.无法解决样本不均衡的问题。

3.获得的解也许是局部的,而不是全局的。

4.容易被异常值影响。

Kmeans聚类算法代码

from sklearn.cluster import KMeans
#引入kmeans算法
clf= KMeans(n_clusters=3)
#K值为3
clf.fit(x_train)
#进行训练只需要一个值
res = clf.predict(x_test)

代码函数及参数说明见

https://scikit-learn.org.cn/view/383.html

最后

以上就是怡然蜡烛为你收集整理的Kmeans聚类算法的全部内容,希望文章能够帮你解决Kmeans聚类算法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部