目录
简介:
聚类任务属于“ 无监督学习 ”(UNsupervise leaning),即在训练的过程中不需要给出label。
聚类算法试图将所给数据集中的样本划分为若干个互不相交的子集,每个子集称之为一个 “ 簇 ”。
我们使用聚类算法的目标是通过对无标记样本的学习来揭示数据的内在性质及规律, 所以其可以作为一个用于寻找数据的内在分布结构的一个单独的过程,也可以成为其他学习任务的前驱过程。
性能度量:
顾名思义,性能度量的任务就是通过某种人为定义的性能来评估聚类结果的好与坏,又称聚类的有效性指标(validity index)。
对于聚类算法所得到的 簇 , 我们自然是希望其 “ 簇内相似度 ”较高, 而 “ 簇外相似度 ” 低较低。
所以,聚类的性能度量大致分为两类,即 “ 外部指标 ” 与 “ 内部指标 ”
其中,外部指标主要是将聚类的结果与某个选定的参考模型进行比较,而内部指标则是直接考察最终结果,不利用任何的参考模型。
外部指标
对于 外部指标 有如下的定义
根据上述所定义的a, b, c, d 我们可以推出如下一些常用的聚类性能度量外部指标:
显然,上述的这些外部指标的评价结果均在 0-1 之间, 且值越大越好。
内部指标
下面我们来看一些常用的内部指标:
首先做如下的一些定义:
有了这些定义,我们可以做出如下的推导
距离计算:
在内部指标的计算中我们使用 d 来代表一些样本之间的距离,但是距离是一个很抽象的概念,对于所选取距离性质的不同,得到的结果也就不同(譬如使用欧氏距离和曼哈顿距离所得到的值就不同),但是无论使用哪种度量距离,其都需要满足如下的一些性质;
下面我们来看一些常用的度量距离:
闵可夫距离:
我们在计算距离的时候所使用的是样本属性(或者说是特征)的具体值; 例如西瓜的甜度是0.4,或者0.5等
在先前,我们通常将属性划分为“ 连续属性 ”, 或者是“ 离散属性 ” 。前者在定义域上有无限多的取值,而后者在定义域上只有少数的一些取值。
但是在聚类问题的距离计算时,属性上是否定义了“ 序 ” 的关系是更为重要的。
我们通过一组实例来了解一些 “ 序 ” 的概念。
某种属性的取值为 : { 1, 2, 3 } 为有序;
某种属性的取值为: { 飞机, 火车, 轮船 } 则为无序。
显然我们上述的闵可夫距离仅仅适用于有序的属性。
VDM距离:
那么对于无序的属性我们该如何计算其距离呢?( 能否通过将无需距离转化为有序距离来计算呢? )
有了闵可夫距离与VDM距离之后, 我们便可以处理混合的属性了(有序 + 无序)
此外,一些问题中还包含非度量学习, 即距离之间不满足直递性,这可通过 “ 距离度量学习 ” 来实现。
说过了一些性能评价指标,下面我们来具体看一下聚类算法:
原型聚类:
从名字入手我们可以得知此类算法是 “ 基于原型的聚类 ”, 即算法假设聚类结构可以通过一组原型来刻画。
(什么是原型: 我理解的原型就是你所使用的数据是有粗略的原始类别的,譬如数据大致上可以分为5类,而不是不知道一共有多少类)
原型聚类极为常用,通常情况下算法先对原型进行初始化,然后对原型进行迭代更新求解。
下面我们看一下几种常用的原型聚类算法。
K均值算法(K-means):
K均值算法的目的是使用 最小化平方误差 来将样本数据集D 划分为簇的集合 C;
最小化平方误差的公式如下:
其中Ui 表示的是 簇Ci的均指向量,
从E 的公式可以直观的看出其表述的是簇内样本围绕簇均值向量的紧密程度, E 的值越小,则簇内样本的相似度越高。
最小化E 并不容易,找到其最优解需要考虑样本集D所有可能的簇划分,这是一个NP难问题。
在K-means算法当中,我们使用贪心法来简化这个问题的求解过程,即使用迭代优化来求解近似值。
K-means算法的简单流程图如下所示 :
简单来说可以概括为3个部分:
1, 算法首先定义要使用的K 值,再根据这个值从数据集D中选取K 个样本作为初始的均指向量。
(算法之所以叫做K-means,其中的K 就是来源于样本的个数,means则是代表使用均值向量作为划分的依据。)
2, 对于数据集D 中的m 个值,分别计算其到K 个均值向量的距离,并根据这个距离将其划归相应的簇。
3, 更新均值向量的值, 重复计算与划分的过程, 直到迭代更新后聚类的结果保持不变,然后停止循环。
学习向量量化(LVQ算法)
待续。。。。