聚类的基本概念
聚类,顾名思义,就是将一个数据集中各个样本点聚集成不同的“类”。每个类中的样本点都有某些相似的特征。比如图书馆中,会把成百上千的书分成不同的类别:科普书、漫画书、科幻书等等,方便人们查找。每一种类别的书都有相似之处:比如科普书类别中的书基本上都是普及一些科学知识,这就是他们的相似之处。而聚类可以理解为“将一堆图书分为不同的类别的过程”。
这里不得不说明一下“聚类”和“分类”的区别:
- 聚类是刚创立一个图书馆,通过各种渠道获得了一堆图书,事先我不知道可以分为哪些类,但是随着分类的进行,逐渐被分为不同的类。这是一种无监督学习。
- 分类是现在有一堆图书,要将其按类别放入图书馆的书架上,这些类别都是事先确定的,比如科普类、文学类、历史类等等,按类别放入即可。这是一种监督学习。
数据的聚类方法有很多,如下图:
本文之后会主要介绍k-means(k均值聚类)和层次聚类算法中的聚合聚类。
上面这些聚类算法有一些共同步骤:
- 数据准备:对数据进行特征标准化和降维处理。就像将事先准备好的一本本图书一本本堆叠规整放好
- 特征选择/提取:从最初的特征中选择最有效的特征,进行转换形成新的突出特征,并将其存储在向量中。就像将图书中十分破烂或者不良的剔除,并存储在专门存储图书的地方
- 进行聚类:基于某种距离函数进行相似度度量,并形成聚簇。就像按照某种规律(书名出现相同的字)将图书之间归类(都出现百科归一类、都出现秋天归一类······)
- 结果评估:对聚类的分类结果进行评估,判断聚类进行的优劣。就像将图书聚类完之后,抽取图书并翻看内容来判断其类别是否正确
相似度度量
在上面的聚类算法的步骤中,“进行聚类”这一步骤中出现了“相似度度量”,这也是聚类算法中最重要的点。比如像我用图书的例子进行类比时,在“进行聚类”这一步说得就十分不清楚,因为我没法找到一个合适的标准去衡量图书之间的相似程度。
在聚类算法中,我们会通过计算“距离”去衡量相似度。当我们将特征数字化之后,特征之间是否相似也就是特征数字之间是否大小接近。需要注意的是,这里的“距离”是广义距离,并不仅仅是我们通常理解的 d 1 − d 2 d_1-d_2 d1−d2这种距离。下面我们来看几种比较常见的距离:
1、闵可夫斯基距离
① 欧式距离
欧式距离就是我们最常见的距离度量方法,就是两点之间的最短距离。
假设两个点的坐标分别为 x 1 ( x 11 , x 12 , x 13 , ⋅ ⋅ ⋅ , x 1 n ) x_1(x_{11},x_{12},x_{13},···,x_{1n}) x1(x11,x12,x13,⋅⋅⋅,x1n), x 2 ( x 21 , x 22 , x 23 , ⋅ ⋅ ⋅ , x 2 n ) x_2(x_{21},x_{22},x_{23},···,x_{2n}) x2(x21,x22,x23,⋅⋅⋅,x2n),(我们也称 x 11 , x 12 , x 13 , ⋅ ⋅ ⋅ , x 1 n x_{11},x_{12},x_{13},···,x_{1n} x11,x12,x13,⋅⋅⋅,x1n为 x 1 x_1 x1的特征)则这两个点的欧式距离为:
L ( x 1 , x 2 ) = ∑ i = 1 n ( x 1 i − x 2 i ) 2 L(x_1,x_2)=\sqrt{\sum_{i=1}^n{(x_{1i}-x_{2i})^2}} L(x1,x2)=i=1∑n(x1i−x2i