《机器学习》笔记(第四部分:聚类、降维与度量学习)
9 聚类
9.1 聚类任务
假设有一个无标记样本集 {x(i)}i=1m, 每个样本 {x(i)=xu(i)}u=1n 是一个 n 维向量. 聚类算法将样本集分为不重不漏的 k 个簇 (cluster) C={Cℓ}ℓ=1k. 假设 λi 是样本 i 所属类别 (即簇标记, cluster label) x(i)∈Cλi.
9.2 性能度量
从直观上, 我们希望聚类结果的簇内相似度高, 且簇间相似度低.
外部指标 基于一个已知参考簇划分的性能度量指标称为外部指标. 若聚类器给出一个簇划分 C={Ck}k, 而已知一个参考的簇划分 C∗={Cℓ∗}ℓ, 则考虑所有 m(m−1)/2 个样本对 {(x(i),x(j))}i<j, 假设它们的簇标记是 λi,λj 与 λi∗,λj∗, 则有混淆矩阵
| λi=λj | λi=λj |
---|
λi∗=λj∗ | a | b |
λi∗=λj∗ | c | d |
常见的外部指标包括:
JC=a+b+ca,FMI=a+ba⋅a+ca,RI=m(m−1)2(a+d)
这些指标结果均在 [0,1] 区间, 值越大越好.
内部指标 若无参考簇, 则可以定义
- 簇 Cℓ 内样本平均距离: avgCℓ=∣Cℓ∣(∣Cℓ∣−1)2∑x(i),x(j)∈Cℓd(x(i),x(j));
- 簇 Cℓ 内样本最远距离: diamCℓ=maxx(i),x(j)∈Cℓd(x(i),x(j));
- 簇 Ci,Cj 最近样本间的距离 dmin(Ci,Cj)=minx(i)∈Ci,x(j)∈Cjd(x(i),x(j));
- 簇 Ci,Cj 重心距离 dmin(Ci,Cj)=d(μ(i),μ(j)), 其中 μ(i) 是重心.
常见的内部指标包括:
DBI=k1i∑j=imax(dcen(μ(i),μ(j))avgCi+avgCj),DI=maxℓdiamCℓmini,jdmin(Ci,Cj)
DBI 的值越小越好, DI 的值越大越好.
9.3 距离计算
最常用的是 Minkovski 距离:
dmk(x(i),x(j))=pu∑∣xu(i)−xu(j)∣p=:∣∣x(i)−x(j)∣∣p
取 p=2 即得 Euclid 距离 ded, 取 p=1 即得 Manhattan 距离 dman. Minkovski 距离也可以加权:
dmk′(x(i),x(j))=pu∑wu∣xu(i)−xu(j)∣p
对于分类变量, 可使用 VDM (Value Difference Metric). 对于属性 u 上的两个离散值 a,b, 定义其距离为
VDMp(a,b)=i∑#{x∗:xu∗=a}#{x∗∈Ci:xu∗=a}−#{x∗:xu∗=b}#{x∗∈Ci:xu∗=b}p
Minkowski 距离和 VDM 距离可以混合使用.
MinkovDMp(x(i),x(j))=pu numerical∑∣xu(i)−xu(j)∣p+u categorical∑VDMp(xu(i),xu(j))
9.4 原型聚类
9.4.1 k-均值算法
给定目标类别数 k, k-均值 (k-means) 算法尝试最小化平方误差
E=i∑x∈Ci∑∣∣x−μi∣∣22=min
这是一个 NP 难问题. k-均值算法使用贪心策略解决:
- 输入: 样本 D={x(i)}i=1m, 聚类簇数 k.
- 过程:
- 从 D 中随机选取 k 个样本作为初始均值 {μ1,…,μk}
repeat
- 定义簇 Ci←∅,∀i
- 计算每一个样本离哪个均值向量最近, 将其加入对应的簇
- 更新每 一个均值向量为对应簇的重心
until
所有均值向量均未更新
- 输出: 簇划分 C={Ci}i=1k
9.4.2 学习向量量化 LVQ
学习向量量化 (LVQ, Learning Vector Quantization) 用于学习带有类别标记的样本 {(x(j),y(j))}j=1m. 假设 Y={1,…,q} 是类别标记, 则 LVQ 算法希望习得一组原型向量 {pi}i=1q 作为聚类中心, 使得样本空间根据“该点距离哪一个原型向量最近”分为 q 个区域 (称为 Voronoi 剖分, Voronoi tessellation).
- 输入: D={x(j),y(j)}j=1m, 类别数 q, 学习率 η∈(0,1)
- 过程:
- 初始化一组原型向量 {pi}i=1q, 可随机选取该类别的一个样本作为原型
repeat
- 随机选择一个样本 (x(j),y(j))
- 找出与 x(j) 最近的原型向量 pi∗
-
if
y(j)=i∗ then
δ←+1 else
δ←−1
- pi∗←pi∗+δη(x(j)−pi∗)
until
满足停止条件, 例如原型向量更新很小
- 输出: 原型向量 {pi}i=1q
9.4.3 Gauss 混合聚类
Gauss 混合聚类用概率模型表达聚类原型. 给定均值 μi 和方差 Σi, 多元 Gauss 分布 Xi∼N(μi,Σi) 的密度是
φ(xi∣μi,Σi)=(2π)n/2Σi1exp−21(xi−μi)TΣi−1(xi−μi)
如果有一系列均值、方差和混合参数 (mixture coefficient) θ={(μi,Σi,αi)}i=1k 满足 ∑αi=1, 就可以定义 Gauss 混合分布
X∼MixN(θ)=⎩⎨⎧X1∼N(μ1,Σ1),⋯Xk∼N(μk,Σk),with probability α1with probability αk
它的密度是
p(x∣θ)=i∑αiφ(x∣μi,Σi)
Gauss 混合分布的密度函数会很像一个包含若干丘陵的地图, 每一个丘陵代表一个独立的 Gauss 分布. 这些丘陵都是椭圆形, 从侧面看它会是一条钟形曲线. 丘陵的椭圆方向受方差影响, 地理位置受均值影响, 最高点海拔受方差和混合参数影响.
我们假设样本 D={x(j)}j=1m 互相独立地服从 Gauss 混合分布
x(j)∼indMN(θ)
此时聚类问题化为了一个一般的参数估计问题, 就可以利用 EM 算法迭代获取参数的数值解了. 另外, 若有一个新样本 x 我们还要考虑这个样本属于混合分布的具体哪一个分支. 假设样本来自 第 z 个分支, 则
Pr(z=i∣x)=p(x)Pr(z=i)Pr(x∣z=i)=∑ιαιφ(x∣μι,Σι)αiφ(x∣μi,Σi)
然后取那一个概率最大的分支作为预测类标签
y=i∈{1,…,k}argmaxPr(z=i∣x)
9.5 密度聚类
密度聚类 (density-based clustering) 假设聚类结构能通过样本分布的紧密程度确定. DBSCAN 是一种著名的密度聚类算法. 它定义如下概念:
- x 的 ε-邻域 (neighborhood): Nε(x):={x0:d(x,x0)≤ε}.
- 核心对象 (core object): 若 x 的 ε-邻域至少包含 MinPts 个样本, 则 x 是一个核心对象.
- 密度直达 (directly density-reachable): 若 x′ 位于 x 的 ε-邻域中, 且 x 是核心对象, 则称 x 密度直达 x′. 密度直达关系通常不满足对称性.
- 密度可达 (density-reachable): 若 x1,…,xn 是一条密度直达链 (即从前往后相邻两项密度直达), 则称 x1 密度可达 xn. 密度可达关系通常不满足对称性.
- 密度相连 (density-connected): 若 x 密度直达 x′ 和 x′′, 则称 x′,x′′ 密度相连.
DBSCAN 算法定义一个簇 C 为密度可达和密度相连导出的最大样本集合. D 中不属于任何簇的样本被认为是噪声或异常样本.
- 输入: 样本集 D={x(j)}j=1m, 邻域参数 (ε,MinPts)
- 过程:
- 遍历所有样本, 将所有核心对象加入核心对象集合 Ω
- 初始化聚类簇数 k←0 和未访问样本集合 Γ←D
while
Ω=∅ do
- 记录当前未访问样本集合 Γ0←Γ
- 初始化队列 Q, 随机选取一个核心对象 x0 加入队列
- Γ←Γ∖{x0}
-
while
Q=∅ do
- 取出队列 Q 的首个样本 q
-
if
q 是一个核心对象 then
- Δ←Nε(q)∩Γ
- 将 Δ 中的样本加入队列 Q
- Γ←Γ∖Δ
-
end if
-
end while
- k←k+1, 生成聚类簇 Ck←Γ0∖Γ
- Ω←Ω∖Ck
end while
- 输出: 簇划分 C={Ci}i=1k
9.6 层次聚类
层次聚类 (hierarchical clustering) 可以形成树形的聚类结构. AGNES 是一种自底而上的聚类算法. 它先将数据集中每一个样本看作一个初始聚类簇, 然后每次找出距离最近的两个聚类簇进行合并. 不断重复, 直到到达预设的聚类簇数. 簇距离可以定义为最小或最大距离
dmin(C′,C′′):=x′∈C′,x′′∈C′′mind(x′,x′′),dmax(C′,C′′):=x′∈C′,x′′∈C′′maxd(x′,x′′)
或平均距离
dmax(C′,C′′):=∣C′∣∣C′′∣1x′∈C′∑x′′∈C′′∑d(x′,x′′)
10 降维与度量学习
10.1 k-近邻学习 k-NN
给定数据集 {x(i),y(i)}i=1m 和待预测样本 x. 在 k-NN 算法中, 直接收集距离 x 最近的 k 个样本的标签, 再用平均法等作为 x 的预测输出.
下面对 k-NN 的性能做简单讨论. 以 1-NN 在二分类问题上的性能为例, 令待预测样本 x 最近的样本点为 z, 令 f:X→B 为真实函数, 则泛化误差为
E=1−Pr(f(x)=f(z)=+1)−Pr(f(x)=f(z)=−1)≈1−Pr(f(x)=+1)2−Pr(f(x)=−1)2≤1−Pr(c∗∣x)2=(1+Pr(c∗∣x))(1−Pr(c∗∣x))≤2×(1−Pr(c∗∣x))
其中约等号假设了 x 和 z 很近以至于 f(x)=f(z). 而
c∗={+1,−1,Pr(f(x)=+1)≥Pr(f(x)=−1)Otherwise
是 Bayes 最优分类器的结果. 上面不等式显示, 虽然 1-NN 二分类器的泛化错误率不会低于 Bayes 最优分类器, 但也不会高于 Bayes 最优分类器的两倍.
10.2 多维缩放 MDS
高位情形下容易出现样本稀疏, 称为维数灾难 (curse of dimensionality). 多维缩放 (MDS, Multiple Dimensional Scaling) 是一种降维方法, 使得原始空间中样本间距在地位空间中得以保持.
假设原始空间有 d 维, 希望降到 d′ 维. 假设样本集合 {xi∈Rd}i=1m 降维后的坐标是 {zi∈Rd′}i=1m 并构成矩阵 Z∈Rd′×m. 不妨令 Z 是中心化的, 即 ∑zi=0.
假设 m 个样本的距离矩阵是 D=(dij)m=(∣xi−xj∣)m, 我们希望降维操作保持距离矩阵不变, 即 ∣zi−zj∣=dij. 令 B=ZTZ=(bij)m=(ziTzj)m∈Rm×m 是降维后样本的内积矩阵. 显然它的行和及列和都为零. 可以整理出 bij 与 dij 的关系
bij=−21(dij2−m1j∑dij2−m1i∑dij2+m21i∑j∑dij2)
则内积矩阵必可以 (正交相似) 对角化 λ=VTBV. 考虑只保留前 d′ 个特征值 λ∗∈Rd′×d′ 和特征向量 V∗∈Rm×d′, 则 Z=λVT∈Rd′×m 是降维后的样本坐标.
10.3 主成分分析 PCA
给定一个样本集 {xi}i=1m 构成矩阵 Xd×m, 不妨假设 ∑xi=0. 主成分分析 (PCA, Principle Component Analysis) 希望找到一个超平面, 这个超平面有以下两种等价的描述方法:
- 最近重构性: 样本点到超平面距离尽可能近;
- 最大可分性: 样本点在超平面上的投影尽可能分开.
考虑投影变换后的新标准正交基 {wi}i=1d. 考虑丢弃一些维度, 仅保留前 d′ 维, 即前 d′ 个新基构成矩阵 Wd×d′. 假设新基下样本 xi 投影到了 zi, 则投影后的样本矩阵 Zd′×m=WTX, zij=wjTxi. 基于投影还原的旧基坐标是 x^i=∑j=1d′zijwj=∑j=1d′wjTxiwj.
考虑最近重构性. 优化目标是寻找一个正交矩阵 W 使得
i∑∣x^i−xi∣2=−trWTXXTW=min
考虑最大可分性. 优化目标是寻找一个正交矩阵 W 使得
trWTXXTW=max
两种解释的优化目标是等价的. 考虑 Lagrange 乘子法,
XTXW=λW
于是只需对协方差矩阵进行谱分解, 仅取前 d′ 个特征值对应的特征向量构成 Wd×d′ 就是 PCA 的解.
d′ 的值可以通过交叉验证确定, 也可以考虑重构阈值
i≤d′∑λi/i≤d∑λi≥t
其中 t 是一个重构阈值, 例如 t=95%.
10.4 核主成分分析 KPCA
假设高维空间是由真实 (称为本真, intrinsic) 低维空间中的样本通过一个非线性升维函数 φ:Rd′toRd 得到的. 在一般的线性 PCA 中, 有
(i∑ziziT)W=λW⟺W=i∑ziαiλziTW=:i∑ziαi
这是因为在线性 PCA 中直接有 zi=WTxi, 此处 φ:xi↦WTxi. 一般地,
(i∑φ(xi)φ(xi)T)W=λW⟺W=i∑φ(xi)αiλφ(xi)TW=:i∑φ(xi)αi
引入核函数 κ(xi,xj)=φ(xi)Tφ(xj), 此时 Lagrange 乘子法即
Kα=λα,K=(κ(xi,xj))m×m
问题转化为求 K 的前 d′ 个特征值和特征向量. 对于新样本 x, 其投影后的坐标是
z=i∑αiκ(xi,x)
10.5 流形学习
通过非线性升维函数升维后的样本空间虽是高维的, 但样本实际上仅出现在高维空间的一个 d′-流形中, 即 Imφ. Imφ 作为流形, 在局部上仍有 Euclid 空间的性质.
10.5.1 等度量映射 Isomap
等度量映射 (Isomap, Isometric Mapping) 将高维空间内的样本距离定义为像集流形上的测地线 (geodesic) 距离. Isomap 定义每个样本与自己的 k-近邻之间的距离为 Euclid 距离, 与其它样本的距离通过 Dijkstra 或 Floyd 算法计算得到. Isomap 输出的距离矩阵可以引入 MDS, 从而把高维像集“展平”为低维平面.
如何将新样本映射到低维空间? 除了训练一个以高维坐标作为输入、低维坐标作为输出的回归学习器之外, 目前没有更好的办法.
对近邻图的构建有两种做法:
- k-近邻: 选择高维下最近的 k 个点作为近邻点;
- ε-近邻: 选择高维下 ε-邻域内的所有点作为近邻点.
近邻范围指定过大会出现“短路”问题, 过小会出现“断路”问题.
10.5.2 局部线性嵌入 LLE