机器学习算法之聚类算法

聚类算法

概述

聚类(clustering)为无监督学习(unsupervised learning),试图将样本集划分为若干互不相交的子集,即样本簇。 聚类既能作为单独过程用于寻找数据内在的分布结构,也可作为其他学习任务的前驱过程。
无监督学习,训练样本的标注信息未知,目标是通过对无标注训练样本的学习揭示数据的内在性质及规律。


性能度量

聚类性能度量也称聚类“有效性指标”(validity index),与监督学习中的性能度量作用相似,对聚类结果,我们需通过某种性能度量来评估其好坏;另一方面,若是明确最终使用的性能度量,则可直接将其作为聚类过程的优化目标。
聚类性能度量大致有两类。一类是将聚类结果与某个“参考模型”(reference model)进行比较,称为“外部指标”(external index);另一类是直接考察聚类结果而不利用任何参考模型,称为“内部指标”(internal index)。

外部指标

对数据集x_i = (x_1, x_2, \cdots, x_m),假定聚类给出的簇划分为C = \{ C_1, C_2, \cdots, C_k \},参考模型给出的簇划分为C^* = \{ C_1^*, C_2^*, \cdots, C_k^* \},令\lambda\lambda^*分别表示CC^*的簇标记向量,定义:
a = \mid SS \mid, SS = \{ (x_i, x_j) \mid \lambda_i = \lambda_j, \lambda_i^* = \lambda_i^*, i < j \},
b = \mid SD \mid, SD = \{ (x_i, x_j) \mid \lambda_i = \lambda_j, \lambda_i^* \neq \lambda_i^*, i < j \},
c = \mid DS \mid, DS = \{ (x_i, x_j) \mid \lambda_i \neq \lambda_j, \lambda_i^* = \lambda_i^*, i < j \},
d = \mid DD \mid, DD = \{ (x_i, x_j) \mid \lambda_i \neq \lambda_j, \lambda_i^* \neq \lambda_i^*, i < j \}.理解:a, b, c, d表示在参考模型的簇下,两个不同样本是否同时属于同一簇。

由上述公式导出下面常用的聚类性能度量外部指标:

  • Jaccard系数(Jaccard Coefficient, JC)
    JC = \frac {a} {a + b + c}
  • FM指数(Fowlkes and Mallows Index, FMI)
    FMI = \sqrt {\frac {a} {a + b} \cdot \frac {a} {a + c}}
  • Rand指数(Rand Index, RI)
    RI = \frac {2 (a + d)} {m (m - 1)}

内部指标

考虑聚类结果的簇划分C = \{ C_1, C_2, \cdots, C_k \},定义
avg (C) = \frac {2} {\mid C \mid (\mid C \mid - 1)} \sum_{1 \leq i < j \leq \mid C \mid} dist(x_i, x_j),
diam (C) = \max_{1 \leq i < j \leq \mid C \mid} dist(x_i, x_j),
d_{min} (C_i, C_j) = \min_{x_i \in C_i, x_j \in C_j} dist(x_i, x_j),
d_{cen} (C_i, C_j) = dist(\mu_i, \mu_j)
由上述公式导出下面常用的聚类性能度量内部指标:

  • DB指数(Davies-Bouldin Index, DBI)
    DBI = \frac {1} {k} \sum_{i=1}^k \max_{j \neq i} (\frac {avg(C_i) + avg(C_j) } {d_{cen} (\mu_i, \mu_j)})
  • Dunn指数(Dunn Index, DI)
    DI = \min_{1 \leq i \leq k} \{ min_{j \neq i} (\frac {d_{min} (C_i, C_j))} {max_{1 \leq l \leq k} diam (C_l)}) \}显然,DBI的值越小越好,而DI则相反,值越大越好。

距离度量

给定样本x_i = (x_{i1}, x_{i2}, \cdots, x_{in})x_j = (x_{j1}, x_{j2}, \cdots, x_{j3}),最常用的是“闵可夫斯基距离”(Minkowski distance)
dist_{mk} (x_i, x_j) = (\sum_{u = 1}^n \mid x_{iu} - x_{ju} \mid ^ p) ^ {\frac {1} {p}}其中,p \geq 1

  • p=2时,称为欧氏距离(Euclidean distance)
    dist_{ed} (x_i, x_j) = \parallel x_i - x_j \parallel_2 = \sqrt {\sum_{u = 1}^n \mid x_{iu} - x_{ju} \mid ^ 2}
  • p=1时,称为曼哈顿距离(Manhattan distance)
    dist_{man} (x_i, x_j) = \parallel x_i - x_j \parallel_1 = \sum_{u = 1}^n \mid x_{iu} - x_{ju} \mid

上述距离公式针对的是“有序属性”(ordinal attribute),比如\{ 1, 2, 3, 4\}可以直接在属性值上计算距离;而类似\{飞机, 火车, 轮船\}这样的离散属性无法计算距离,采用VDM(Value Difference Metric)
VDM_p (a, b) = \sum_{i = 1}^k \mid \frac {m_{u, a, i}} {m_{u, a}} - \frac {m_{u, b, i}} {m_{u, b}}\mid其中,m_{u, a}表示属性u上取值为a样本数m_{u, a, i}表示在第i个样本簇中在属性u上取值a的样本数,k为样本簇数。(例如,属性“交通工具”中两个离散值“飞机”和“火车”之间的VDM距离表示,“飞机”和“火车”在各个簇中样本数分别标准化,即除以它们在全局上总数,而后绝对差值的p次幂求和)


原型聚类

原型聚类也称“基于原型的聚类”,此类算法假设聚类结构能通过一组原型刻画。通常的流程:先对原型进行初始化,然后对原型进行迭代更新求解。

k均值算法

给定样本集D = \{ x_1, x_2, \cdots, x_m\}k均值算法(k-means)针对聚类所得簇划分C = \{ C_1, C_2, \cdots, C_k\},最小化平方误差
E = \sum_{i=1}^k \sum_{x \in C_i} \parallel x - \mu_i \parallel_2^2其中\mu_i = \frac {1} {\mid C_i \mid} \sum_{x \in C_i} x是簇C_i的均值向量。最小化E不容易,k均值算法采用了贪心策略,通过迭代优化来得到近似解。
算法流程如下:
输入:样本集D = \{ x_1, x_2, \cdots, x_m\};聚类簇数k
输出:簇划分C = \{ C_1, C_2, \cdots, C_k\}

  1. D中随机选择k个样本作为初始均值向量\{ \mu_1, \mu_2, \cdots, \mu_k \}
  2. repeat
  3.   令 C_i = \emptyset (1 \leq i \leq k)
  4. for j = 1, 2, \cdots, m do
  5.    计算样本x_j与各均值向量\mu_i (1 \leq i \leq k)的距离:d_{ji} = \parallel x_j - \mu_i \parallel_2;
  6.   根据距离最近的均值向量确定x_j的簇标记:\lambda_j = \mathop {\arg \min} \limits_{i \in (1, 2, \cdots, k)} d_{ji};
  7.    将样本x_j划入相应的簇:C_{\lambda_j} = C_{\lambda_j} \cup \{ x_j \};
  8. end for
  9. for i = 1, 2, \cdots, k do
  10.    计算新均值向量:\mu_i^{'} = \frac {1} {\mid C_i \mid} \sum_{x \in C_i} x;
  11.    if \mu_i^{'} \neq \mu_i then
  12.     将当前均值向量\mu_i更新\mu_i^{'}
  13.    保持当前均值向量不变
  14.    end if
  15. end for
  16. until 当前均值向量均未更新

理解:根据给定聚类簇数,随机初始化均值向量;根据欧式距离对样本分簇;更新各簇的均值向量;重复上述步骤,直到均值向量均未更新。


学习向量量化

学习向量量化(Learning Vector Quantization, LVQ)假设样本数据带有类别标记,学习过程中利用样本的这些监督信息来辅助聚类。
算法流程如下:
输入:样本集D = \{ (x_1, y_1), (x_2, y_2), \cdots, (x_m, y_m) \};原型向量个数q,各原型预设的类别标记\{ t_1, t_2, \cdots, t_q\};学习率\eta \in (0, 1).
输出:原型向量\{ p_1, p_2, \cdots, p_q\}

  1. 初始化一组原型向量\{ p_1, p_2, \cdots, p_q \}
  2. repeat
  3.   从样本集D随机选取样本(x_j, y_j)
  4.   计算样本x_jp_i (1 \leq i \leq q)的距离:d_{ji} = \parallel x_j - p_i \parallel_2
  5.   找出与x_j距离最近的原型向量p_{i^*}i^* = \mathop {\arg \min} \limits_{i \in \{ 1, 2, \cdots, q \}} d_{ji}
  6. if y_j = t_{i^*} then
  7.    p^{'} = p_{i^*} + \eta \cdot (x_j - p_{i^*})
  8. else
  9.    p^{'} = p_{i^*} - \eta \cdot (x_j - p_{i^*})
  10. end if
  11.   将原型向量p_{i^*}更新为p^{'}
  12. until 满足停止条件

理解:样本集存在标记,则已经可以通过标记将样本集划分成多个不相交的子集了。学习向量量化基于欧氏距离,通过\eta \cdot (x_j - p_{i^*})使得最终聚类结果趋向于按照标记划分的子集。


高斯混合聚类

高斯混合聚类(Mixture-of-Gaussion)采用概率模型来表达聚类原型。
关于(多元)高斯分布的定义:对n维样本空间\chi中的随机向量x,若x服从高斯分布,其概率密度函数为
p(x) = \frac {1} {(2 \pi)^{\frac {n} {2}} \mid \Sigma \mid^{\frac {1} {2}}} e^{- \frac {1} {2} (x - \mu)^T \Sigma^{-1} (x - \mu)}其中\mun维均值向量,\Sigman \times n的协方差矩阵。为了明确显示高斯分布与相应参数的依赖关系,将概率密度函数记为p(x \mid \mu, \Sigma)。于是,定义高斯混合分布
p_M (x) = \sum_{i=1}^k \alpha_i \cdot p(x \mid \mu_i, \Sigma_i)该分布共由k个混合成分组成,每个混合成分对应一个高斯分布,其中\mu_i\Sigma_i是第i个高斯混合成分的参数,而\alpha_i > 0为相应的“混合系数”(mixture coefficient),\sum_{i=1}^k \alpha_i = 1
算法流程如下:
输入:样本集D = \{ x_1, x_2, \cdots, x_m \};高斯混合成分个数k.
输出:簇划分C = \{ C_1, C_2, \cdots, C_k \}

  1. 初始化高斯混合分布的模型参数\{ (\alpha_i, \mu_i, \Sigma_{i}) \mid 1 \leq i \leq k \}
  2. repeat
  3. for j = 1, 2, \cdots, m do
  4.    计算x_j由各混合成分生成的后验概率,即

\gamma_{ji} = p_M (z_j = i \mid x_j) (1 \leq i \leq k) = \frac {P(z_j = i) \cdot p_M (x_j \mid z_j = i)} {p_M (x_j)} = \frac {\alpha_i \cdot p(x_j \mid \mu_i, \Sigma_{i})} {\sum_{l=1}^k \alpha_l \cdot p(x_j \mid \mu_l \Sigma_{l})}

  1. end for
  2. for i = 1, 2, \cdots, k do
  3.    计算新均值向量:\mu_i^{'} = \frac {\sum_{j=1}^m \gamma_{ji} x_j} {\sum_{j=1}^m \gamma_{ji}}
  4.    计算新协方差矩阵:\Sigma_{i}^{'} = \frac {\sum_{j=1}^m \gamma_{ji} (x_j - \mu_i^{'}) (x_j - \mu_i^{'})^T} {\sum_{j=1}^m \gamma_{ji}}
  5.    计算新混合系数:\alpha_{i}^{'} = \frac {\sum_{j=1}^m \gamma_{ji}} {m}
  6. end for
  7.   将模型参数\{ (\alpha_i, \mu_i, \Sigma_{i}) \mid 1 \leq i \leq k \}更新为\{ (\alpha_i^{'}, \mu_i^{'}, \Sigma_{i}^{'}) \mid 1 \leq i \leq k \}
  8. until 满足停止条件
  9. C_i = \emptyset (1 \leq i \leq k)
  10. for j = 1, 2, \cdots, m do
  11.   根据\lambda_j = \mathop {\arg \max} \limits_{i \in \{ 1, 2, \cdots, k\} } \gamma_{ji}确定x_j的簇标记\lambda_j
  12.   将x_j划入相应的簇:C_{\lambda_j} = C_{\lambda_j} \cup {x_j}
  13. end for
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351

推荐阅读更多精彩内容

  • 简介 在无监督学习中unsupervised learning中,训练样本的标记信息是未知的,其目标是通过对无标记...
    TOMOCAT阅读 698评论 0 0
  • 文章脉络 1.什么是聚类2.聚类的效果评估——性能度量 2.1外部指标 2.2内部指标3.聚类的类型 3.1原型聚...
    谢艺俊阅读 1,678评论 1 1
  • 9.1 聚类任务 在无监督学习任务中,包括了密度估计、异常检测以及聚类等。其中应用最广泛的是聚类。 聚类就是对大量...
    D系鼎溜阅读 1,112评论 0 1
  • 写在最前面 如今机器学习和深度学习如此火热,相信很多像我一样的普通程序猿或者还在大学校园中的同学,一定也想参与其中...
    EddyLiu2017阅读 1,229评论 0 0
  • 9.1 聚类任务 常见的无监督学习任务 密度估计 异常检测 聚类 聚类任务将数据集划分为若干个不相交的子集,为每一...
    两全丶阅读 1,041评论 0 2