文章目录
第九章 聚类
9.1 聚类任务
聚类试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集称为一个“簇”,通过这样的划分,每个簇可能对应于一些潜在的概念(类别),这些概念对聚类算法而言事先是未知的,聚类过程仅能自动形成簇结构,簇所对应的概念语义需由使用者来把握和命名。
聚类既能作为一个单独过程,用于寻找数据内在的分布结构,也可作为分类等其他学习任务的前驱过程。例如,在一些商业应用中需对新用户的类型进行判别,但定义“用户类别”对商家来说却可能不太容易,此时往往可先对用户数据进行聚类,根据聚类结果将每个簇定义为一个类,然后再基于这些类训练分类模型,用于判别新用户的类型。
9.2 性能度量
对聚类结果来说,通过某种性能度量可以评估其好坏,同时也可以直接将其作为聚类过程的优化目标,从而更好地得到符合要求的聚类结果,最后希望聚类结果的“簇内相似度”高且“簇间相似度”低。
9.2.1 外部指标
外部指标是将聚类结果与某个专家给定的或者公认的参考模型进行比较,衡量两者之间的一致性。常见的外部指标有:
- Jaccard系数:计算聚类结果与参考模型之间的交集与并集的比值,值越大表示一致性越高。
- FM指数:计算聚类结果与参考模型之间的精确度和召回率的调和平均数,值越大表示一致性越高。
- Rand指数:计算聚类结果与参考模型之间的一致决策和不一致决策的比值,值越大表示一致性越高。
- NMI指数:计算聚类结果与参考模型之间的互信息与熵的比值,值越大表示一致性越高。
9.2.2 内部指标
内部指标是直接考察聚类结果本身,不需要任何参考模型。常见的内部指标有:
- 紧密度:反映一个簇内样本点之间的相似程度,值越大表示簇内越紧密。
- 分割度:反映一个簇与其他簇之间的差异程度,值越大表示簇间越分离。
- SSE指数:计算所有样本点与其所属簇中心之间的距离平方和,值越小表示聚类效果越好。
- 轮廓系数:计算每个样本点的簇内相似度与簇间相似度之差与最大值之比,值越大表示聚类效果越好。
- CH指数:计算所有样本点与全局中心之间的距离平方和与所有样本点与其所属簇中心之间的距离平方和之比,值越大表示聚类效果越好。
- DB指数:计算每个簇内样本点与其所属簇中心之间的距离平均值与每两个簇中心之间的距离之比的最大值,值越小表示聚类效果越好。
9.3 距离计算
这里不仅仅是对于聚类问题,对于整个机器学习领域,列出一些常用距离计算的方法。
9.3.1 欧氏距离
欧式距离是空间中两个点之间的直线距离,计算公式如下:
d
(
x
,
y
)
=
∑
i
=
1
n
(
x
i
−
y
i
)
2
d(x,y) = \sqrt {\sum\limits_{i = 1}^n {{{({x_i} - {y_i})}^2}} }
d(x,y)=i=1∑n(xi−yi)2
欧式距离在机器学习中有很多作用和应用场景,例如:
- 在聚类算法中,可以用欧式距离来衡量样本之间的相似度,例如K-means算法就是基于欧式距离的最小化来划分簇。
- 在回归分析中,可以用欧式距离来衡量预测值和真实值之间的误差,例如最小二乘法就是基于欧式距离的最小化来拟合模型。
- 在降维算法中,可以用欧式距离来衡量数据在低维空间中的保持程度,例如主成分分析就是基于欧式距离的最大化来提取主成分。
9.3.2 曼哈顿距离
曼哈顿距离是两个点在坐标系上的绝对轴距总和,也就是沿着坐标轴的水平和垂直方向的距离之和,计算公式如下:
d
(
x
,
y
)
=
∑
i
=
1
n
∣
x
i
−
y
i
∣
d(x,y) = \sum\limits_{i = 1}^n {\left| {{x_i} - {y_i}} \right|}
d(x,y)=i=1∑n∣xi−yi∣
曼哈顿距离在机器学习中也有很多作用和应用场景,例如:
- 在聚类算法中,可以用曼哈顿距离来衡量样本之间的相似度,例如K-medoids算法就是基于曼哈顿距离的最小化来划分簇。
- 在回归分析中,可以用曼哈顿距离来衡量预测值和真实值之间的误差,例如最小绝对偏差法就是基于曼哈顿距离的最小化来拟合模型。
- 在计算机图形学中,可以用曼哈顿距离来优化浮点运算的速度和精度,例如在屏幕上绘制两点之间的直线时,可以用曼哈顿距离代替欧式距离来避免浮点运算。
9.3.3 切比雪夫距离
切比雪夫距离是一种度量两个点之间的距离的方法,它是两个点在各个坐标轴上的差值的最大值,计算公式如下:
d
(
x
,
y
)
=
max
(
∣
x
1
−
x
2
∣
,
∣
y
1
−
y
2
∣
)
d(x,y) = \max (\left| {{x_1} - {x_2}} \right|,\left| {{y_1} - {y_2}} \right|)
d(x,y)=max(∣x1−x2∣,∣y1−y2∣)
切比雪夫距离在机器学习中也有一些作用和应用场景,例如:
- 在聚类算法中,可以用切比雪夫距离来衡量样本之间的相似度,例如K-medoids算法就可以使用切比雪夫距离作为距离度量。
- 在降维算法中,可以用切比雪夫距离来保留数据的结构信息,例如等度量映射(Isomap)算法就是基于切比雪夫距离的保持来映射数据到低维空间。
- 在分类算法中,可以用切比雪夫距离来计算样本与类别中心之间的距离,例如最近邻分类器就可以使用切比雪夫距离作为分类依据。
9.3.4 闵可夫斯基距离
闵可夫斯基距离是一组距离的定义,是对多个距离度量公式的概括性的表述,其中
p
p
p 是一个变参数。当
p
=
1
p=1
p=1 时,就是曼哈顿距离;当
p
=
2
p=2
p=2 时,就是欧式距离;当 $p \to \infty $时,就是切比雪夫距离。计算公式如下:
d
(
x
,
y
)
=
(
∑
i
=
1
n
∣
x
i
−
y
i
∣
p
)
1
p
d(x,y) = {\left( {\sum\limits_{i = 1}^n {{{\left| {{x_i} - {y_i}} \right|}^p}} } \right)^{\frac{1}{p}}}
d(x,y)=(i=1∑n∣xi−yi∣p)p1
闵可夫斯基距离在机器学习中也有很多作用和应用场景,例如:
- 在聚类算法中,可以用闵可夫斯基距离来衡量样本之间的相似度,例如K-means算法就可以使用不同的 p p p 值来选择不同的距离度量。
- 在回归分析中,可以用闵可夫斯基距离来衡量预测值和真实值之间的误差,例如最小二乘法就是基于欧式距离的最小化来拟合模型。
- 在降维算法中,可以用闵可夫斯基距离来保留数据的结构信息,例如多维缩放(MDS)算法就是基于闵可夫斯基距离的保持来映射数据到低维空间。
9.3.5 标准化的欧几里得距离
标准化的欧几里得距离是一种对欧几里得距离的改进方法,它的目的是消除不同维度之间的量纲和分布的影响,使得距离度量更加合理和准确,计算公式如下:
d
(
x
,
y
)
=
∑
i
=
1
n
(
x
i
−
y
i
s
i
)
2
d(x,y) = \sqrt {{{\sum\limits_{i = 1}^n {\left( {\frac{{{x_i} - {y_i}}}{{{s_i}}}} \right)} }^2}}
d(x,y)=i=1∑n(sixi−yi)2
标准化的欧几里得距离在机器学习中有一些作用和应用场景,例如:
- 在聚类算法中,可以用标准化的欧几里得距离来衡量样本之间的相似度,提高聚类的效果和稳定性。
- 在降维算法中,可以用标准化的欧几里得距离来保留数据的结构信息,避免不同维度的尺度差异造成的信息损失。
- 在分类算法中,可以用标准化的欧几里得距离来计算样本与类别中心之间的距离,提高分类的精度和鲁棒性。
9.3.6 马氏距离
马氏距离是一种基于数据分布的距离度量方法,它考虑了数据的协方差矩阵,使得不同维度之间的相关性和尺度差异得到调整。若协方差矩阵为单位矩阵,那么马氏距离就简化为欧几里得距离。若协方差矩阵为对角阵,则其转为标准化的欧几里得距离。计算公式如下:
d
(
x
,
y
)
=
(
x
−
y
)
T
S
−
1
(
x
−
y
)
d(x,y) = \sqrt {{{\left( {x - y} \right)}^T}{S^{ - 1}}(x - y)}
d(x,y)=(x−y)TS−1(x−y)
马氏距离在机器学习中有一些作用和应用场景,例如:
- 在异常检测中,可以用马氏距离来衡量样本与数据集中心的偏离程度,从而识别出异常值。
- 在聚类算法中,可以用马氏距离来计算样本之间的相似度,提高聚类的效果和稳定性。
- 在分类算法中,可以用马氏距离来计算样本与类别中心之间的距离,提高分类的精度和鲁棒性。
9.3.7 兰氏距离
兰氏距离是一种加权的曼哈顿距离,它对于接近于0的值的变化非常敏感,因此可以用来处理稀疏数据。计算公式如下:
d
(
x
,
y
)
=
∑
i
=
1
n
∣
x
i
−
y
i
∣
∣
x
i
∣
+
∣
y
i
∣
d(x,y) = \sum\limits_{i = 1}^n {\frac{{\left| {{x_i} - {y_i}} \right|}}{{\left| {{x_i}} \right| + \left| {{y_i}} \right|}}}
d(x,y)=i=1∑n∣xi∣+∣yi∣∣xi−yi∣
兰氏距离在机器学习中有一些作用和应用场景,例如:
- 在聚类算法中,可以用兰氏距离来计算样本之间的相似度,提高聚类的效果和稳定性。
- 在分类算法中,可以用兰氏距离来计算样本与类别中心之间的距离,提高分类的精度和鲁棒性。
- 在特征选择中,可以用兰氏距离来评估特征的重要性,减少特征的维度和冗余。
9.3.8 余弦距离
余弦距离是一种基于向量夹角的距离度量方法,它反映了两个向量的方向上的相似性,而不考虑它们的长度或大小。计算公式如下:
d
(
x
,
y
)
=
x
⋅
y
∣
x
∣
⋅
∣
y
∣
d(x,y) = \frac{{x \cdot y}}{{\left| x \right| \cdot \left| y \right|}}
d(x,y)=∣x∣⋅∣y∣x⋅y
余弦距离在机器学习中有一些作用和应用场景,例如:
- 在文本分析中,可以用余弦距离来计算文档之间的相似度,提高信息检索和文本聚类的效果。
- 在推荐系统中,可以用余弦距离来计算用户或物品之间的相似度,提高推荐的准确性和个性化。
- 在图像处理中,可以用余弦距离来计算图像特征之间的相似度,提高图像检索和图像分类的效果。
9.3.9 汉明距离
汉明距离是一种用于度量两个等长字符串之间的差异的方法,它表示将其中一个字符串变为另一个字符串所需要的最小替换次数。计算方式如下:
d
(
x
,
y
)
=
∑
i
=
1
n
I
(
x
i
≠
y
i
)
d(x,y) = \sum\limits_{i = 1}^n {I({x_i} \ne {y_i})}
d(x,y)=i=1∑nI(xi=yi)
其中
x
x
x 和
y
y
y 是两个
n
n
n 位的字符串,
I
(
x
i
≠
y
i
)
I({x_i} \ne {y_i})
I(xi=yi) 是一个指示函数,当
x
i
x_i
xi 和
y
i
y_i
yi 不相等时为 1,否则为 0。
汉明距离在机器学习中有一些作用和应用场景,例如:
- 在信息编码中,可以用汉明距离来衡量编码之间的最小差错能力,提高容错性和纠错性。
- 在模式识别中,可以用汉明距离来计算图像或文本之间的相似度,提高识别的准确性和效率。
- 在数据挖掘中,可以用汉明距离来计算数据集之间的相异度,提高聚类的质量和稳定性。
9.3.10 编辑距离
编辑距离是一种用于度量两个字符串之间的差异的方法,它表示将其中一个字符串变为另一个字符串所需要的最少操作数,其中操作包括插入、删除和替换。计算公式如下:
E
D
x
,
y
(
i
,
j
)
=
{
max
(
i
,
j
)
,
min
(
i
,
j
)
=
0
min
(
E
D
x
,
y
(
i
−
1
,
j
)
+
I
(
i
,
j
)
,
E
D
x
,
y
(
i
,
j
−
1
)
+
I
(
i
,
j
)
,
E
D
x
,
y
(
i
−
1
,
j
)
+
I
(
i
,
j
)
)
,
min
(
i
,
j
)
≠
0
E{D_{x,y}}(i,j) = \begin{cases} \max (i,j) & ,\min (i,j) = 0 \\ \min (E{D_{x,y}}(i - 1,j) + I(i,j),E{D_{x,y}}(i,j - 1) + I(i,j),E{D_{x,y}}(i - 1,j) + I(i,j)) & ,\min (i,j) \ne 0 \\ \end{cases}
EDx,y(i,j)={max(i,j)min(EDx,y(i−1,j)+I(i,j),EDx,y(i,j−1)+I(i,j),EDx,y(i−1,j)+I(i,j)),min(i,j)=0,min(i,j)=0
编辑距离在机器学习中有一些作用和应用场景,例如:
- 在自然语言处理中,可以用编辑距离来计算文本之间的相似度,提高拼写检查、机器翻译、语音识别等任务的效果。
- 在生物信息学中,可以用编辑距离来计算 DNA 序列或蛋白质序列之间的相似度,提高基因分析、序列比对、进化树构建等任务的准确性。
- 在数据挖掘中,可以用编辑距离来计算数据对象之间的相异度,提高聚类、分类、异常检测等任务的质量和稳定性。
9.4 原型聚类
原型聚类亦称“基于原型的聚类”,此类算法假设聚类结构能通过一组原型刻画,在现实聚类任务中极为常用。通常情形下,算法先对原型进行初始化,然后对原型进行迭代更新求解。
9.4.1 k k k均值算法
给定样本集
D
=
{
x
1
,
x
2
,
.
.
.
,
x
m
}
D = \{ {x_1},{x_2},...,{x_m}\}
D={x1,x2,...,xm},“
k
k
k均值”算法针对聚类所得簇划分
C
=
{
C
1
,
C
2
,
.
.
.
,
C
k
}
C = \{ {C_1},{C_2},...,{C_k}\}
C={C1,C2,...,Ck}最小化平方误差
E
=
∑
i
=
1
k
∑
x
∈
C
i
∥
x
−
μ
i
∥
2
2
E = \sum\limits_{i = 1}^k {\sum\limits_{x \in {C_i}} {\left\| {x - {\mu _i}} \right\|_2^2} }
E=i=1∑kx∈Ci∑∥x−μi∥22
其中
μ
i
=
1
∣
C
i
∣
∑
x
∈
C
i
x
{\mu _i} = \frac{1}{{\left| {{C_i}} \right|}}\sum\limits_{x \in {C_i}} x
μi=∣Ci∣1x∈Ci∑x是簇
C
i
C_i
Ci的均值向量,上述式子在一定程度上刻画了簇内样本围绕簇均值向量的紧密程度,
E
E
E值越小则簇内样本相似度越高,同时
k
k
k均值算法采用了贪心策略,通过迭代优化来近似求解。
![](https://img-blog.csdnimg.cn/f534d619a94f4ea0821fc98f27637a6b.png)
9.4.2 学习向量量化
学习向量量化(LVQ)是一种用于模式分类的有监督的学习算法,也是一种原型聚类算法。它的基本思想是通过对原型向量进行迭代更新,使得同类样本的原型向量靠近,异类样本的原型向量远离。
学习向量量化的过程可以分为以下几个步骤:
- 初始化一组原型向量,每个原型向量代表一个类别,可以随机选择或者根据先验知识指定。
- 从样本集中随机抽取一个样本,计算它与所有原型向量的距离,找出距离最近的原型向量。
- 如果样本的类别标记与原型向量的类别标记一致,则将原型向量向样本方向移动一小步,以增加同类样本的相似度;如果不一致,则将原型向量远离样本方向移动一小步,以减少异类样本的相似度。
- 重复上述步骤,直到达到预设的迭代次数或者原型向量不再发生变化。
![](https://img-blog.csdnimg.cn/b4862651ed6142109277ed54354461e4.png)
学习向量量化与k均值算法的异同如下:
- 相同点:都是通过调整一组原型向量来刻画聚类结构,都是采用贪心策略进行迭代优化,都需要指定原型向量的个数。
- 不同点:k均值算法是无监督的,不利用样本的类别信息,而LVQ算法是有监督的,利用样本的类别信息来辅助聚类;k均值算法使用簇内平方误差作为优化目标,而LVQ算法使用分类误差作为优化目标;k均值算法每次更新一个簇的均值向量,而LVQ算法每次更新一个样本最近的原型向量。
9.4.3 高斯混合聚类
与 k k k均值、LVQ用原型向量来刻画聚类结构不同,高斯混合聚类采用概率模型来表达聚类原型。高斯混合聚类的目标是找到一组高斯分布的参数,使得样本数据能够用这些分布的线性组合来近似表示,高斯混合聚类的过程可以概括为以下几个步骤:
- 初始化一组高斯分布的参数,包括每个分布的均值向量、协方差矩阵和混合系数,可以随机选择或者根据先验知识指定。
- 从样本集中抽取一个样本,计算它属于每个高斯分布的后验概率,即根据贝叶斯公式计算每个分布的条件概率乘以混合系数,并归一化。
- 根据每个样本的后验概率,更新每个高斯分布的参数,包括均值向量、协方差矩阵和混合系数,使得样本的对数似然函数最大化。
- 重复上述步骤,直到达到预设的迭代次数或者参数不再发生变化。
![](https://img-blog.csdnimg.cn/f08d248169194989bf671b3fb56f9080.png)
9.5 密度聚类
密度聚类亦称“基于密度的聚类”,此类算法假设聚类结构通过样本分别的紧密程度确定。通常情况下,密度聚类算法从样本密度的角度来考察样本之间的可连接性,并基于可连接样本不断扩展聚类簇以获得最终的聚类结果。
DBSCAN是一种著名的密度聚类算法,它基于一组“领域”参数 ( ε , M i n P t s ) (\varepsilon ,MinPts) (ε,MinPts)来刻画样本分布的紧密程度,给定数据集 D = { x 1 , x 2 , . . . , x m } D = \{ {x_1},{x_2},...,{x_m}\} D={x1,x2,...,xm},定义下面这几个概念:
- ε \varepsilon ε-领域:对 x j ∈ D {x_j} \in D xj∈D,其 ε − \varepsilon- ε−领域包含样本集 D D D中与 x j x_j xj的距离不大于 ε \varepsilon ε的样本,即 N ε ( x j ) = { x i ∈ D ∣ d i s t ( x i , x j ) ⩽ ε } {N_\varepsilon }({x_j}) = \{ {x_i} \in D|dist({x_i},{x_j}) \leqslant \varepsilon \} Nε(xj)={xi∈D∣dist(xi,xj)⩽ε};
- 核心对象:若 x j x_j xj的 ε − \varepsilon- ε−领域至少包含 M i n P t s MinPts MinPts个样本,即 ∣ N ε ( x j ) ∣ ⩾ M i n P t s \left| {{N_\varepsilon }({x_j})} \right| \geqslant MinPts ∣Nε(xj)∣⩾MinPts,则 x j x_j xj是一个核心对象;
- 密度直达:若 x j x_j xj位于 x i x_i xi的 ε \varepsilon ε-领域中,且 x i x_i xi是核心对象,则称 x j x_j xj由 x i x_i xi密度直达;
- 密度可达:对 x i x_i xi与 x j x_j xj,若存在样本序列 p 1 , p 2 , . . . , p n p_1,p_2,...,p_n p1,p2,...,pn,其中 p 1 = x i , p n = x j p_1=x_i,p_n=x_j p1=xi,pn=xj且 p i + 1 p_{i+1} pi+1由 p i p_i pi密度直达,则称 x j x_j xj由 x i x_i xi密度可达;
- 密度相连:对 x i x_i xi与 x j x_j xj,若存在 x k x_k xk使得 x i x_i xi与 x j x_j xj均由 x k x_k xk密度可达,则称 x i x_i xi与 x j x_j xj密度相连。
![](https://img-blog.csdnimg.cn/4fa832f1fc9743ac85f40d15ec9afbdd.png)
DBSCAN的目标是根据点之间的密度相似性,将数据划分为不同的簇,并能够识别出噪声点。,DBSCAN的过程可以概括为以下几个步骤:
- 选择一个未被访问过的点,计算它的 ε \varepsilon ε-领域,即距离它小于 ε \varepsilon ε的点的集合。
- 如果 ε \varepsilon ε-领域中的点的个数大于等于 M i n P t s MinPts MinPts,那么把这些点标记为核心点,并形成一个新的聚类簇。
- 如果 ε \varepsilon ε-领域中的点的个数小于 M i n P t s MinPts MinPts,那么把这个点标记为噪声点,并继续选择下一个未被访问过的点。
- 对于每个核心点,检查它的 ε \varepsilon ε-领域中是否有其他核心点或边界点,如果有,就把它们加入到当前聚类簇中,如果没有,就结束当前聚类簇的扩展。
- 重复上述步骤,直到所有的点都被访问过或者被分配到某个聚类簇中。
![](https://img-blog.csdnimg.cn/de904d5b21ee402990be4a7725391970.png)
9.6 层次聚类
层次聚类试图在不同层次对数据集进行划分,从而形成树形的聚类结构,数据集的划分可采用“自底向上”的聚合策略,也可采用“自顶向下”的分拆策略。AGNES是一种采用自底向上聚合策略的层次聚类算法,它先将数据集中的每个样本看作一个初始聚类簇,然后在算法运行的每一步中找出距离最近的两个聚类簇进行合并,该过程不断重复,直到达到预设的聚类簇个数,所以关键在于如何计算聚类簇之间的距离。
![](https://img-blog.csdnimg.cn/a56a49d578d54b07a830da4f7dfac92d.png)
AGNES算法需要指定一个合并簇的准则,即如何计算簇之间的距离。常用的有以下几种方法:
- 最小距离法(Single Linkage):取两个簇中距离最近的两个样本的距离作为这两个簇的距离。这种方法容易产生长链效应,即将不相似的簇连接在一起。
- 最大距离法(Complete Linkage):取两个簇中距离最远的两个样本的距离作为这两个簇的距离。这种方法容易产生紧凑的球形簇,但对噪声敏感。
- 平均距离法(Average Linkage):取两个簇中所有样本两两之间的距离的平均值作为这两个簇的距离。这种方法相对平衡,能够适应不同形状和大小的簇。
- 中心距离法(Centroid Linkage):取两个簇中各自样本均值点之间的距离作为这两个簇的距离。这种方法类似于K-Means算法,但可能出现反向现象,即合并后导致总距离增大。