聚类算法
概述
聚类(clustering)为无监督学习(unsupervised learning),试图将样本集划分为若干互不相交的子集,即样本簇。 聚类既能作为单独过程用于寻找数据内在的分布结构,也可作为其他学习任务的前驱过程。
无监督学习,训练样本的标注信息未知,目标是通过对无标注训练样本的学习揭示数据的内在性质及规律。
性能度量
聚类性能度量也称聚类“有效性指标”(validity index),与监督学习中的性能度量作用相似,对聚类结果,我们需通过某种性能度量来评估其好坏;另一方面,若是明确最终使用的性能度量,则可直接将其作为聚类过程的优化目标。
聚类性能度量大致有两类。一类是将聚类结果与某个“参考模型”(reference model)进行比较,称为“外部指标”(external index);另一类是直接考察聚类结果而不利用任何参考模型,称为“内部指标”(internal index)。
外部指标
对数据集,假定聚类给出的簇划分为,参考模型给出的簇划分为,令与分别表示和的簇标记向量,定义:
理解:表示在参考模型的簇下,两个不同样本是否同时属于同一簇。
由上述公式导出下面常用的聚类性能度量外部指标:
- Jaccard系数(Jaccard Coefficient, JC)
- FM指数(Fowlkes and Mallows Index, FMI)
- Rand指数(Rand Index, RI)
内部指标
考虑聚类结果的簇划分,定义
由上述公式导出下面常用的聚类性能度量内部指标:
- DB指数(Davies-Bouldin Index, DBI)
- Dunn指数(Dunn Index, DI)
显然,DBI的值越小越好,而DI则相反,值越大越好。
距离度量
给定样本与,最常用的是“闵可夫斯基距离”(Minkowski distance)
其中,
- 当
p=2
时,称为欧氏距离(Euclidean distance)
- 当
p=1
时,称为曼哈顿距离(Manhattan distance)
上述距离公式针对的是“有序属性”(ordinal attribute),比如可以直接在属性值上计算距离;而类似飞机, 火车, 轮船这样的离散属性无法计算距离,采用VDM(Value Difference Metric)
其中,表示属性上取值为的样本数,表示在第个样本簇中在属性上取值的样本数,为样本簇数。(例如,属性“交通工具”中两个离散值“飞机”和“火车”之间的VDM距离表示,“飞机”和“火车”在各个簇中样本数分别标准化,即除以它们在全局上总数,而后绝对差值的次幂求和)
原型聚类
原型聚类也称“基于原型的聚类”,此类算法假设聚类结构能通过一组原型刻画。通常的流程:先对原型进行初始化,然后对原型进行迭代更新求解。
均值算法
给定样本集,均值算法(k-means)针对聚类所得簇划分,最小化平方误差
其中是簇的均值向量。最小化不容易,均值算法采用了贪心策略,通过迭代优化来得到近似解。
算法流程如下:
输入:样本集;聚类簇数
输出:簇划分
- 从中随机选择个样本作为初始均值向量
- repeat
- 令
- for do
- 计算样本与各均值向量的距离:;
- 根据距离最近的均值向量确定的簇标记:;
- 将样本划入相应的簇:;
- end for
- for do
- 计算新均值向量:;
- if then
- 将当前均值向量更新
- 保持当前均值向量不变
- end if
- end for
- until 当前均值向量均未更新
理解:根据给定聚类簇数,随机初始化均值向量;根据欧式距离对样本分簇;更新各簇的均值向量;重复上述步骤,直到均值向量均未更新。
学习向量量化
学习向量量化(Learning Vector Quantization, LVQ)假设样本数据带有类别标记,学习过程中利用样本的这些监督信息来辅助聚类。
算法流程如下:
输入:样本集;原型向量个数,各原型预设的类别标记;学习率.
输出:原型向量
- 初始化一组原型向量
- repeat
- 从样本集随机选取样本;
- 计算样本与的距离:;
- 找出与距离最近的原型向量,;
- if then
- else
- end if
- 将原型向量更新为
- until 满足停止条件
理解:样本集存在标记,则已经可以通过标记将样本集划分成多个不相交的子集了。学习向量量化基于欧氏距离,通过使得最终聚类结果趋向于按照标记划分的子集。
高斯混合聚类
高斯混合聚类(Mixture-of-Gaussion)采用概率模型来表达聚类原型。
关于(多元)高斯分布的定义:对维样本空间中的随机向量,若服从高斯分布,其概率密度函数为
其中是维均值向量,是的协方差矩阵。为了明确显示高斯分布与相应参数的依赖关系,将概率密度函数记为。于是,定义高斯混合分布
该分布共由个混合成分组成,每个混合成分对应一个高斯分布,其中与是第个高斯混合成分的参数,而为相应的“混合系数”(mixture coefficient),。
算法流程如下:
输入:样本集;高斯混合成分个数.
输出:簇划分
- 初始化高斯混合分布的模型参数
- repeat
- for do
- 计算由各混合成分生成的后验概率,即
- end for
- for do
- 计算新均值向量:;
- 计算新协方差矩阵:;
- 计算新混合系数:;
- end for
- 将模型参数更新为
- until 满足停止条件
- for do
- 根据确定的簇标记;
- 将划入相应的簇:
- end for