目录
三、聚类分析
(一)、无监督学习与聚类
1、聚类分析的过程
2、聚类问题的描述
(二)、简单聚类方法
1、顺序聚类
2、谱系聚类
1、谱系聚类合并算法
2、谱系聚类分裂算法
4、K-均值计算
(三)聚类检验
前言
《模式识别》学习笔记主要参照哈尔滨工业大学出版社出版的《模式识别(第2版)》一书的内容,主要用于自己复习,如有侵权请速联系。
由于本人先自我学习的《数据挖掘与分析》和《机器学习》,所以在学习《模式识别》之前对此概念没有一个足够的认识,感觉《模式识别》讲述的可能是数据挖掘中的关联规则模式,与《机器学习》中的内容不搭边。但简单翻看一遍后便有了新的感悟,我们在人工智能领域所涉及到的所有项目,其实都可以归结为“模式识别”项目,例如,图像分类,自然语言处理等。而《机器学习》侧重于对数学概念的解析,《模式识别》侧重于整个工程方面的架构解析——前者偏向理论细节,后者偏向实践过程。
在这打一波广告,个人感觉哈工大出版社出版的《模式识别(第二版)》一书写的确实好,主要是读的很舒服,而且书中配套有代码,加深了对概念的理解。
所谓聚类分析是根据某种原则将样本或者数据划分为若干个“有意义”的子集,一般来说要求同一子集内的样本之间具有较大的相似性,而不同子集样本之间具有较大的差异性。也就是说尽量将彼此不同的样本划分为不同的聚类。
作为一种无监督学习方法, 聚类分析通常只讨论如何对当前样本集合中样本进行分类的问题,而不是像有监督学习方法,关系的是如何用有类别的信息样本集训练分类器,对样本集之外的其他样本进行分类。
聚类分析一般包括特征提取与选择、相似性度量和聚类算法三部分。
1、特征提取与选择
与分类过程一样,提取和选择什么样的特征是聚类分析的基础,同时也是与需要解决的问题息息相关的。
2、相似性度量
如何度量两个模式之间的相似程度在很多模式识别问题中都起着重要的作用,“距离分类器”一章中所介绍和讨论的各种模式距离和相似性的定义及计算方法同样适用于聚类分析。
3、聚类算法
有了模式的特征描述和相似性度量,就可以选择一定的聚类算法按照一定的准则将无监督的样本集合划分为若干个子类。
4、聚类有效性检验
聚类的结果可能同于其存在差异,不一定能够满足实际应用需要。根据有效性检验结果,需要对聚类的相关环节进行调整,重新完成聚类。
聚类问题需要满足:①每个类中至少包含一个样本。②任何一个样本属于且只属于一个聚类。③从集合论的角度来讲,聚类结果实际上是对集合D的一个划分。
1、类内距离准则:
样本的类内聚集程度可以用每个样本与其所属聚类中心之间的距离平方之和来度量。
2、类间距离:
聚类之间的分散程度可以用每个聚类真的中心到样本整体中心之间的加权距离平方之和来度量。
3、类内、类间散布矩阵
类内、类间的距离平方和也可以用样本的散布矩阵来计算。
顺序聚类算法只需要扫描样本集以此,聚类数不需要预先设定,新的聚类可以在算法执行过程中自动形成。
顺序聚类算法每次输入一个样本,计算该样本与当前已经形成的各个聚类的距离,如果所有距离都大于一个预先设定的阈值θ时,生成一个新的聚类,否则将其加入距离最近的聚类中,同时也可以预先设定最多聚类数M,以达到最大聚类数之后,不再新增聚类。
顺序聚类算法的思路非常简单,但在实现过程中需要计算样本与聚类之间的距离,也就是点与集合之间的距离。
距离又分为最小距离,最大距离,平均距离和中心距离。
谱系聚类又被称为是系统聚类、层次聚类,它的思想来自于社会科学与生物分类学,目标不仅是要产生出样本的不同聚类,而且要生成一个完整的样本层次分类谱系。
谱系聚类算法可以分为两大类:合并法和分裂法。合并法初始的时候将每个样本单独作为一个聚类,每一轮迭代选择最相近的两个聚类进行合并,经过n轮之后将所有的样本合并为一个类别;分裂法相反,首先将所有样本作为一个聚类,每一轮迭代选择一个现有的聚类分裂为两个聚类,n轮分裂之后形成n个聚类,每个聚类只包含一个样本。考虑到计算的复杂度,大多采用合并法。
首先给出一般的谱系生成算法,然后讨论几个谱系聚类过程中的具体实现问题
初始化:每个样本作为一个单独的聚类。
循环,直到所有岩本属于一个聚类为止:
寻找当前聚类中最相近的两个聚类i,j
删除聚类i,j,增加新的聚类q
输出:样本的合并过程,形成层次化谱系
对于一个聚类问题来说,将所有样本合并为一个聚类的结果显然是无意义的,当满足一定的中值条件时,可以提前结束合并过程,输出当前的聚类。包括;1、预定类别数。2、距离阈值。3、最优聚类数。
在具体实现过程中,可以利用距离矩阵D来记录当前各个聚类之间的距离,通过寻找D中的最小元素来确定下一步进行合并的两个聚类。合并聚类后,更新距离矩阵D,删除被合并聚类对应的行和列,增加新的行和列,根据所用距离度量方式的不同计算新生成聚类与其他聚类之间的距离。
谱系聚类算法的优点是聚类结果与样本的先后次序无关,只有当两组聚类之间的距离相等且为最小距离时,由于随机选择一组进行合并,才会引起聚类结果的不确定性,同时谱系聚类不仅能够得到最终的聚类结果,也可以产生出样本的谱系聚类过程,有助于考察样本集合的聚类结构。
分裂算法初始的时候将所有样本作为一个聚类,然后按照某种准则选择一种最优的方式,将一个聚类分离为两个聚类;在每一轮计算中,都按照这种方式选择将当前每一个聚类分裂为两个聚类的最优方式,再从所有聚类的分裂中选择最优者,将这个聚类按照最优方式分裂为两个类。
分裂算法存在的最大问题是计算量大,仅在第一步将n个样本分成两个聚类的可能方式就有2的n-1次方-1种,一个中等规模的样本集合按照聚类优化准则从这些可能分裂方式中选择一种最优方式的计算量就几乎是不可能的。
1、K-均值算法
举例说明:
有样本集合D={x1,x2,……x7},x1=(1,2),x2=(4,5), x3=(3,5),x4=(4,4),x5=(2,2),x6=(3,4),x7=(0,0)
解:
选择x6和x7作为初始的聚类均值m1=x6=(3,4),m2=x7=(0,0)
第一轮:
计算每个样本同m1和m2的距离,按照最近原则分到两个聚类中:
C1={X2,X3,X4,X5,X6},C2={X1,X7},重新计算每个聚类的均值
M1=(X2+X3+X4+X5+X6)/5 = (3.5, 4.5),M2 = (0.5,0.5)
第二轮:
计算每个样本同m1和m2的距离,按照最近原则分到两个聚类中:
C1={X2,X3,X4,X6},C2={X1,X7,X5}
重新计算每个聚类的均值:
M1=(3.5,4.5) M2=(1,1)
第三轮:
计算每个样本同m1和m2的距离,按照最近原则分到两个聚类中:
聚类结果没有变化,算法收敛。
K-均值算法最大的优点是实现简单,计算复杂度和存储复杂度低,假设算法经过m轮迭代收敛,需要m×K×n次样本与均值之间的距离计算,一般来说m和K远远小于样本数n,因此计算复杂度为On,需要存储的也只是n个样本所属的聚类,相比谱系聚类的On^2的时间复杂度和存储复杂度要小很多。
使用K-均值算法可能存在的问题是算法能不能收敛?现在已经证明K-均值算法能够经过有限步数迭代收敛,但不能保证收敛的解是最优,一局初始聚类均值的选择不同会收敛于不同的局部极小解。K-均值算法存在的另一个问题是必须预先设定聚类数K,如果K的设定于实际问题有偏差时,往往很难得到好的聚类结果。而且,即使K值设置正确,也不是全局最优。
2、算法的改进:
①初始值的选择:
如果有先验知识,则和容易获得较好的样本初始值;选择样本集中相互之间最远的K个样本,这样处于不同聚类的结果可能性很大。
②聚类数的选择
一种可行的方式是采用试探的手段,从少到多的选择K
③距离函数的选择
K-Medoids算法
④模糊K-均值
需要聚类的样本集之间并不一定是能够严格区分的,很多情况下聚类之间存在交叠。K-均值算法的每一轮迭代中严格地将每一个样本分类为某个聚类,这种方法一般称为“硬分类”。然而处于交叠区域的样本实际上很难判断它属于哪个聚类,一个合理的想法是在迭代的过程中采用“软分类”或“模糊分类”来代替,这里就牵扯到了隶属度的概念,就不细说了。
1、聚类结果的检验
(1)Dunn指数
所有聚类中最近两个聚类之间的距离于所有聚类中内部最远两个样本之间的距离之比。
(2)Davies-Bouldin指数
2、聚类数的间接选择(阈值影响K)
一个可行的方法:
首先在可能的取值范围内设置不同的参数,由算法得到相应的聚类结果,然后建立参数与聚类数之间的对应关系,选择聚类数相同的最大参数区域,以这个区域的中点作为最优参数,以对应的聚类数为最优聚类数。
3、聚类数的直接选择(K作为超参)
只能尝试。