作者:华校专
作者信息:
华校专,曾任阿里巴巴资深算法工程师、智易科技首席算法研究员,现任腾讯高级研究员,《Python 大战机器学习》的作者。
编者按:
算法工程师必备系列更新啦!继上次推出了算法工程师必备的特征工程后,小编继续整理了必要的机器学习知识,全部以干货的内容呈现,哪里不会学哪里,老板再也不用担心你的基础问题!接下来,就让我们紧跟作者的步伐,一起畅游聚类世界吧!
在无监督学习(unsupervised learning)中,训练样本的标记信息是未知的。
(unsupervised learning)
无监督学习的目标:通过对无标记训练样本的学习来揭露数据的内在性质以及规律。
一个经典的无监督学习任务:寻找数据的最佳表达(representation)。常见的有:
(representation)
无监督学习应用最广的是聚类(clustering) 。
(clustering)
cluster
通常用 表示样本 的簇标记cluster label,即 。于是数据集的聚类结果可以用包含个元素的簇标记向量 来表示。
cluster label
聚类的作用:
聚类问题本身是病态的。即:没有某个标准来衡量聚类的效果。
但是实际上不知道这个平均距离对应于真实世界的物理意义。
如:在图片识别中包含的图片有:红色卡车、红色汽车、灰色卡车、灰色汽车。可以聚类成:红色一类、灰色一类;也可以聚类成:卡车一类、汽车一类。
解决该问题的一个做法是:利用深度学习来进行分布式表达,可以对每个车辆赋予两个属性:一个表示颜色、一个表示型号。
聚类的性能度量也称作聚类的有效性指标validity index 。
validity index
直观上看,希望同一簇的样本尽可能彼此相似,不同簇的样本之间尽可能不同。即:簇内相似度intra-cluster similarity高,且簇间相似度inter-cluster similarity低。
intra-cluster similarity
inter-cluster similarity
聚类的性能度量分两类:
reference model
external index
internal index
对于数据集 ,假定通过聚类给出的簇划分为 。参考模型给出的簇划分为 ,其中 和 不一定相等 。
令 分别表示 的簇标记向量。定义:
其中 表示集合的元素的个数。各集合的意义为:
由于每个样本对 仅能出现在一个集合中,因此有
下述性能度量的结果都在 之间。这些值越大,说明聚类的性能越好。
Jaccard系数Jaccard Coefficient:JC:
Jaccard
Jaccard Coefficient:JC
它刻画了:所有的同类的样本对(要么在 中属于同类,要么在 中属于同类)中,同时隶属于 的样本对的比例。
FM指数Fowlkes and Mallows Index:FMI:
FM
Fowlkes and Mallows Index:FMI
它刻画的是:
FMI
Rand指数Rand Index:RI:
Rand
Rand Index:RI
使用RI有个问题:对于随机聚类,RI指数不保证接近0(可能还很大)。
RI
ARI指数就通过利用随机聚类来解决这个问题。
ARI
定义一致性矩阵为:
其中:
则根据定义有: ,其中 表示组合数。数字2 是因为需要提取两个样本组成样本对。
2
定义ARI指数Adjusted Rand Index:
Adjusted Rand Index
:表示同时隶属于 的样本对。
:表示最大的样本对。
即:无论如何聚类,同时隶属于 的样本对不会超过该数值。
:表示在随机划分的情况下,同时隶属于 的样本对的期望。
(1) 随机挑选一对样本,一共有 种情形。
(2) 这对样本隶属于 中的同一个簇,一共有 种可能。
(3) 这对样本隶属于 中的同一个簇,一共有 种可能。
(4) 这对样本隶属于 中的同一个簇、且属于 中的同一个簇,一共有 种可能。
(5) 则在随机划分的情况下,同时隶属于 的样本对的期望(平均样本对)为: 。
对于数据集 ,假定通过聚类给出的簇划分为 。定义:
其中: 表示两点 之间的距离; 表示簇 的中心点, 表示簇 的中心点, 表示簇 的中心点之间的距离。
上述定义的意义为:
DB指数Davies-Bouldin Index:DBI:
DB
Davies-Bouldin Index:DBI
其物理意义为:
该度量越小越好。
给定一个簇 ,遍历其它的簇,寻找该度量的最大值。
对所有的簇,取其最大度量的均值。
显然 越小越好。
Dunn指数Dunn Index:DI:
Dunn
Dunn Index:DI
其物理意义为:任意两个簇之间最近的距离的最小值,除以任意一个簇内距离最远的两个点的距离的最大值。
显然 越大越好。
距离函数 常用的有以下距离:
考虑非数值类属性(如属性取值为:中国,印度,美国,英国),令 表示 的样本数; 表示 且位于簇 中的样本的数量。则在属性 上的两个取值 之间的 VDM距离为:
中国,印度,美国,英国
VDM
该距离刻画的是:属性取值在各簇上的频率分布之间的差异。
闵可夫斯基距离Minkowski distance:给定样本则闵可夫斯基距离定义为:
Minkowski distance
(1) 当 时,闵可夫斯基距离就是欧式距离Euclidean distance:
Euclidean distance
(2) 当 时,闵可夫斯基距离就是曼哈顿距离Manhattan distance:
Manhattan distance
VDM距离Value Difference Metric:
Value Difference Metric
当样本的属性为数值属性与非数值属性混合时,可以将闵可夫斯基距离与 VDM 距离混合使用。
假设属性 为数值属性, 属性 为非数值属性。则:
当样本空间中不同属性的重要性不同时,可以采用加权距离。
以加权闵可夫斯基距离为例:
这里的距离函数都是事先定义好的。在有些实际任务中,有必要基于数据样本来确定合适的距离函数。这可以通过距离度量学习distance metric learning来实现。
distance metric learning
这里的距离度量满足三角不等式:, 。
在某些任务中,根据数据的特点可能需要放松这一性质。如:美人鱼和人距离很近,美人鱼和鱼 距离很近,但是人和鱼的距离很远。这样的距离称作非度量距离non-metric distance。
美人鱼
人
鱼
non-metric distance
原型聚类prototype-based clustering假设聚类结构能通过一组原型刻画。
prototype-based clustering
常用的原型聚类有:
k
k-means
Learning Vector Quantization:LVQ
Mixture-of-Gaussian
给定样本集 , 假设一个划分为 。
定义该划分的平方误差为:
其中 是簇 的均值向量。
k-means 的优化目标需要考察 的所有可能的划分,这是一个NP难的问题。实际上k-means 采用贪心策略,通过迭代优化来近似求解。
NP
首先假设一组均值向量。
然后根据假设的均值向量给出了 的一个划分。
再根据这个划分来计算真实的均值向量:
(1) 如果真实的均值向量等于假设的均值向量,则说明假设正确。根据假设均值向量给出的 的一个划分确实是原问题的解。
(2) 如果真实的均值向量不等于假设的均值向量,则可以将真实的均值向量作为新的假设均值向量,继续迭代求解。
这里的一个关键就是:给定一组假设的均值向量,如何计算出 的一个簇划分?
k均值算法的策略是:样本离哪个簇的均值向量最近,则该样本就划归到那个簇。
k-means 算法:
输入:
(1) 样本集 。
(2) 聚类簇数 。
输出:簇划分 。
算法步骤:
(1) 从 中随机选择 个样本作为初始均值向量 。
(2) 重复迭代直到算法收敛,迭代过程:
(2.1) 初始化阶段:取
(2.2) 划分阶段:令 :
(2.2.1) 计算 的簇标记:, 。即:将 离哪个簇的均值向量最近,则该样本就标记为那个簇。
(2.2.2) 然后将样本 划入相应的簇: 。
(2.3) 重计算阶段:计算 。
(2.4) 终止条件判断:
(2.4.1) 如果对所有的 ,都有 ,则算法收敛,终止迭代。
(2.4.2) 否则重赋值 。
k-means 优点:
计算复杂度低,为 ,其中 为迭代次数。通常 和 q 要远远小于 ,此时复杂度相当于。
思想简单,容易实现。
k-means 缺点:
通常进行多次k-means,然后选择最优的那次作为最终聚类结果。
结果不一定是全局最优的,只能保证局部最优。
对噪声敏感。因为簇的中心是取平均,因此聚类簇很远地方的噪音会导致簇的中心点偏移。
无法解决不规则形状的聚类。
无法处理离散特征,如:国籍、性别 等。
国籍、性别
需要首先确定聚类的数量 。
分类结果严重依赖于分类中心的初始化。
k-means 性质:
k-means 实际上假设数据是呈现球形分布,实际任务中很少有这种情况。与之相比,GMM 使用更加一般的数据表示,即高斯分布。
GMM
k-means 假设各个簇的先验概率相同,但是各个簇的数据量可能不均匀。
k-means 使用欧式距离来衡量样本与各个簇的相似度。这种距离实际上假设数据的各个维度对于相似度的作用是相同的。
k-means 中,各个样本点只属于与其相似度最高的那个簇,这实际上是硬 分簇。
硬
k-means 算法的迭代过程实际上等价于EM 算法。具体参考EM 算法章节。
EM
k-means++ 属于 k-means 的变种,它主要解决 k-means 严重依赖于分类中心初始化的问题。
k-means++
k-means++ 选择初始均值向量时,尽量安排这些初始均值向量之间的距离尽可能的远。
k-means++ 算法:
(1) 从 中随机选择1个样本作为初始均值向量组 。
(2) 迭代,直到初始均值向量组有 个向量。
假设初始均值向量组为 。迭代过程如下:
(2.1) 对每个样本 ,分别计算其距 的距离。这些距离的最小值记做 。
(2.2) 对样本 ,其设置为初始均值向量的概率正比于。即:离所有的初始均值向量越远,则越可能被选中为下一个初始均值向量。
(2.3) 以概率分布 (未归一化的)随机挑选一个样本作为下一个初始均值向量。
(3) 一旦挑选出初始均值向量组 ,剩下的迭代步骤与k-means 相同。
k-modes 属于 k-means 的变种,它主要解决 k-means 无法处理离散特征的问题。
k-modes
k-modes 与 k-means 有两个不同点(假设所有特征都是离散特征):
其中 为示性函数。
上式的意义为:样本之间的距离等于它们之间不同属性值的个数。
其中 的取值空间为所有样本在第 个属性上的取值。
k-medoids 属于 k-means 的变种,它主要解决k-means 对噪声敏感的问题。
k-medoids
k-medoids 算法:
(2.1) 初始化阶段:取 。
遍历每个样本 ,计算它的簇标记: 。即:将 离哪个簇的均值向量最近,则该样本就标记为那个簇。
然后将样本 划入相应的簇: 。
(2.2) 重计算阶段:
遍历每个簇 :
(2.2.1) 计算簇心 距离簇内其它点的距离 。
(2.2.2) 计算簇 内每个点 距离簇内其它点的距离 。
如果 ,则重新设置簇中心: 。
(2.3) 终止条件判断:遍历一轮簇 之后,簇心保持不变。
k-medoids 算法在计算新的簇心时,不再通过簇内样本的均值来实现,而是挑选簇内距离其它所有点都最近的样本来实现。这就减少了孤立噪声带来的影响。
k-medoids 算法复杂度较高,为 。其中计算代价最高的是计算每个簇内每对样本之间的距离。
通常会在算法开始时计算一次,然后将结果缓存起来,以便后续重复使用。
mini-batch k-means 属于 k-means 的变种,它主要用于减少k-means 的计算时间。
mini-batch k-means
mini-batch k-means 算法每次训练时随机抽取小批量的数据,然后用这个小批量数据训练。这种做法减少了k-means 的收敛时间,其效果略差于标准算法。
mini-batch k-means 算法:
(2.2) 划分阶段:随机挑选一个Batch 的样本集合 ,其中 为批大小。
Batch
(2.2.1) 计算 的簇标记:, 。
即:将 离哪个簇的均值向量最近,则该样本就标记为那个簇。
与一般聚类算法不同,学习向量量化Learning Vector Quantization:LVQ假设数据样本带有类别标记,学习过程需要利用样本的这些监督信息来辅助聚类。
给定样本集 , ,LVQ的目标是从特征空间中挑选一组样本作为原型向量。
LVQ
LVQ的想法是:通过从样本中挑选一组样本作为原型向量 ,可以实现对样本空间 的簇划分。
对任意样本 ,它被划入与距离最近的原型向量所代表的簇中。
对于每个原型向量 ,它定义了一个与之相关的一个区域,该区域中每个样本与 的距离都不大于它与其他原型向量的距离。
区域 对样本空间 形成了一个簇划分,该划分通常称作 Voronoi 剖分。
Voronoi
问题是如何从样本中挑选一组样本作为原型向量?LVQ的思想是:
首先挑选一组样本作为假设的原型向量。
然后对于训练集中的每一个样本 , 找出假设的原型向量中,距离该样本最近的原型向量 :
(1) 如果 的标记与 的标记相同,则更新 ,将该原型向量更靠近。
(2) 如果 的标记与 的标记不相同,则更新 ,将该原型向量更远离。
不停进行这种更新,直到迭代停止条件(如以到达最大迭代次数,或者原型向量的更新幅度很小)。
LVQ算法:
(1) 样本集
(2) 原型向量个数
(3) 各原型向量预设的类别标记
(4) 学习率
输出:原型向量
(1) 依次随机从类别 中挑选一个样本,初始化一组原型向量 。
(2) 重复迭代,直到算法收敛。迭代过程如下:
(2.1) 从样本集 中随机选取样本 ,挑选出距离 最近的原型向量 。
(2.2) 如果 的类别等于 ,则: 。
(2.3) 如果 的类别不等于 ,则: 。
在原型向量的更新过程中:
则更新后的原型向量 距离 更近。
则更新后的原型向量 距离 更远。
如果 的类别不等于 ,则更新后, 与距离为:
如果 的类别等于 ,则更新后, 与距离为:
这里有一个隐含假设:即计算得到的样本 (该样本可能不在样本集中) 的标记就是更新之前的标记。
即:更新操作只改变原型向量的样本值,但是不改变该原型向量的标记。
高斯混合聚类采用概率模型来表达聚类原型。
对于 维样本空间 中的随机向量 ,若 服从高斯分布,则其概率密度函数为 :
其中 为 n 维均值向量, 是 的协方差矩阵。 的概率密度函数由参数 决定。
定义高斯混合分布: 。该分布由 个混合成分组成,每个混合成分对应一个高斯分布。其中:
假设训练集 的生成过程是由高斯混合分布给出。
令随机变量 表示生成样本 的高斯混合成分序号, 的先验概率 。
生成样本的过程分为两步:
根据贝叶斯定理, 若已知输出为 ,则的后验分布为:
其物理意义为:所有导致输出为 的情况中, 发生的概率。
当高斯混合分布已知时,高斯混合聚类将样本集 划分成 个簇 。
对于每个样本 ,给出它的簇标记 为:
即:如果 最有可能是 产生的,则将该样本划归到簇 。
这就是通过最大后验概率确定样本所属的聚类。
现在的问题是,如何学习高斯混合分布的参数。由于涉及到隐变量 ,可以采用EM算法求解。
具体求解参考EM 算法的章节部分。
相关文章推荐
往期算法工程师系列文章请点击蓝字标题,即可阅读《数据科学|算法工程师必备的机器学习--特征工程》
本文福利
可以在 本公众号后台 回复关键词:“ DS “ 获取大量由我平台编辑精心整理的学习资料,如果觉得有用, 请勿吝啬你的留言和赞哦!
—— 完 ——
文章须知
文章作者:华校专
责任编辑:周岩 logic 征帆
审核编辑:阿春
微信编辑:征帆
本文由『运筹OR帷幄』原创发布
如需转载请在公众号后台获取转载须知