聚类

1      聚类

“无监督学习”,目标:通过对无标记训练样本的学习来揭示数据的内在性质及规律,为进一步的数据分析提供基础。研究最多,应用最广的是“聚类”。

       聚类试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集称为一个“簇”。

这些概念对簇算法而言是事先未知的,聚类过程仅能自动形成簇结构,簇对应的概念语义需由使用者来把握和命名。

       聚类既能作为一个单独过程,用于找寻数据内在的分布结构,也可作为分类等其他学习任务的前驱过程。

       聚类算法涉及的两个基本问题:性能度量和距离计算。

1.1     性能度量

       聚类性能度量亦称为“有效性指标”。簇类结果的“簇内相似度”高且“簇间相似度”低。

       聚类性能度量大致有两类。一类是将聚类结果与某个“参考模型”进行比较,称为“外部指标”;另一类是直接考察聚类结果而不利用任何参考模型,称为“内部指标”。

 

 

 

 

  • Jaccard系数

 

  • FM系数

 

  • Rand指数

 

DB指数;Dunn指数

1.2     距离计算

对函数dist(.,.), 若它是一个“距离度量”,则需要满足一些基本性质:

非负性:

同一性:

对称性:

直递性:

 

闵可夫斯基距离

在讨论距离计算时,属性上是否定义了“序”关系更为重要。例如,在定义域{1,2,3}的离散属性与连续属性的性质更接近些,能直接在属性值上计算距离。

1.3     原型聚类

原型:样本空间中具有代表性的点

原型聚类亦称“基于原型的聚类”,此类算法假设聚类结构可以通过一组原型刻画,在现实聚类任务中极为常用。通常情况下,算法先对原型进行初始化,然后对原型进行迭代求解更新。采用不同的原型表示、不同的求解方式,将产生不同的算法。

1.3.1   K均值算法

                            

 

 

(1)

 

其中,是簇的均值向量。

直观来看,上式在一定程度上刻画了簇内样本围绕均值向量的紧密程度,E越小则簇内样本相似度越高。

由于最小化(1)式并不容易,找到它的最优解需要考察样本集D所有可能的簇划分,这是一个NP难问题。因此,k均值算法采用贪心策略,通过迭代优化来近似求解。

算法流程:

输入:样本集D={,...,};

      聚类簇数k.

过程:

1.从D中随机选择k个样本作为初始均值向量{,...,}

2.repeat

3.    令(1)

4.    for j = 1,2,...,m do

5.      计算样本与各均值向量(1)之间的距离:;

6.      根据距离最近的均值向量的簇标记:;

7.      将样本划入相应的簇:;

8.    end for

9.    for i = 1,2,...,k do

10.     计算新的均值向量:

11.     if  then

12.         将当前均值向量更新为

13.     else

14.         保持当前均值向量不变

15.     end if

16.    end for

17. until 当前均值向量均未更新

输出: 簇划分

 

1.3.2   学习向量量化

Learning Vector Quantization,简称LVQ,试图找到一组原型向量来刻画聚类结构。但与一般聚类算法不同的是,LVQ假设数据样本带有类别标记,学习过程利用样本的这些监督信息来辅助聚类。

输入:样本集D={,

      原型向量个数q,各原型向量预设的类别标记{,...,};

      学习率 

过程:

1.初始化一组原型向量{,...,}

2.repeat

3.    从样本集D随机选取样本;

4.    计算样本与(1)之间的距离:;5.      

6.    找出与距离最近的原型向量,;

7.    if  then

8.        

9.    else

10.       

11.   end if

12.   将当前原型向量更新为

13. until 满足停止条件

输出:原型向量{,...,}

 

显然,LVQ的关键是6~10行,即如何更新原型向量。直观上看,对样本,若最近的原型向量与的类别标记相同,则令向的方向靠拢。

如弟7行所示,此时新原型向量为

 

与之间的距离为:

 

 

令学习率,则原型向量在更新为后将更接近。

类似地,如果原型向量的标记和样本的标记不同,则原型向量应该远离样本。

1.3.3   高斯混合聚类

与k均值、LVQ用原型向量来刻画聚类结构不同,高斯混合聚类采用概率模型来表达聚类原型。

首先简单回顾一下(多元)高斯分布的定义。

对于一维数据来说,其正态分布的概率密度函数为:

 

对于多维数据来说,其正态分布的概率密度函数为:

 

其中,是维均值向量,是的协方差矩阵,通过上式可以看出,高斯分布完全由均值向量和协方差矩阵这两个参数确定。为了明确显示高斯分布与相应参数的关系,将概率密度函数记为.

我们可定义高斯混合分布

 

 

(9.29)

 

该分布共由k个混合成分组成,每个混合成分对应一个高斯分布,其中与是第i个高斯混合成分的参数,而为相应的“混合系数”,.

假设样本的生成过程由高斯混合分布给出:首先,根据定义的先验分布选择高斯混合成分,其中为第i个混合成分的概率;然后,根据被选择的混合成分的概率密度函数进行采样,从而生成相应的样本。

若训练集D={,...,}由上述过程生成,令随机变量表示生成样本的高斯混合成分,其取值未知。显然,的先验概率对应于.根据贝叶斯定理,的后验分布对应于

 



(9.30)

给出了样本由第i 个高斯混合成分生成的后验概率,为方便叙述,将其简记为.

当高斯混合分布(9.29)已知时,高斯混合聚类将把样本集D划分为k个簇,每个样本的簇标记如下确定:

 

 

 

(9.31)

 

因此,从原型聚类的角度来看,高斯混合聚类是采用概率模型(高斯分布)对原型进行刻画,簇划分则由原型对应后验概率确定。

那么,对于式(9.29),模型参数如何求解呢?显然,给定样本集D,可以通过最大似然估计对其进行求解。

 



(9.32)

 

通常,采用EM算法进行迭代优化求解。

若参数能使(9.32)最大化,则由。。。分别求其最大似然估计。

由上述推导即可获得高斯混合模型的EM算法:在每步迭代中,先根据当前参数来计算每个样本属于每个高斯成分的后验概率(E步骤),再根据极大似然估计得到的参数值,更新模型参数(M步骤)。

高斯混合模型算法描述如下图所示,第一行对高斯混合分布的模型参数进行初始化,然后,在第2-12行基于EM算法对模型参数进行迭代更新。若EM算法的停止条件满足(例如达到最大迭代轮数,或似然函数(LLD)增长很少甚至不增长),则在第14-17行根据高斯混合分布确定簇划分,在第18行返回最终结果。

算法流程:

输入:样本集D={,...,};

      高斯混合成分个数k:

过程:

1.初始化高斯混合分布的模型参数

2.repeat

3.    for j = 1,2,...,m do

4.      根据式(9.30)计算由各混合成分生成的后验概率,即

       

5.    end for

6.    for , do

7.      计算新均值向量

8.      计算新协方差矩阵

9.      计算新混合系数

10.   end for

11.   将模型参数更新为

12.  until 满足停止条件

13.  

14.  for  do

15.     根据式(9.31)确定的簇标记;

16.     将划入相应的簇:

17.   end for

输出:簇划分

 

1.4     密度聚类

密度聚类亦称为“基于密度的聚类”,此类算法假设聚类结构能通过样本分布的紧密程度确定。通常情况下,密度聚类算法从样本密度的角度来考察样本之间的可连接性,并给予密度可连接样本不断扩展聚类簇以获得最终的聚类结果。

1.5     层次聚类

层次聚类试图在不同层次对数据集进行划分,从而形成树形的聚类结构。数据集的划分可采用“自底向上”的聚合策略,也可采用“自顶向下”的分拆策略。

AGNES是一种采用自底向上聚合策略的层次聚类算法。它先将数据集中的每个样本看作是一个初始聚类簇,然后在算法运行的每一步中找出距离最近的两个聚类簇进行合并,该过程不断重复,直至达到预设的聚类簇个数。这里的关键是如何计算聚类簇之间的距离。实际上,每个簇是一个样本的几何,因此,只需采用关于集合的某种距离即可。例如,在给定簇与,可通过下面的式子来计算距离:

最小距离:

最大距离:

平均距离:

显然,最小距离由两个簇的最近样本决定,最大距离由两个簇的最远样本决定,而平均距离则由两个簇的所有样本共同决定。当、和计算时,AGNES算法被相应地称为“单链接”、“全链接”或“均链接”算法。

AGNES算法描述如图所示,在1-9行,算法先对仅包含一个样本的初始聚类簇和相应的距离矩阵进行初始化;然后在第11-23行,AGNES不断合并距离最近的聚类簇,并对合并得到的聚类簇的距离矩阵进行更新;上述过程不断重复,直到达到预设的聚类簇数。

算法流程:

输入:样本集D={,...,};

      聚类簇距离度量函数d;

      聚类簇数k.

过程:

1. for j = 1,2,...,m do

2.   

3. end for

4. for i = 1,2,...,m do

5.    for j = 1,2,...,m do

6.       ;

7.        )

8.         end for

9.  end for 

10. 设置当前聚类簇个数:

11. while q>k do

12.   找出距离最近的两个聚类簇 ;

13.   合并和:

14.   for  do

15.     将聚类簇;

16.   end for 

17.   删除距离矩阵矩阵M的第行与第列;

18.   for  do 

19.     ;

20.     )

21.   end for

22.   q = q -1 

23. end while

输出:簇划分

 

1.6     总结

聚类算法可以称得上是机器学习中“新算法”出现最多、最快的领域,一个重要的原因是聚类不存在客观标准;给定数据集,总能从某个角度找到以往算法未覆盖的某种标准从而设计出新算法。相对于机器学习的其他分支来说,聚类的知识还不够系统化。但聚类技术本身在现实任务重非常重要。

聚类的性能度量常见的还有F值、互信息以及平均廓宽等。

 

posted @ 2019-07-04 21:54  hi_mxd  阅读(433)  评论(0编辑  收藏  举报