在前面学习的ML算法中,基本都是有监督学习类型,即存在样本标签。然而在机器学习的任务中,还存在另外一种训练样本的标签是未知的,即“无监督学习”。此类任务中研究最多、应用最广泛的是“聚类”(clustering),常见的无监督学习任务还有密度估计、异常检测等。本文将首先介绍聚类基本概念,然后具体地介绍几类细分的聚类算法。
参考资料:K-Means聚类算法原理
聚类试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集称为一个“簇”(cluster),不同的簇分布代表着聚类算法对这组数据集观测的不同角度。聚类就是将数据对象分组成多个类簇,划分的原则就是使得同一个簇内的对象之间具有较高的相似度,而不同簇之间对象之间的差异最大,一个类簇内的任意两点之间的距离小于不同类簇的任意两个点之间的距离。
在介绍聚类的具体算法之前,我们得要先讨论聚类算法涉及的最基本的问题:如何判断一个聚类算法结果的好坏?这就主要涉及了两个问题:性能度量和距离计算。
聚类性能度量亦称聚类“有效性指标”(validity index),与监督学习一样,它的目的是为了用来评估聚类结果的好坏,当我们能通过性能度量来评估聚类的好坏时,我们就可以通过将这个性能度量作为优化目标来生成更好的聚类结果。
(1)外部指标
将聚类结果与某个“参考模型”(reference model)进行比较,比如与领域专家的划分结果进行比较(其实这已经算是某种程度上对数据进行标注了)
基于上述可以得到下面常用的聚类性能度量外部指标:
显然上述性能度量的结果值均在【0,1】区间,且值越大越好。
(2)内部指标
直接考察聚类结果而不利用任何参考模型
显然DBI的值越小越好,而DI则相反。
主要是基于某种形式的距离来定义“相似度”,距离越大,相似度越小。
可参考: 【机器学习理论】第2部分 相关性度量
K-Means算法的思想很简单,对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大。
如果用数据表达式表示,假设簇划分为(C1,C2,...Ck),则我们的目标是最小化平方误差E:
其中μi是簇Ci的均值向量,有时也称为质心,表达式为:
k个初始化质心的选择对最后算法结果以及运行时间都有很重大的影响,所以需要选择合适的质心。
K-Means++算法就是对K-Means随机初始化质心的方法的优化。
在传统的K-Means算法中,我们在每轮迭代时,要计算所有的样本点到所有的质心的距离,这样会比较的耗时。那么,对于距离的计算有没有能够简化的地方呢?elkan K-Means算法就是从这块入手加以改进。它的目标是减少不必要的距离的计算。那么哪些距离不需要计算呢?
elkan K-Means利用了两边之和大于等于第三边,以及两边之差小于第三边的三角形性质,来减少距离的计算。在统的K-Means算法中,要计算所有的样本点到所有的质心的距离。如果样本量非常大,比如达到10万以上,特征有100以上,此时用传统的K-Means算法非常的耗时,就算加上elkan K-Means优化也依旧。在大数据时代,这样的场景越来越多。此时Mini Batch K-Means应运而生。
顾名思义,Mini Batch,也就是用样本集中的一部分的样本来做传统的K-Means,这样可以避免样本量太大时的计算难题,算法收敛速度大大加快。当然此时的代价就是我们的聚类的精确度也会有一些降低。一般来说这个降低的幅度在可以接受的范围之内。
在Mini Batch K-Means中,我们会选择一个合适的批样本大小batch size,我们仅仅用batch size个样本来做K-Means聚类。那么这batch size个样本怎么来的?一般是通过无放回的随机采样得到的。
为了增加算法的准确性,我们一般会多跑几次Mini Batch K-Means算法,用得到不同的随机采样集来得到聚类簇,选择其中最优的聚类簇。
K-Means是个简单实用的聚类算法,这里对K-Means的优缺点做一个总结。
K-Means的主要优点有:
1)原理比较简单,实现也是很容易,收敛速度快。4)主要需要调参的参数仅仅是簇数k。
K-Means的主要缺点有:
1)K值的选取不好把握以上~