聚类任务
对于训练样本的标记信息是未知的情况下,我们的目标就会变成通过对无标记训练样本的学习来揭示数据的内在性质及规律,我们把这样的学习方法称之为“无监督学习”,而在此类学习任务中,研究最多应用最广的就是“聚类”。
在聚类算法中,我们试图将数据集中的样本划分为若干个不相交的子集,每个子集称为一个“簇”。而对于样本来说,我们并不知道其内部存在的类别,所以我们分出的这些“簇”就可能对应着一些潜在的概念(类别),与分类算法的区别就在于,这些潜在的概念在之前我们是完全未知的。
一般的聚类结果展示如下图所示:
基于不同的学习策略,人们设计出多种类型的聚类算法,在学习算法之前,我们先来了解一下性能度量和距离运算。
性能度量
我们在之前的文章中了解过了分类算法的评估方式,对于聚类来说,我们有一些特殊的性能度量方式,让我们来了解一下。
对于聚类来说,我们把每个类别分成了相应的“簇”,直观上看我们希望“物以类聚”,而想要把很多“簇”聚的好,我们就希望“簇内的相似度”高且”簇间的相似度“低。
聚类的性能度量大致分类两类,一类是将聚类结果与某个”参考模型“进行比较,称为”外部指标“;另一类是直接考察聚类结果而不利用任何参考模型,称为”内部指标“。
根据上面的式子,我们可以得到下面这些常用的外部指标:
Jaccard系数
FM指数
Rand指数
很显然,对于上面的性能度量结果来说,结果值都在[0,1]之间,并且值越大越好。
根据上面的式子,我们可以得到下面这些常用的内部指标:
DB指数
Dunn指数
很显然,DBI的值越小越好,DI的值越大越好。
距离度量
对于函数d i s t ( ) dist()dist(),如果他表示一个距离的度量,我们就要满足一些基本性质:
注:当我们遇到的不同属性的重要性不同的时候,我们也可以对特征进行加权。
K-Means聚类
聚类算法中,最典型最常用的算法就是K-Means(K均值)算法,让我们来了解一下K-Means的原理及流程。
K-Means算法最大的特点是简单,好理解,运算速度快,但是只能应用于连续型的数据,并且一定要在聚类前需要手工指定要分成几类。K-Means算法的流程如下:
K-Means++(初始化优化)
K-Means++(初始化优化)
根据K-Means算法的原理我们不难发现,最初的质心选择对聚类的结果和运行时间有着很大的影响,因此我们需要选择合适的K个质心,K-Means++就使用了更优化的方法来初始化质心,让我们来看一下K-Means++的优化策略:
(1)从输入的数据点集合中随机选择一个点作为第一个聚类中心μ 1
(2)对于数据集中的每一个点 ,计算它与最近聚类中心(指已选择的聚类中心)的距离D(x);
(3)选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大;
(4)重复(2)(3)步骤直到选择出k个聚类质心;
(5)利用这k个质心来作为初始化质心去运行标准的K-Means算法。
过程中提到的D(x)计算方法如下:
elkan K-Means(距离计算优化)
elkan K-Means(距离计算优化)
在传统的K-means算法中,我们每次迭代都需要计算所有样本到所有质心的距离,这样做会大大浪费我们的时间,elkan K-Means算法就是从距离的优化,去减少一些不必要的距离计算,来看一下它的原理。
elkan K-Means利用了两边之和大于等于第三边,以及两边之差小于第三边的三角形性质,来减少距离的计算。
利用上边的两个规律,elkan K-Means比起传统的K-Means迭代速度有很大的提高。但是如果我们的样本的特征是稀疏的,有缺失值的话,这个方法就不使用了,此时某些距离无法计算,则不能使用该算法。
Mini Batch K-Means(大样本优化)
Mini Batch 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。
K-Means的主要缺点有:
- K值的选取不好把握;
- 对于不是凸的数据集比较难收敛;
- 如果各隐含类别的数据不平衡,比如各隐含类别的数据量严重失衡,或者各隐含类别的方差不同,则聚类效果不佳;
- 采用迭代方法,得到的结果只是局部最优;
- 对噪音和异常点比较的敏感。