聚类任务
聚类是为了解决在无监督学习中,训练样本的标记信息是未知的。它试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集称为一个“簇”。通过这样的划分,每个簇可能对应于一些潜在的概念,然而这些概念对聚类算法而言事先是未知的,聚类过程仅能自动形成簇结构,簇所对应的概念语义需由使用者来把握和命名。
例如在一些商业应用中需对新用户的类型进行判别,但定义“用户类型”对商家来说却可能不太容易,此时可先对用户数据进行聚类,根据聚类结果对每个簇定义为一个类,然后再基于这些类训练分类模型,用于判断新用户的类型。
聚类算法的基本问题
性能度量
聚类性能度量称为“有效性指标”。与监督学习中的性能度量作用类似,对聚类结果,我们需通过某种性能度量来评估好坏,另一方面,若明确了最终将要使用的性能度量,则可直接将其作为聚类过程的优化目标,从而更好地得到符合要求的聚类结果。
聚类性能度量大致有两类。一类是将聚类结果与某个“参考模型”进行比较,称为“外部指标”;另一类是直接考察聚类结果而不利用任何参考模型,称为“内部指标”。
距离计算
假如有个函数dist(,),若它是一个“距离度量”,则需满足一些基本性质:
最常用的度量方法
连续属性和离散属性
我们常将属性划分为“连续属性”和“离散属性”,前者在定义域上有无穷多个可能的取值,后者在定义域上是有限个取值。而在讨论距离计算时,属性上是否定义了“序”关系更为重要。例如定义域{1,2,3}的离散属性与离散属性与连续属性的性质更接近一些,这样的属性称为“有序属性”;而定义域为{飞机,火车,轮船}这样的离散属性则不能直接在属性值上计算距离,称为“无序属性”。
VDM
原型聚类
原型聚类称为“基于原型的聚类”,此类算法假设聚类结构能通过一组原型刻画,在现实聚类任务中极为常用。通常情形下,算法先对原型进行初始化,然后对原型进行迭代更新求解。
k均值算法
具体的算法描述
学习向量量化
与k均值算法类似,“学习向量量化”也是试图找到一组原型来刻画聚类结构,但与一般聚类算法不同的是,LVQ假设数据样本带有类别标记,学习过程利用样本的这些监督信息来辅助聚类。
算法描述
高斯混合聚类
与前两个聚类结构不同,高斯混合聚类采用概率模型来表达聚类原型。
算法描述
密度聚类
密度聚类也称为“基于密度的聚类”,此类算法假设聚类结构能通过样本分布的紧密程度确定。通常情形下,密度聚类算法从样本密度的角度来考察样本之间的可连续性,并基于可连接样本不断扩展聚类簇以获得最终的聚类结果。
DBSCAN算法
它基于一组“邻域”参数来刻画样本分布的紧密程度。
算法描述
层次聚类
层次聚类试图在不同层次对数据集进行划分,从而形成树形的聚类结构。数据集的划分可采用“自底向上”的聚合策略,也可采用“自顶向下”的分拆策略。
AGNES算法
这是一中采用自底向上聚合策略的层次聚类算法。它先将数据集中的每个样本看作一个初始聚类簇,然后在算法运行的每一步中找出距离最近的两个聚类簇进行合并,该过程不断重复,直至达到预设的聚类簇个数。关键是如何计算聚类簇之间的距离。实际上,每个簇是一个样本集合,因此,只需采用关于集合的某种距离即可。假如给定聚类簇Ci和Cj,通过下面式子来计算距离:
算法描述: