写在前面

在前面学习的ML算法中,基本都是有监督学习类型,即存在样本标签。然而在机器学习的任务中,还存在另外一种训练样本的标签是未知的,即“无监督学习”。此类任务中研究最多、应用最广泛的是“聚类”(clustering),常见的无监督学习任务还有密度估计、异常检测等。本文将首先介绍聚类基本概念,然后具体地介绍几类细分的聚类算法。

参考资料:K-Means聚类算法原理

1. 聚类简介

聚类试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集称为一个“簇”(cluster),不同的簇分布代表着聚类算法对这组数据集观测的不同角度。聚类就是将数据对象分组成多个类簇,划分的原则就是使得同一个簇内的对象之间具有较高的相似度,而不同簇之间对象之间的差异最大,一个类簇内的任意两点之间的距离小于不同类簇的任意两个点之间的距离。

在介绍聚类的具体算法之前,我们得要先讨论聚类算法涉及的最基本的问题:如何判断一个聚类算法结果的好坏?这就主要涉及了两个问题:性能度量和距离计算。

1.1 性能度量

聚类性能度量亦称聚类“有效性指标”(validity index),与监督学习一样,它的目的是为了用来评估聚类结果的好坏,当我们能通过性能度量来评估聚类的好坏时,我们就可以通过将这个性能度量作为优化目标来生成更好的聚类结果。

(1)外部指标

将聚类结果与某个“参考模型”(reference model)进行比较,比如与领域专家的划分结果进行比较(其实这已经算是某种程度上对数据进行标注了)


基于上述可以得到下面常用的聚类性能度量外部指标:

  • Jaccard系数(JC)


  • FM指数(FMI)


  • Rand指数(RI)


显然上述性能度量的结果值均在【0,1】区间,且值越大越好。

(2)内部指标

直接考察聚类结果而不利用任何参考模型



显然DBI的值越小越好,而DI则相反。

1.2 距离计算

主要是基于某种形式的距离来定义“相似度”,距离越大,相似度越小。

可参考: 【机器学习理论】第2部分 相关性度量

2. k-means算法

K-Means算法是无监督的聚类算法,它实现起来比较简单,聚类效果也不错,因此应用很广泛。K-Means算法有大量的变体,本文就从最传统的K-Means算法讲起,在其基础上讲述K-Means的优化变体方法。包括初始化优化K-Means++, 距离计算优化elkan K-Means算法和大数据情况下的优化Mini Batch K-Means算法。
2.1 k-means原理

K-Means算法的思想很简单,对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大。

如果用数据表达式表示,假设簇划分为(C1,C2,...Ck),则我们的目标是最小化平方误差E:


其中μi是簇Ci的均值向量,有时也称为质心,表达式为:


2.2 k-means算法流程


2.3 K-Means初始化优化K-Means++

k个初始化质心的选择对最后算法结果以及运行时间都有很重大的影响,所以需要选择合适的质心。

K-Means++算法就是对K-Means随机初始化质心的方法的优化。


2.4K-Means距离计算优化elkan K-Means

在传统的K-Means算法中,我们在每轮迭代时,要计算所有的样本点到所有的质心的距离,这样会比较的耗时。那么,对于距离的计算有没有能够简化的地方呢?elkan K-Means算法就是从这块入手加以改进。它的目标是减少不必要的距离的计算。那么哪些距离不需要计算呢?

    elkan K-Means利用了两边之和大于等于第三边,以及两边之差小于第三边的三角形性质,来减少距离的计算。
    第一种规律是对于一个样本点x和两个质心μj1,μj2。如果我们预先计算出了这两个质心之间的距离D(j1,j2),则如果计算发现2D(x,j1)≤D(j1,j2),我们立即就可以知道D(x,j1)≤D(x,j2)。此时我们不需要再计算D(x,j2),也就是说省了一步距离计算。
    第二种规律是对于一个样本点x和两个质心μj1,μj2。我们可以得到D(x,j2)≥max{0,D(x,j1)−D(j1,j2)}。这个从三角形的性质也很容易得到。
    利用上边的两个规律,elkan K-Means比起传统的K-Means迭代速度有很大的提高。但是如果我们的样本的特征是稀疏的,有缺失值的话,这个方法就不使用了,此时某些距离无法计算,则不能使用该算法。
2.5 大样本优化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-Means的主要优点有:

    1)原理比较简单,实现也是很容易,收敛速度快。
    2)聚类效果较优。
    3)算法的可解释度比较强。

    4)主要需要调参的参数仅仅是簇数k。

K-Means的主要缺点有:

    1)K值的选取不好把握
         2)对于不是凸的数据集比较难收敛
    3)如果各隐含类别的数据不平衡,比如各隐含类别的数据量严重失衡,或者各隐含类别的方差不同,则聚类效果不佳。
    4) 采用迭代方法,得到的结果只是局部最优。
    5) 对噪音和异常点比较的敏感。


以上~


Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐