聚类问题是机器学习中无监督学习的典型代表,在数据分析、模式识别的很多实际问题中得到了应用。我们知道,分类问题是机器学习中最常见的一类问题,它的目标是确定一个物体所属的类别。分类问题和聚类问题一个最重要的区别在于分类问题有标签,学习过程实际就是程序不断学习各个标签特点的过程,而聚类问题是一种无监督学习问题,我们事先并不知道这些事物一共多少个类,每个事物的所属类别,我们需要让程序基于一定的规则,自动地将事物分为我们需要的类。
我们在进行聚类分析的时候,需要确定无监督学习算法需要决定的三个问题:
1.分成几类?
2.样本之间的距离度量方式?
3.聚类策略?
下面,我们来看一些常用的聚类算法:
一、K-Means
K-Means聚类又叫K均值聚类,是一种迭代求解的聚类分析算法,其步骤是随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。
K-Means算法过程:
1.输入数据 ,聚类的簇数为K,最大迭代次数为N;
2.从中随机选择K个样本作为初始的k个质心:;
3.对于:
a.将簇划分初始化为:;
b.对于,计算样本和k个质心向量的距离:,将标记为最小的所对应的类别,此时,更新;
c.对于,对中所有的样本点重新计算新的质心:;
d.如果k个质心都没有发成变化,跳转至步骤4;
4.输出;算法结束。
K-Means的缺点:
1.k的取值较难确定;
2.最终聚类结果不稳定,依赖于初始化质心,结果随机性较大;
3.每次迭代都需要计算所有样本到质心的距离,计算量大,耗时。
二、K-Means++
K-Means++在K-Means基础上有所改进,最主要的区别在于质心的选择上有所不同。
K-Means++算法过程:
1.从输入数据中随机选择一个点作为第一个聚类中心;
2.对于数据集中的每一个点,计算它与已经选择的聚类中心的距离:
;
3.选择较大的数据点作为一个新的聚类中心;
4.重复2和3,直至选出k个质心;
5.利用k个质心来作为初始质心,运行K-Means算法。
由此可见:K-Means++与K-Means的区别就在于质心的选择上,K-Means++在质心选择时,使质心尽量分散,来降低K-Means算法在质心选择上的随机性。
三、elkan K-Means算法
elkan K-Means算法主要对K-Means算法的效率进行了改进:在K-Means中,每轮迭代都需要计算样本点多所有质心的距离,这一操作很耗时,elkan K-Means算法利用了两边之和大于第三边,两边之差小于第三边的三角形性质,来减少距离的计算量。
对于一个样本点和两个质心,,预先计算两个质心之间的距离,如果发现,则,这样,就没必要计算之间的距离了。
所以,对于一个样本和两个质心,,。
因此,elkan K-Means算法减少了K-Means算法的计算量,提升了算法效率。但elkan K-Means算法不支持稀疏的数据。
四、MiniBatch K-Means算法
MiniBatch K-Means算法也是K-Means算法的一个变种,其目的也是减少计算量,不过优化的依旧是同样的目标函数。
MiniBatch K-Means算法会先随机抽取部分样本(无放回),然后计算这些样本会被分配到的最近的中心点,然后更新中心点,直到算法收敛或到达指定的迭代次数。
MiniBatch K-Means算法会更快的将算法在局部最优点进行收敛,虽然会有一定的精度损失,但一般而言这种损失相较于效率的提升是可接受的。
K-Means总结:
优点:
1.原理简单,容易实现,收敛速度快;
2.聚类效果较优;
3.算法可解释性强;
4.调参较简单,主要调参仅仅是K。
缺点:
1.K值的选取不好把握;
2.对于不是凸数据的数据集,比较难收敛;
3.如果各隐含类别的数据不平衡,或各隐含类别的方差不同,聚类效果不佳;
4.采用迭代方法,得到的结果只是局部最优;
5.对噪音数据和异常点比较敏感。
注意事项: 在使用K-Means算法前,一定要先对数据进行标准化或归一化处理,以避免量纲不同造成距离差异,影响最终聚类结果。
来源:CSDN
作者:Jerry_Chang31
链接:https://blog.csdn.net/Jerry_Chang31/article/details/103824385