聚类
1.有监督学习与无监督学习
首先,看一下有监督学习(Supervised Learning)和无监督学(Unsupervised Learning)习的区别,给定一组数据(input,target)为 Z = (X, Y) 。
有监督学习: 最常见的是回归(regression)和分类(classification)。
- Regression: Y 是实数向量。回归问题,就是拟合 (X, Y) 的一条曲线,使得下式损失函数 L 最小。
L(f, (X, Y)) = ∥f(X) − Y∥2
- Classification: Y 是一个finite number,可以看做类标号。分类问题需要首先给定有label的数据训练分类器,故属于有监督学习过程。分类问题中,cost function L(X, Y) 是 X 属于类 Y 的概率的负对数。
L(f, (X, Y)) = −logfY(X), fi(X) = P(Y = i|X); fY(X) ≥ 0, ∑ifi(X) = 1
无监督学习:无监督学习的目的是学习一个function f ,使它可以描述给定数据的位置分布 P(Z) 。 包括两种:密度估计(density estimation)和聚类(clustering).
density estimation就是密度估计,估计该数据在任意位置的分布密度
clustering就是聚类,将 Z 聚集几类(如K-Means),或者给出一个样本属于每一类的概率。由于不需要事先根据训练数据去训练聚类器,故属于无监督学习。
PCA和很多deep learning算法都属于无监督学习。
聚类
聚类试图将数据集中的样本划分为若干个通常不相交的子集,每个子集称为一个“簇”(cluster).形式化地说,假定样本集
D = {x1, x2, ⋯, xm}
包含 m 个无标记样本,每个样本 xi = (xi1; xi2; ⋯; xim) 是一个 n 维特征向量,则聚类算法将样本集 D 划分为 k 个不相交的簇
相应地,用
λj ∈ {1, 2, ⋯, k}
表示样本xj的簇标记(cluster label),即xj ∈ Cλj.于是,聚类的结果可以用包含 m 个元素的簇标记向量λ = (λ1; λ2; ⋯; λm)表示。
基于不同的学习策略有很多种类型的聚类学习算法,这里先讨论两个基本问题,性能度量和距离计算。
2.性能度量
聚类性能度量亦称聚类“有效性指标”(validity index).对于聚类结果,需要通过某种性能度量来评估其好坏。聚类结果应“簇内相似度”(intra-cluster similarity)高且“簇间相似度”(inter-cluster similarity)低。
聚类性能度量大致分为两类.一类是将聚类结果与某个参考模型(reference model)进行比较,称为外部指标(external index);另一类是直接考察聚类结果而不利用任何参考模型,称为内部指标(internal index).
对数据集 D ,假定通过聚类给出的簇划分结果为
C = {C1, C2, ⋯, Ck}
参考模型给出的簇划分为
C* = {C1*, C2*, ⋯, Ck*}
相应地,令λ, λ*表示C, C*对应的簇标记向量。定义
a = |SS|, SS = {(xi, xj)|λi = lambdaj, λi* = lambdaj*, i < j}
b = |SD|, SD = {(xi, xj)|λi = lambdaj, λi*neqlambdaj*, i < j}
c = |DS|, DS = {(xi, xj)|λi ≠ lambdaj, λi* = lambdaj*, i < j}
d = |DD|, DD = {(xi, xj)|λi ≠ lambdaj, λi* ≠ lambdaj*, i < j}
其中集合 SS 包含了在 C 中隶属于相同簇且在C*中也隶属于相同簇的样本对;集合 SD 包含了在 C 中隶属于相同簇但在C*中隶属于不同簇的样本对;……由于每个样本对 (xi, xj)(i < j) 仅能出现在一个集合中,因此有 a + b + c + d = m(m − 1)/2 成立。
基于上述式子可导出以下常用的聚类性能度量外部指标:
- Jaccard系数(Jaccard Coefficient,简称JC)
- FM指数(Fowlkes and Makkows Index,简称FMI)
- Rand指数(Rand Index,简称RI)
上述性能度量的结果值均在 [0, 1] 区间,值越大越好。
定义
diam(C) = max1 ≤ i < j ≤ |C|dist(xi, xj)
dmin(Ci, Cj) = minxi ∈ Ci, xj ∈ Cjdist(xi, xj)
dcen(Ci, Cj) = dist(μi, μj)
其中, dist(⋅, ⋅) 用于计算两个样本之间的距离; μ 代表簇 C 的中心点
显然, avg(C) 对应簇 C 内样本间的平均距离; diam(C) 对应于簇 C 内样本的最远距离; dmin(Ci, Cj) 对应于簇 Ci , Cj 最近样本间的距离; dcen(Ci, Cj) 对应于簇 Ci , Cj 中心点间的距离。
由上述各种距离的定义可以导出以下常用的聚类性能度量内部指标:
- DB指数(Davies_Bouldin Index,简称DBI)
- Dunn指数(Dunn Index,简称DI)
3.距离计算
dist(⋅, ⋅) 是距离度量,它有一些基本性质:
非负性: dist(xi, xj) ≥ 0 ;
同一性: dist(xi, xj) = 0 当且仅当 xi = xj ;
对称性: dist(xi, xj) = dist(xi, xj) ;
直递性: dist(xi, xj) ≤ dist(xi, xk) + dist(xk, xj) .
给定样本 xi = (xi1; xi2; ⋯; xin) 与 xj = (xj1; xj2; ⋯; xjn) ,则闵可夫斯基距离(Minkowski distance)为
对于 p ≥ 1 上式满足距离度量的基本性质。
p = 2 时该距离称为欧氏距离(Euclidean distance)
p = 2 时为曼哈顿距离(Manhattan distance)
对于1,2,3这类数字型之间的距离,可以直接算出1与2的距离比较近、与3的距离比较远,这样的属性称为有序属性(ordinal attribute);而对于与飞机,火车,轮船这样的离散属性则不能直接在属性值上计算距离,称为无序属性(non-ordinal attribute)。无属性距离不可用闵可夫斯基距离计算。
对无序属性可采用VDM(Value Difference Metric).令 mu, a 表示在属性 u 上取值为 a 的样本个数, mu, a, i 表示在第 i 个样本簇中在属性 u 上取值为 a 的样本数, k 为样本簇数,则属性 u 上两个离散值 a 与 b 之间的VDM为
将闵可夫斯基距离和VDM结合即可处理混合属性。假定有 nc 个有序属性, n − nc 个无序属性,令有序属性排列在无序属性之前,则
当样本空间中不同属性的重要性不同时,可使用加权距离(weihted distance),以加权闵可夫斯基距离为例
其中权重 wi ≥ 0(i = 1, 2, ⋯, n)
表征不同属性的重要性,一般
通常相似度度量是基于某种形式的距离来定义的,距离越大,相似度越小。用于相似度度量的距离未必一定要满足距离度量的所有基本性质,尤其是直递性。不满足直递性的距离称为非度量距离(non-metric-distance).
4.原型聚类
原型聚类亦称基于原型的聚类(protorype-based clustering),此类算法假设聚类结构能通过一组原型刻画,算法先对原型进行初始化,然后对原型进行迭代更新。
4.1 k-means算法
给定样本集
D = {x1, x2, ⋯, xm}
k-means算法针对聚类所得簇划分
C = {C1, C2, ⋯, Ck}
最小化平方误差
其中 μi 是簇 Ci 的均值向量。在一定程度上上式刻画了簇内样本围绕均值向量的紧密程度, E 值越小则簇内样本相似度越高。
最小化上述平方误差并不简单,找到最优解需要考察样本集 D 所有可能的簇划分,这是一个NP-Hard问题。因此,k-means算法采用了贪心策略,通过迭代优化近似解。
k-means算法流程:
输入:聚类簇数 k ,样本集D = {x1, x2, ⋯, xm}
过程:
从 D 中随机选择 k 个样本作为初始均值向量{μ1, μ2, ⋯, μk}
令 Ci = ∅(1 ≤ i ≤ k)
对于 j = 1, 2, ⋯, m 计算样本 xj 与各均值向量 μi(1 ≤ i ≤ k) 的距离:
dji = ∥xj − μi∥2
根据距离最近的均值向量确定 xj 的簇标记: λj = arg minidji ; 将样本 xj 划入相应的簇:Cλj = Cλj⋃{xj};
对于 i = 1, 2, ⋯, k 计算新均值向量 μi′ ;如果 μi′ ≠ μi 则将当前均值向量 μi 更新为 μi′ ;否则保持当前均值向量不变
重复步骤3,4,直到当前均值向量均未更新
输出:簇划分C = {C1, C2, ⋯, Ck}
K-Means 优缺点:
当结果簇是密集的,而且簇和簇之间的区别比较明显时,K-Means 的效果较好。对于大数据集,K-Means 是相对可伸缩的和高效的,它的复杂度是 O(nkt) ,n 是对象的个数,k 是簇的数目,t 是迭代的次数,通常 k ≪ n ,且 t ≪ n ,所以算法经常以局部最优结束。
K-Means 的最大问题是要求先给出 k 的个数。k 的选择一般基于经验值和多次实验结果,对于不同的数据集,k 的取值没有可借鉴性。另外,K-Means 对孤立点数据是敏感的,少量噪声数据就能对平均值造成极大的影响。
The Lloyd’s Method
Input: n个数据点的集合 x1, x2, ⋯, xn ∈ Rd
Initialize: 初始化簇中心 c1, c2, ⋯, ck ∈ Rd 和簇 C1, C2, ⋯, Ck
Repeat: 直到满足停止条件
For each j:Cj ← {x ∈ S, dist(x, cj) < dist(x, ci), i ≠ j, i = 1, 2, ⋯, k},保持 c1, c2, ⋯, ck 不变,找出最优的簇 C1, C2, ⋯, Ck
For each j: cj ← mean of Cj 保持簇不变 C1, C2, ⋯, Ck 算出最优中心点 c1, c2, ⋯, ck
每次迭代损失函数均在下降,并有下界,因此收敛。每次迭代 O(ndk) .
Lloyd方法初始化有多种方式,最常用的有以下几种:
- 从数据集中随机选取k个中心点
- Furthest Traversal
- k-means++
随机初始化
随机初始化过程如下图:







但随机初始化,会存在如下问题:
Furthest Traversal
首先任意选择一个簇的中心 c1
For j = 1,2, ⋯ , k :
- 选择一个离已选择的中心点 c1, c2, ⋯, cj − 1 都远的点 cj 作为新的中心点
过程如下:



但是这种方法容易受到噪点的影响,如下:
k-means++
假设 D(x) 为点 x 到它最近中心点的距离
首先,随机选择 c1
For j=2,…,k
- 在数据集中选择 cj ,根据以下分布
Pr(cj = xi) ∝ minj′ < j∥xi − cj′∥2
将上述距离平方算出后进行归一化,便是 xi 被选为下一个中心点的概率,这样,离现有中心点越远则这个点被选择为下一个中心点的概率越高。
上述方法虽然噪点被选的概率很高,但是噪点的个数较少;而和现有中心点是不同簇的点同样离中心点较远,并且这样点的个数较多,因此这些点其中之一被选的概率应该比噪点被选中的概率高;这样可降低噪点对聚类结果的影响。
k-means++步骤
1.先从我们的数据库随机挑个随机点当“种子点”。
2.对于每个点,我们都计算其和最近的一个“种子点”的距离 D(x) 并保存在一个数组里,然后把这些距离加起来得到 Sum(D(x)) 。
3.然后,再取一个随机值,用权重的方式来取计算下一个“种子点”。这个算法的实现是,先取一个能落在 Sum(D(x)) 中的随机值 Random ,然后用 Random− = D(x) ,直到 Random < = 0 ,此时的点就是下一个“种子点”。
4.重复第(2)和第(3)步直到所有的K个种子点都被选出来。
5.进行K-Means算法。
k-means++ 每次需要计算点到中心的距离,复杂度为 O(ndk) , d维。
可以看到算法的第三步选取新中心的方法,这样就能保证距离 D(x) 较大的点,会被选出来作为聚类中心了。至于为什么原因很简单,如下图 所示:

假设A、B、C、D的 D(x) 如上图所示,当算法取值 Sum(D(x)) * Random 时,该值会以较大的概率落入 D(x) 较大的区间内,所以对应的点会以较大的概率被选中作为新的聚类中心。
可以将上述方法进行推广
Pr(cj = xi) ∝ minj′ < j∥xi − cj′∥α
当 α = 0 时就是随机初始化
当 α = ∞ 时就是 Furthest Traversal
当 α = 2 时就是k-means++
当 α = 1 时就是k-median
4.2 学习向量化
与 k 均值算法类似,学习向量化(Learning Vector Quantization, LVQ)也是试图找到一组原型向量来刻画聚类结构,但与一般聚类算法不同的是,LVQ假设数据样本带有类别标记,学习过程利用样本的这些监督信息来辅助聚类。
给定样本集
D = {(x1, y1), (x2, y2), ⋯, (xm, ym)}
每个样本 xj 是由 n 个属性描述的特征向量 (xj1; xj2, ⋯, xjn), yj ∈ 𝒴 是样本 xj 的类别标记。LVQ的目标是学得一组 n 维原型向量
{p1, p2, ⋯, pq}
每个原型向量代表一个聚类簇,簇标记 ti ∈ 𝒴 ,学习率参数 η ∈ (0, 1)
算法主要步骤包括:初始化原型向量;迭代优化,更新原型向量。
具体来说,主要是:
- 1.对原型向量初始化,对第 q 个簇可从类别标记为 tq 的样本中随机选取一个作为原型向量,这样初始化一组原型向量
{p1, p2, ⋯, pq}
2.从样本中随机选择样本 (xj, yj) ,计算样本 xj 与 pi(0 ≤ i ≤ q) 的距离:dji = ∥xj − pi∥2;找出与 xj 距离最近的原型向量pi*, i* = arg mini ∈ {1, 2, ⋯, q}dji$
3.如果yj = ti*则令pi′ = pi* + η ⋅ (xj − pi*),否则令pi′ = pi* − η ⋅ (xj − pi*)
4.更新原型向量,pi* = pi′
5.判断是否达到最大迭代次数或者原型向量更新幅度小于某个阈值。如果是,则停止迭代,输出原型向量;否则,转至步骤2。
LVQ的关键是第3-4步,即如何更新原型向量。对样本 xj ,若原型向量pi*与 xj 的标记相同,则令pi*向 xj 的方向靠拢,此时新的原型向量为
pi′ = pi* + η ⋅ (xj − pi*)
pi′ 与 xj 之间的距离为
∥pi′ − xj∥2 = ∥pi* + η ⋅ (xj − pi*) − xj∥2 = (1 − η)⋅∥pi* − xj∥2
则原型向量pi*在更新为 pi′ 之后将更接近 xj .
类似的,若pi*与 xj 的标记不同,则更新后的原型向量与 xj 之间的距离将增大为(1 + η)⋅∥pi* − xj∥2,从而更远离 xj .
在学得一组原型向量{p1, p2, ⋯, pq}后,即可实现对样本空间 𝒳 的簇划分。每个原型向量 pi 定义了与之相关的一个区域 Ri ,该区域中每个样本与 pi 的距离不大于它与其他原型向量 pi′(i′ ≠ i) 的距离,即
Ri = {x|∥x − pi∥2 ≤ ∥x − pi′∥2, i′ ≠ i}
由此形成了对样本空间 𝒳 的簇划分{R1, R2, ⋯, Rq},该划分通常称为Voronoi剖分(Voronoi tessellation).
4.3 高斯混合聚类
与 k 均值,LVQ用原型向量来刻画聚类结构不同,高斯混合(Mixture-of-Gaussian)聚类采用概率模型来表达聚类原型,
对 n 维样本空间 𝒳 中的随机向量 x ,若 x 服从高斯分布,其概率密度为
其中 μ 是 n 维均值向量, Σ 是 n × n 的协方差矩阵。 高斯分布完全由均值向量 μ 和协方差矩阵 Σ 这两个参数确定。为了显示高斯分布与相应参数的依赖关系,将概率密度函数记为
p(x|μ, Σ)
定义高斯混合分布
该分布共由 k
个混合成分组成,每个混合成分对应一个高斯分布,其中 μi, Σi
是第 i
个高斯混合成分的参数,而 αi > 0
为相应的混合系数(mixture coefficient),
假设样本的生成过程由高斯混合分布给出:首先,根据 α1, α2, ⋯, αk 定义的先验分布选择高斯混合成分,其中 αi 为选择第i 个混合成分的概率;然后,根据被选择的混合成分的概率进行采样,从而生成相应的样本。
常用EM算法对上述分布进行迭代优化求解,之前已详细讨论过EM算法,此处不再进行讨论。
5.密度聚类
密度聚类亦称基于密度的聚类(density-based clustering),此类算法假设聚类结构能通过样本分布的紧密程度确定。通常情形下,密度聚类算法从样本密度的角度来考察样本之间的可连接性,并基于可连接样本不断扩展聚类簇以获得最终的聚类结果。
DBSCAN是一种著名的密度聚类算法,它基于一组邻域(neighborhood)参数 (ϵ, MinPts) 来刻画样本分布的紧密程度。给定数据集D = {x1, x2, ⋯, xm},定义下面这几个概念:
ϵ− 邻域:对 xj ∈ D ,其 ϵ− 邻域包含样本集 D 中与 xj 的距离不大于 ϵ 的样本,即Nϵ(xj) = {xiinD| dist(xi, xj) ≤ ϵ}。
核心对象(core object): 若 xj 的 ϵ− 邻域至少包含 MinPts 个样本,即|Nϵ(xj)| ≥ MinPts,则 xj 是一个核心对象;
密度直达(directly density-reachable):若 xj 位于 xi 的 ϵ− 邻域中,且 xi 是核心对象,则称 xj 由 xi 密度直达;
密度可达(density-reachable):对 xi 与 xj ,若存在样本序列 p1, p2, ⋯, pn ,其中 p1 = xi, pn = xj 且 pi + 1 由 pi 密度直达,则称 xj 由 xi 密度可达;
密度相连(density-connected):对 xi 与 xj ,若存在 xk 使得 xi 与 xj 均由 xk 密度可达,则称 xi 与 xj 密度相连。
下图给出上述概念的直观概念

上图中 MinPts = 3 ,虚线显示出 ϵ− 邻域, x1 是核心对象, x2 由 x1 密度直达, x3 由 x1 密度可达,x3 与 x4 密度相连。
基于这些概念,DBSCAN将簇定义为:由密度可达关https://zhuanlan.zhihu.com/p/577060385系导出的最大的密度相连样本集合。形式化地说,给定邻域参数 (ϵ, MinPts) ,簇 C ⊆ D 是满足以下性质的非空样本子集:
连接性(connectivity): xi ∈ C, xj ∈ C ⇒ xi 与 xj 密度相连
最大性(maximality): xi ∈ C, xj 由 mathbfxi 密度可达 ⇒ xj ∈ C
若 x 为核心对象,由 x 密度可达的所有样本组成的集合记为X = {x′ ∈ D|x′ density − reachable by x},则不难证明 X 即为满足连接性与最大性的簇。
于是,DBSCAN算法先任选数据集中的一个核心对象为种子(seed),再由此出发确定相应的聚类簇,算法描述如下。算法先根据给定的邻域参数 (ϵ, MinPts) 找出核心对象;然后以任一核心对象为出发点,找出其密度可达的样本生成聚类簇,直到所有核心对象均被访问为止。
输入:样本集D = {x1, x2, ⋯, xm},邻域参数 (ϵ, MinPts) ,样本距离度量方式
输出:簇划分
初始化核心对象集合 Ω = ∅ ,初始化聚类簇数 k = 0 ,初始化未访问样本集合 Γ = D ,簇划分 C = ∅
对于 j = 1, 2, ⋯, m 按下面的步骤找出所有的核心对象:
- 通过距离度量方式,找到样本 xj 的 ϵ− 邻域子样本集 Nϵ(xj)
- 如果子样本集样本个数满足|Nϵ(xj)| ≥ MinPts,将样本 xj 加入核心对象样本集合:Ω = Ω ∪ {xj}
如果核心对象集合 Ω = ∅ ,则算法结束,否则转入步骤4
在核心对象集合 Ω 中,随机选择一个核心对象 o ,初始化当前簇核心对象队列Ωcur = {o},初始化类别序号 k = k + 1 ,当初始化当前簇样本集合Ck = {o},更新未访问样本集合Γ = Γ − {o}
如果当前簇核心对象队列 Ωcur = ∅ ,则当前聚类簇 Ck 生成完毕。更新簇划分C = {C1, C2, ⋯, Ck},更新核心对象集合 Ω = Ω − Ck ,转入步骤3.
在当前簇核心对象队列 Ωcur 中取出一个核心对象 o′ ,通过邻域距离阈值 ϵ 找出所有的 ϵ− 邻域子集样本 Nϵ(o′) ,令 Δ = Nϵ(o′) ∩ Γ ,更新当前簇样本集合 Ck = Ck ∪ Δ ,更新未访问样本集合 Γ = Γ − Δ ,更新 Ωcur = Ωcur ∩ (Nϵ(o′) ∩ Ω) ,转入步骤5.
5.1 DBSCAN小结
对于那些异常样本点或者说少量游离于簇外的样本点,这些点不在任何一个核心对象在周围,在DBSCAN中一般将这些样本点标记为噪音点。
在DBSCAN中,一般采用最近邻思想,采用某一种距离度量来衡量样本距离,比如欧式距离。对应少量的样本,寻找最近邻可以直接去计算所有样本的距离,如果样本量较大,则一般采用KD树或者球树来快速的搜索最近邻。
某些样本可能到两个核心对象的距离都小于 ϵ ,但是这两个核心对象由于不是密度直达,又不属于同一个聚类簇,此时DBSCAN采用先来后到,先进行聚类的类别簇会标记这个样本为它的类别。也就是说BDSCAN的算法不是完全稳定的算法。
DBSCAN的主要优点有:
可以对任意形状的稠密数据集进行聚类,相对的,K-Means之类的聚类算法一般只适用于凸数据集。
可以在聚类的同时发现异常点,对数据集中的异常点不敏感。
聚类结果没有偏倚,相对的,K-Means之类的聚类算法初始值对聚类结果有很大影响。
DBSCAN的主要缺点有:
如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,这时用DBSCAN聚类一般不适合。
如果样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻时建立的KD树或者球树进行规模限制来改进。
调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值 ϵ ,邻域样本数阈值 MinPts 联合调参,不同的参数组合对最后的聚类效果有较大影响。
6.层次聚类
层次聚类(hierarchical clustering)试图在不同层次对数据集进行划分,从而形成树形的聚类结构。数据集的划分可采用“自底向上”的聚合策略,也可采用“自顶向下”的分拆策略。
AGNES是一种采用自底向上聚合策略的层次聚类算法。它将数据集中的每个样本看做一个初始聚类簇,然后在算法运行的每一步中找出距离最近的两个聚类簇进行合并,该过程不断重复,直到达到预设的聚类个数。这里的关键是如何计算聚类簇之间的距离。实际上,每一个簇是一个样本集合,因此,值需要采用关于集合的某种距离即可。例如,给定聚类簇 Ci 与 Cj ,可通过下面的式子来计算距离:
最小距离:dmin(Ci, Cj) = minx ∈ Ci, z ∈ Cjdist(x, z)
最大距离:dmax(Ci, Cj) = maxx ∈ Ci, z ∈ Cjdist(x, z)
平均距离:
显然,最小距离由两个簇的最近样本决定,最大距离由两个簇的最远样本决定,而平均距离则由两个簇的所有样本共同决定。当聚类簇聚类由 dmin, dmax, davg 计算时,AGNES算法相应地称为单链接(Single-linekage),全链接(Complete-linkage),均链接(Average-linkage)算法。
单链接步骤如下图(1-5)
全链接步骤如下图(1-5)
AGNES算法描述如下:
输入样本集D = {x1, x2, ⋯, xm},聚类距离度量函数 d ;聚类簇数 k;
将每个对象当做一个簇进行初始化,Cj = {xj}, j = 1, 2, ⋯, m
设置当前聚类簇数 q = m
计算每两个簇的距离,得到距离矩阵 M, M(i, j) = M(j, j) = d(Ci, Cj)
当 q > k 时,找出距离最近的两个聚类簇Ci*, Cj*,合并Ci*, Cj*:Ci* = Ci*⋃Cj*;对于j = j* + 1, j* + 2, ⋯, q的聚类簇 Cj 重编号为 Cj − 1;然后删除距离矩阵 M 的第j*行和列;对于 j = 1, 2, ⋯, q − 1 ,计算M(i*, j); 更新 q = q − 1 ,直到达到预设的聚类簇数。
输出:划分C = {C1, C2, ⋯, Ck}
AGNES算法简单,但遇到合并点选择困难的情况.一旦一组对象被合并,不能撤销,算法的复杂度为 O(n2) ,不适合大数据集计算.
DIANA算法
DIANA(Divisive Analysis)算法属于分裂的层次聚类,首先将所有的对象初始化到一个簇中,然后根据一些原则(比如最邻近的最大欧式距离),将该簇分类。直到到达用户指定的簇数目或者两个簇之间的距离超过了某个阈值。
DIANA用到如下两个定义:
簇的直径:在一个簇中的任意两个数据点都有一个欧氏距离,这些距离中的最大值是簇的直径
平均相异度(平均距离)
算法描述:
输入:包含 n 个对象的数据库,终止条件簇的数目k
输出:k 个簇,达到终止条件规定簇数目
将所有对象整个当成一个初始簇
在所有簇中挑选出具有最大直径的簇;找出所挑出簇里与其他点平均相异度最大的一个点放入splinter group,剩余的放入old party中。
在old party里找出到splinter group中点的最近距离不大于old party中点的最近距离的点,并将该点加入splinter group
重复 3 直到没有新的old party的点被分配给splinter group;
Splinter group 和old party为被选中的簇分裂成的两个簇,与其他簇一起组成新的簇集合
算法性能:
缺点是已做的分裂操作不能撤销,类之间不能交换对象。如果在某步没有选择好分裂点,可能会导致低质量的聚类结果。大数据集不太适用。
参考
- 周志华 《机器学习》