在无监督学习(unsupervised learning)
中,训练样本的标记信息是未知的。
无监督学习的目标:通过对无标记训练样本的学习来揭露数据的内在性质以及规律。
一个经典的无监督学习任务:寻找数据的最佳表达(representation)
。常见的有:
低维表达:试图将数据(位于高维空间)中的信息尽可能压缩在一个较低维空间中。
稀疏表达:将数据嵌入到大多数项为零的一个表达中。该策略通常需要进行维度扩张。
独立表达:使数据的各个特征相互独立。
无监督学习应用最广的是聚类(clustering)
。
通常用 表示样本 的簇标记cluster label
,即 。于是数据集D的聚类结果可以用包含N个元素的簇标记向量来表示。
聚类的作用:
可以作为一个单独的过程,用于寻找数据内在的分布结构。
也可以作为其他学习任务的前驱过程。如对数据先进行聚类,然后对每个簇单独训练模型。
聚类问题本身是病态的。即:没有某个标准来衡量聚类的效果。
但是实际上不知道这个平均距离对应于真实世界的物理意义。
如:在图片识别中包含的图片有:红色卡车、红色汽车、灰色卡车、灰色汽车。可以聚类成:红色一类、灰色一类;也可以聚类成:卡车一类、汽车一类。
解决该问题的一个做法是:利用深度学习来进行分布式表达,可以对每个车辆赋予两个属性:一个表示颜色、一个表示型号。
可能很多不同的聚类都很好地对应了现实世界的某些属性,它们都是合理的。
可以简单的度量聚类的性质,如每个聚类的元素到该类中心点的平均距离。
聚类的性能度量也称作聚类的有效性指标validity index
。
直观上看,希望同一簇的样本尽可能彼此相似,不同簇的样本之间尽可能不同。即:簇内相似度intra-cluster similarity
高,且簇间相似度inter-cluster similarity
低。
聚类的性能度量分两类:
聚类结果与某个参考模型reference model
进行比较,称作外部指标external index
。
直接考察聚类结果而不利用任何参考模型,称作内部指标internal index
。
1.1.1 Jaccard系数
Jaccard
系数Jaccard Coefficient:JC
:
它刻画了:所有的同类的样本对(要么在C中属于同类,要么在中属于同类)中,同时隶属于的样本对的比例。
1.1.2 FM指数
1.1.3 Rand指数
1.1.4 ARI指数
则根据定义有: ,其中 表示组合数。数字2
是因为需要提取两个样本组成样本对。
1.2.1 DB指数
DB
指数Davies-Bouldin Index:DBI
:
其物理意义为:
该度量越小越好。
给定一个簇K ,遍历其它的簇,寻找该度量的最大值。
对所有的簇,取其最大度量的均值。
给定两个簇,每个簇样本距离均值之和比上两个簇的中心点之间的距离作为度量。
显然DBI越小越好。
如果每个簇样本距离均值越小(即簇内样本距离都很近),则DBI越小。
如果簇间中心点的距离越大(即簇间样本距离相互都很远),则DBI越小。
1.2.2 Dunn指数
Dunn
指数Dunn Index:DI
:
其物理意义为:任意两个簇之间最近的距离的最小值,除以任意一个簇内距离最远的两个点的距离的最大值。
显然DI越大越好。
如果任意两个簇之间最近的距离的最小值越大(即簇间样本距离相互都很远),则DI越大。
如果任意一个簇内距离最远的两个点的距离的最大值越小(即簇内样本距离都很近),则DI越大。
VDM
距离Value Difference Metric
:
当样本的属性为数值属性与非数值属性混合时,可以将闵可夫斯基距离与 VDM
距离混合使用。
当样本空间中不同属性的重要性不同时,可以采用加权距离。
以加权闵可夫斯基距离为例:
这里的距离函数都是事先定义好的。在有些实际任务中,有必要基于数据样本来确定合适的距离函数。这可以通过距离度量学习distance metric learning
来实现。
在某些任务中,根据数据的特点可能需要放松这一性质。如:美人鱼
和人
距离很近,美人鱼
和鱼
距离很近,但是人
和鱼
的距离很远。这样的距离称作非度量距离non-metric distance
。
原型聚类prototype-based clustering
假设聚类结构能通过一组原型刻画。
常用的原型聚类有:
k
均值算法k-means
。
学习向量量化算法Learning Vector Quantization:LVQ
。
高斯混合聚类Mixture-of-Gaussian
。
2.1.1 k-means
给定样本集, 假设一个划分为 。
k-means
的优化目标需要考察 D的所有可能的划分,这是一个NP
难的问题。实际上k-means
采用贪心策略,通过迭代优化来近似求解。
首先假设一组均值向量。
然后根据假设的均值向量给出了D的一个划分。
再根据这个划分来计算真实的均值向量:
(1) 如果真实的均值向量等于假设的均值向量,则说明假设正确。根据假设均值向量给出的D的一个划分确实是原问题的解。
(2) 如果真实的均值向量不等于假设的均值向量,则可以将真实的均值向量作为新的假设均值向量,继续迭代求解。
这里的一个关键就是:给定一组假设的均值向量,如何计算出D的一个簇划分?
k
均值算法的策略是:样本离哪个簇的均值向量最近,则该样本就划归到那个簇。
k-means
算法:
k-means
优点:
k-means
缺点:
通常进行多次k-means
,然后选择最优的那次作为最终聚类结果。
结果不一定是全局最优的,只能保证局部最优。
对噪声敏感。因为簇的中心是取平均,因此聚类簇很远地方的噪音会导致簇的中心点偏移。
无法解决不规则形状的聚类。
无法处理离散特征,如:国籍、性别
等。
需要首先确定聚类的数量 K。
分类结果严重依赖于分类中心的初始化。
k-means
性质:
k-means
实际上假设数据是呈现球形分布,实际任务中很少有这种情况。与之相比,GMM
使用更加一般的数据表示,即高斯分布。
k-means
假设各个簇的先验概率相同,但是各个簇的数据量可能不均匀。
k-means
使用欧式距离来衡量样本与各个簇的相似度。这种距离实际上假设数据的各个维度对于相似度的作用是相同的。
k-means
中,各个样本点只属于与其相似度最高的那个簇,这实际上是硬
分簇。
k-means
算法的迭代过程实际上等价于EM
算法。具体参考EM
算法章节。
2.1.2 k-means++
k-means++
属于 k-means
的变种,它主要解决 k-means
严重依赖于分类中心初始化的问题。
k-means++
选择初始均值向量时,尽量安排这些初始均值向量之间的距离尽可能的远。
k-means++
算法:
2.1.3 k-modes
k-modes
属于 k-means
的变种,它主要解决 k-means
无法处理离散特征的问题。
k-modes
与 k-means
有两个不同点(假设所有特征都是离散特征):
簇中心的更新规则不同。在k-modes
算法中,簇中心每个属性的取值为:簇内该属性出现频率最大的那个值。
距离函数不同。在k-modes
算法中,距离函数为:
其中为示性函数。
上式的意义为:样本之间的距离等于它们之间不同属性值的个数。
其中v的取值空间为所有样本在第d个属性上的取值。
2.1.4 k-medoids
k-medoids
属于 k-means
的变种,它主要解决k-means
对噪声敏感的问题。
k-medoids
算法:
k-medoids
算法在计算新的簇心时,不再通过簇内样本的均值来实现,而是挑选簇内距离其它所有点都最近的样本来实现。这就减少了孤立噪声带来的影响。
k-medoids
算法复杂度较高,为。其中计算代价最高的是计算每个簇内每对样本之间的距离。
通常会在算法开始时计算一次,然后将结果缓存起来,以便后续重复使用。
2.1.5 mini-batch k-means
mini-batch k-means
属于 k-means
的变种,它主要用于减少k-means
的计算时间。
mini-batch k-means
算法每次训练时随机抽取小批量的数据,然后用这个小批量数据训练。这种做法减少了k-means
的收敛时间,其效果略差于标准算法。
mini-batch k-means
算法:
与一般聚类算法不同,学习向量量化Learning Vector Quantization:LVQ
假设数据样本带有类别标记,学习过程需要利用样本的这些监督信息来辅助聚类。
给定样本集,LVQ
的目标是从特征空间中挑选一组样本作为原型向量。
LVQ
的想法是:通过从样本中挑选一组样本作为原型向量,可以实现对样本空间X的簇划分。
问题是如何从样本中挑选一组样本作为原型向量?LVQ
的思想是:
LVQ
算法:
在原型向量的更新过程中:
这里有一个隐含假设:即计算得到的样本 (该样本可能不在样本集中) 的标记就是更新之前的标记。
即:更新操作只改变原型向量的样本值,但是不改变该原型向量的标记。
高斯混合聚类采用概率模型来表达聚类原型。
对于n维样本空间X中的随机向量,若服从高斯分布,则其概率密度函数为 :
定义高斯混合分布: 。该分布由 K个混合成分组成,每个混合成分对应一个高斯分布。其中:
假设训练集的生成过程是由高斯混合分布给出。
令随机变量表示生成样本的高斯混合成分序号,Z的先验概率。
生成样本的过程分为两步:
根据贝叶斯定理, 若已知输出为,则的后验分布为:
其物理意义为:所有导致输出为的情况中, 发生的概率。
当高斯混合分布已知时,高斯混合聚类将样本集D划分成K个簇。
现在的问题是,如何学习高斯混合分布的参数。由于涉及到隐变量Z,可以采用EM
算法求解。
密度聚类density-based clustering
假设聚类结构能够通过样本分布的紧密程度确定。
密度聚类算法从样本的密度的角度来考察样本之间的可连接性,并基于可连接样本的不断扩张聚类簇,从而获得最终的聚类结果。
DBSCAN
是一种著名的密度聚类算法,它基于一组邻域参数 来刻画样本分布的紧密程度。
给定数据集 , 定义:
DBSCAN
算法的簇定义:给定邻域参数, 一个簇是满足下列性质的非空样本子集:
即一个簇是由密度可达关系导出的最大的密度相连样本集合。
DBSCAN
算法的思想:若为核心对象,则密度可达的所有样本组成的集合记作。可以证明 :X就是满足连接性与最大性的簇。
于是 DBSCAN
算法首先任选数据集中的一个核心对象作为种子seed
,再由此出发确定相应的聚类簇。
DBSCAN
算法:
注意:
若在核心对象的寻找密度可达的样本的过程中,发现核心对象是由密度可达的,且尚未被访问,则将 加入所属的簇,并且标记为已访问。
对于D中的样本点,它只可能属于某一个聚类簇。因此在核心对象的寻找密度可达的样本的过程中,它只能在标记为未访问的样本中寻找 (标记为已访问的样本已经属于某个聚类簇了)。
DBSCAN
算法的优点:
簇的数量由算法自动确定,无需人工指定。
基于密度定义,能够对抗噪音。
可以处理任意形状和大小的簇。
DBSCAN
算法的缺点:
若样本集的密度不均匀,聚类间距差相差很大时,聚类质量较差。因为此时参数和 MinPts 的选择比较困难。
无法应用于密度不断变化的数据集中。
Mean-Shift
是基于核密度估计的爬山算法,可以用于聚类、图像分割、跟踪等领域。
给定n维空间的 N个样本组成的数据集,给定一个中心为、半径为h的球形区域 S(称作兴趣域
),定义其mean shift
向量为: 。
Mean-Shift
算法的基本思路是:
移动过程中,兴趣域
范围内的所有样本都标记为同一个簇。
因此Mean-Shift
会向着密度最大的区域移动。
下图中:蓝色为当前的兴趣域
,红色为当前的中心点;紫色向量为mean shift
向量,灰色为移动之后的兴趣域
。
在计算mean shift
向量的过程中假设每个样本的作用都是相等的。实际上随着样本与中心点的距离不同,样本对于mean shift
向量的贡献不同。
Mean_Shift
算法:
迭代,直到所有的样本都被访问过。迭代过程为(设已有的簇为 1,2,\cdots,L-1 ):
(1) 在未访问过的样本中随机选择一个点作为中心点 ,找出距它半径为h的兴趣域
,记做 S。将 S中的样本的簇标记设置为L(一个新的簇)。
(2) 计算当前的mean shift
向量,兴趣域中心的移动为:
在移动过程中,兴趣域内的所有点标记为
访问过
,并且将它们的簇标记设置为L。
合并时,当前簇中的样本的簇标记重新修改为l。
当所有的样本都被访问过时,重新分配样本的簇标记(因为可能有的样本被多个簇标记过):若样本被多个簇标记过,则选择最大的那个簇作为该样本的簇标记。即:尽可能保留大的簇。
层次聚类hierarchical clustering
试图在不同层次上对数据集进行划分,从而形成树形的聚类结构。
AGglomerative NESting:AGNES
是一种常用的采用自底向上聚合策略的层次聚类算法。
AGNES
首先将数据集中的每个样本看作一个初始的聚类簇,然后在算法运行的每一步中,找出距离最近的两个聚类簇进行合并。
合并过程不断重复,直到达到预设的聚类簇的个数。
这里的关键在于:如何计算聚类簇之间的距离?
由于每个簇就是一个集合,因此只需要采用关于集合的某个距离即可。给定聚类簇 , 有三种距离:
最小距离由两个簇的最近样本决定。
最大距离由两个簇的最远样本决定。
平均距离由两个簇的所有样本决定。
AGNES
算法可以采取上述任意一种距离:
当AGNES
算法的聚类簇距离采用时,称作单链接single-linkage
算法。
当AGNES
算法的聚类簇距离采用时,称作全链接complete-linkage
算法。
当AGNES
算法的聚类簇距离采用时,称作均链接average-linkage
算法 。
AGNES
算法:
每进行一次迭代,聚类簇的数量就减少一些。
AGNES
算法的优点:
距离容易定义,使用限制较少。
可以发现聚类的层次关系。
AGNES
算法的缺点:
计算复杂度较高。
算法容易聚成链状。
BIRCH:Balanced Iterative Reducing and Clustering Using Hierarchies
算法通过聚类特征树CF Tree:Clustering Feature True
来执行层次聚类,适合于样本量较大、聚类类别数较大的场景。
4.2.1 聚类特征
聚类特征CF
:每个CF
都是刻画一个簇的特征的三元组: 。其中:
根据CF
的定义可知:如果CF1
和 CF2
分别表示两个不相交的簇的特征,如果将这两个簇合并成一个大簇,则大簇的特征为:。
即:CF
满足可加性。
给定聚类特征CF
,则可以统计出簇的一些统计量:
给定两个不相交的簇,其特征分别为和。
4.2.2 CF 树
CF
树的结构类似于平衡B+
树 。树由三种结点构成:根结点、中间结点、叶结点。
根结点、中间结点:由若干个聚类特征CF
,以及这些CF
指向子结点的指针组成。叶结点:由若干个聚类特征CF
组成。
(1) 叶结点没有子结点,因此CF
没有指向子结点的指针。
(2) 所有的叶结点通过双向链表连接起来。
(3) 在BIRCH
算法结束时,叶结点的每个CF
对应的样本集就对应了一个簇。
CF
树有三个关键参数:
由于 CF
的可加性,所以 CF
树中,每个父结点的 CF
等于它所有子结点的所有 CF
之和。
CF
树的生成算法:
4.2.3 BIRCH 算法
BIRCH
算法的主要步骤是建立 CF
树,除此之外还涉及到 CF
树的瘦身、离群点的处理。
BIRCH
需要对CF
树瘦身,有两个原因:
将数据点插入到CF
树的过程中,用于存储CF
树结点及其相关信息的内存有限,导致部分数据点生长形成的CF
树占满了内存。因此需要对CF
树瘦身,从而使得剩下的数据点也能插入到CF
树中。
CF
树生长完毕后,如果叶结点中的CF
对应的簇太小,则会影响后续聚类的速度和质量。
BIRCH
瘦身是在将增加的过程。算法会在内存中同时存放旧树T和新树,初始时刻为空。
BIRCH
离群点的处理:
稀疏子簇:簇内数据点的数量远远少于所有子簇的平均数据点的那些子簇。
将稀疏子簇放入待定区时,需要同步更新
CF
树上相关路径及结点。
如果数据点无法插入到CF
树中,则可以确定为真正的离群点。
当D中所有数据点都被插入之后,扫描待定区中的所有数据点(这些数据点就是候选的离群点),并尝试将其插入到CF
树中。
在对CF
瘦身之后,搜索所有叶结点中的所有子簇,寻找那些稀疏子簇,并将稀疏子簇放入待定区。
BIRCH
算法:
BIRCH
算法优点:
节省内存。所有样本都存放在磁盘上,内存中仅仅存放CF
结构。
计算速度快。只需要扫描一遍就可以建立CF
树。
可以识别噪声点。
BIRCH
算法缺点:
结果依赖于数据点的插入顺序。原本属于同一个簇的两个点可能由于插入顺序相差很远,从而导致分配到不同的簇中。甚至同一个点在不同时刻插入,也会被分配到不同的簇中。
对非球状的簇聚类效果不好。这是因为簇直径 和簇间距离的计算方法导致。
每个结点只能包含规定数目的子结点,最后聚类的簇可能和真实的簇差距很大。
BIRCH
可以不用指定聚类的类别数 K。
如果不指定K,则最终叶结点中CF
的数量就是K。
如果指定K,则需要将叶结点按照距离远近进行合并,直到叶结点中CF
数量等于K。
谱聚类spectral clustering
是一种基于图论的聚类方法。
谱聚类的主要思想是:基于数据集来构建图 ,其中:
顶点V:由数据集中的数据点组成:。
边E:任意一对顶点之间存在边。
距离越近的一对顶点,边的权重越高;距离越远的一对顶点,边的权重越低。
通过对图进行切割,之间的边的权重尽可能的低、各子图内的边的权重尽可能的高。这样就完成了聚类。
在图 中,定义权重 为顶点 和 之间的权重,其中 。
定义 为邻接矩阵:
由于 为无向图,因此 。即: 。
对图中顶点 ,定义它的度 为:所有与顶点 相连的边的权重之和: 。
定义度矩阵 为一个对角矩阵,其中对角线分别为各顶点的度:
对于顶点集合 的一个子集 ,定义为子集中点的个数;定义,为子集 中所有点的度之和。
2. 事实上在谱聚类中,通常只给定数据集 ,因此需要计算 出邻接矩阵。
(1) 通常相似度采用高斯核: 。此时有 。即: 。
(2) 也可以选择不同的核函数,如:多项式核函数、高斯核函数、sigmoid
核函数。
基本思想是:距离较近的一对点(即相似都较高),边的权重较高;距离较远的一对点(即相似度较低),边的权重较低。
基本方法是:首先构建相似度矩阵 ,然后使用近邻法、K 近邻法、或者全连接法。
3. ϵ-近邻法:设置一个距离阈值 ,定义邻接矩阵为:
即:一对相似度小于 的点,边的权重为 ;否则边的权重为。
ϵ-近邻法得到的权重要么是 ,要么是 ,权重度量很不精确,因此实际应 用较少。
4. K 近邻法:利用 KNN
算法选择每个样本最近的 个点作为近邻,其它点与 当前点之间的边的权重为 。
这种做法会导致邻接矩阵 非对称,因为当 是 的 近邻时, 不 一定是 的 K 近邻。
为了解决对称性问题,有两种做法:
5. 全连接法:所有点之间的权重都大于 : 。
定义拉普拉斯矩阵 ,其中 为度矩阵、 为邻接矩阵。
拉普拉斯矩阵 的性质:
设其 个实特征值从小到大为 ,即: 。
是对称矩阵,即 。这是因为 , 都是对称矩阵。
因为 是实对称矩阵,因此它的特征值都是实数。
对任意向量 ,有: 。
是半正定的,且对应的 个特征值都大于等于0,且最小的特征值为 。
给定无向图 ,设子图的点的集合和子图的点的集合都是的子集,且。
定义 和 之间的切图权重为: 。
即:所有连接 和 之间的边的权重。
对于无向图 ,假设将它切分为 个子图:每个子图的点的集合为 ,满足 且 。
定义切图cut
为: ,其中 为 的补集。
5.3.1 最小切图
引入指示向量 ,定义:
则有:
因此 。其中 , 为矩阵的迹。
考虑到顶点 有且仅位于一个子图中,则有约束条件:
2. 最小切图算法: 最小的切分。即求解:
3. 最小切图切分使得不同子图之间的边的权重尽可能的低,但是容易产生分割 出只包含几个顶点的较小子图的歪斜分割现象。
5.3.2 RatioCut 算法
RatioCut
切图不仅考虑最小化 ,它还考虑最大化每个子图的点的个数。即:
最小化 :使得不同子图之间的边的权重尽可能的低。
最大化每个子图的点的个数:使得各子图尽可能的大。
引入指示向量 ,定义:
则有:
因此 。其中 , 为矩阵的迹。
考虑到顶点 有且仅位于一个子图中,则有约束条件:
3. RatioCut
算法: 最小的切分。即求解:
因此只需要求解 最小的 个特征值,求得对应的 个特征向量组成 。
通常在求解得到 之后,还需要对行进行标准化:
4. 事实上这样解得的 不能完全满足指示向量的定义。因此在得到 之后, 还需要对每一行进行一次传统的聚类(如:k-means
聚类)。
5.RatioCut
算法:
输入:
(1) 数据集
(2) 降维的维度
(3) 二次聚类算法
(4) 二次聚类的维度
输出:聚类簇
算法步骤:
(1) 根据 构建相似度矩阵 。
(2) 根据相似度矩阵构建邻接矩阵 、度矩阵,计算拉普拉斯矩阵。
(3) 计算 最小的 个特征值,以及对应的特征向量 ,构建矩阵 。
(4) 对 按照行进行标准化: ,得到 。
(5) 将 中每一行作为一个 维的样本,一共 个样本,利用二次聚类算法来聚类,二次聚类的维度为 。
最终得到簇划分 。
5.3.3 Ncut 算法
Ncut
切图不仅考虑最小化 ,它还考虑最大化每个子图的边的权重。即:
最小化 :使得不同子图之间的边的权重尽可能的低。
最大化每个子图的边的权重:使得各子图内的边的权重尽可能的高。
引入指示向量 ,定义:
则有:
因此 。其中 ,为矩阵的迹。
考虑到顶点 有且仅位于一个子图中,则有约束条件:
3. Ncut
算法: 最小的切分。即求解
4. 令 ,则有:
令 ,则最优化目标变成:
因此只需要求解 最小的 个特征值,求得对应的 个特征向量组成 。 然后对行进行标准化:。
与RatioCut
类似,Ncut
也需要对 的每一行进行一次传统的聚类(如:k-means
聚类)。
5. 事实上 相当于对拉普拉斯矩阵 进行了一次标准化: 。
6.Ncut
算法:
(5) 对 按照行进行标准化: ,得到 。
(6) 将 中每一行作为一个 维的样本,一共 个样本,利用二次 聚类算法来聚类,二次聚类的维度为 。
最终得到簇划分 。
输入:
(1) 数据集
(2) 降维的维度
(3) 二次聚类算法
(4) 二次聚类的维度
输出:聚类簇
算法步骤:
(1) 根据 构建相似度矩阵 。
(2) 根据相似度矩阵构建邻接矩阵 、度矩阵,计算拉普拉斯矩阵。
(3) 构建标准化之后的拉普拉斯矩阵 。
(4) 计算 最小的 个特征值,以及对应的特征向量 ,构建矩阵 。
5.4 性质
谱聚类算法优点:
只需要数据之间的相似度矩阵,因此处理稀疏数据时很有效。
由于使用了降维,因此在处理高维数据聚类时效果较好。
2. 谱聚类算法缺点:
如果最终聚类的维度非常高,则由于降维的幅度不够,则谱聚类的运行速度和最后聚类的效果均不好。
聚类效果依赖于相似度矩阵,不同相似度矩阵得到的最终聚类效果可能不同。
参考
【1】算法工程师必备的机器学习--聚类(上)
【2】算法工程师必备的机器学习--聚类(下)