【算法】K-Means聚类算法(k-平均或k-均值)

1.聚类算法和分类算法的区别

a)分类

分类(Categorization or Classification)就是按照某种标准给对象贴标签(label),再根据标签来区分归类。

举例:

假如你有一堆动物的头像图片样本,想把它们进行分类,分成:猫,狗,鱼等。当在有新的动物图片进来之后,能够自动的识别出属于哪一类,这就是分类,而猫,狗,鱼等就是标签

b)聚类

聚类是指事先没有“标签”而通过某种成团分析找出事物之间存在聚集性原因的过程。聚类是在没有划分类别的情况下,根据数据相似度进行样本分组的一种方法。

与分类模型需要使用有类标记样本构成的训练数据不同,聚类模型可以建立在无类标记的数据上,是一种非监督的学习算法。

举例:

假如你有一堆数据样本,想把这些数据分类,但是你也不知道怎么分,你只知道要分3类,4类或者其他更多。这时候就等于是把一堆零散的样本聚成几类。

c)总结:分类和聚类最大的区别就是有无标签。

2.K-means属于聚类算法

假设你有X1——Xi个样本,想把它们分成Uk个中心

算法的步骤:

a).随机的选择U1---Uk个中心,用样本Xi去减分别减这个中心值,得到距离类别中心最近的类别,归为同一个簇。
b).将这个簇的中心值归为这个簇的所有样本的平均值,重新执行第一步。
c).不断进行迭代,也就是不断的执行a)和b)两步,直到类别中心小于某个阈值也就是终止条件。

这些终止条件可以是:1)迭代次数; 2)簇中心变化率 ;3)最小平方误差

3.注意事项:

a).K-means算法是初始敏感的

如下图:在初始选择簇类点时,对后面的聚类影响很大,下面初始选择4个红点作为簇类中心,结果就变成了右边这种情况了。并不是我们想要分成的四类

解决办法:聚类完之后计算一下簇的均方误差,如果某一个簇的均方误差特别大,就可以判断这个簇聚的不对,初值选的不行,把簇中心比较近的合成一类,重新再聚一遍

这种叫做二分K-Means聚类

b)异常点处理

K—Means算法是将簇中所有的均值作为质心,若簇中含有异常点,将导致均值偏离严重。

例如:当有一个数组:1,2,3,4,100的均值是22,显然距离大多数数据比较远

解决办法:该取中位数3为比较稳妥。这种取中位数的为簇中心的算法叫K-Mediods聚类

4.总结:

虽然有以下缺点:

a)不适合于发现非凸形状的簇或者大小差别很大的簇

b)对噪声和孤立点数据敏感

但是,K-Means聚类算法可以作为其他聚类算法的基础

原文地址:https://www.cnblogs.com/liangxuehui/p/5804894.html