k-近邻学习
k 近邻(k-Nearest Neighbor, kNN)学习是一种常用的监督学习算法:
- 给定测试样本,基于某种距离度量
- 找出训练集中与其最靠近的 k 个训练样本
- 在分类任务中使用「投票法」,即选择这 k 个样本中出现最多的类别作为预测结果
- 在回归任务中使用「平均法」,即选择这 k 个样本的实值输出标记的平均值作为预测结果
- 还可基于距离远近赋予不同的权重,进行加权投票或加权平均,距离越近的样本权重越大
与之前介绍的学习方法相比,k-近邻学习没有显式的训练过程。
按是否在训练阶段就对样本进行学习处理,有两种学习方法:
- 急切学习(eager learning):在训练阶段就对样本进行学习处理的方法
- 懒惰学习(lazy learning):在训练阶段仅仅是把样本保存起来,训练时间开销为零,待收到测试样本后再进行处理
kNN 中 k 是一个重要的参数。此外若采用不同的距离计算方式,则找出的近邻可能也有显著的差别,导致分类结果有显著不同。下面是一个示意图:
假设距离计算是恰当的,即能够恰当地找出 k 个近邻,下面对「最近邻分类器」,即 1NN 在二分类问题上的性能做一个简单的讨论。
给定测试样本 x,若其最邻近样本为 z,则最邻近分类器出错的概率就是 x,z 类别标记不同的概率,即
P(err)=1−c∈Y∑P(c∣x)P(c∣z)
假设样本独立同分布,且对任意 x 与任意小正数 δ,在 x 的 δ-邻域内总能找到一个训练样本。
令 c∗=c∈YargmaxP(c∣x) 为贝叶斯最优分类器的结果,有
P(err)=1−c∈Y∑P(c∣x)P(c∣z)≃1−c∈Y∑P2(c∣x)⩽1−P2(c∗∣x)=(1+P(c∗∣x))(1−P(c∗∣x))⩽2×(1−P(c∗∣x))=2P(err∗)
即最近邻分类器虽然很简单,但泛化错误率却不会超过贝叶斯最优分类器的错误率的两倍。
低维嵌入
上面的讨论基于一个重要假设——任意测试样本 x 的任意小的 δ-邻域总能找到一个训练样本,即训练样本的采样密度足够大,或称为「密采样」(dense sample)。
但这个假设在现实任务中通常很难满足。例如若 δ=0.001,对单个维度,需要 1000 个样本点平均分布在归一化后的属性取值范围内,若维数为 20,需满足密采样条件,则至少需要 (103)20=1060 个样本。这还仅仅只是维数为 20 的情况,现实应用中属性维数往往更高。
另外当维数很高时,计算内积也不再容易,会给距离计算带来很大的麻烦。
在高维情形下出现的数据样本稀疏、距离计算困难等问题,是所有机器学习方法共同面临的严重障碍,称为「维数灾难」(curse of dimensionality)。
缓解维数灾难的一个重要途径是降维(dimension reduction, 维数约简),即通过某种数学变换,将原始高维属性空间转变为一个低维「子空间」,使得在该子空间中样本密度更高、距离计算更方便。
降维是合理,是因为很多时候观测或收集到的数据样本虽然是高维的,但与学习任务密切相关的也许仅是某个低维分布,即高维空间中的一个低维「嵌入」(embedding),如下图所示:
若要求原始空间中样本之间的距离在低维空间中得以保持,如上图所示,则得到「多维缩放」(Multiple Dimensional Scaling, MDS)这一种经典降维方法。
假定 m 个样本在原始空间的距离矩阵为 D∈Rm×m,其中 dij=dist(xi,xj)。
目标是获得样本在 d′ 维空间的表示 Z∈Rd′×m,其中 d′⩽d,且任意两个样本在 d′ 维空间中的欧氏距离等于原始空间中的距离,即
∥zi−zj∥=dij,∀i,j
令 B=Z⊺Z∈Rm×m,其中 B 为降维后样本的内积矩阵,即 bij=zi⊺zj。
则有
dij2=∥zi−zj∥2=∥zi∥2+∥zj∥2−2zi⊺zj=bii+bjj−2bij
为了便于讨论,令降维后的样本 Z 被中心化,即 i=1∑mzi=0,则有 B 行与列之和均为零,即 i=1∑mbij=j=1∑mbij=0。
由此可得
⎩⎨⎧i=1∑mdij2j=1∑mdij2i=1∑mj=1∑mdij2=tr(B)+m⋅bjj=tr(B)+m⋅bii=2m⋅tr(B)
其中有 tr(B)=i=1∑m∥zi∥2。
令
⎩⎨⎧di⋅2d⋅j2d⋅⋅2=m1j=1∑mdij2=m1i=1∑mdij2=m21i=1∑mj=1∑mdij2
则有
bij=−21(dij2−di⋅2−d⋅j2+d⋅⋅2)
也就是说,可以通过降维前后保持不变的距离矩阵 D 求取内积矩阵 B。
对内积矩阵 B 进行特征值分解,有 B=VΛV⊺,其中 Γ=diag(λ1,…,λd) 为特征值构成的对角矩阵,且 λ1⩾⋯⩾λd。
V 为特征向量矩阵,假定其中有 d∗ 个非零特征值,构成对角矩阵 Λ∗=diag(λ1,…,λd∗),令 V∗ 表示相应的特征向量矩阵,则 Z 可表达为
Z=Λ∗1/2V∗⊺∈Rd∗×m
现实应用中为了有效降维,往往仅需降维后的距离与原始空间中的距离尽可能接近,而不必严格相等。此时可取 d′≪d 个最大特征值构成对角矩阵 Λ~=diag(λ1,…,λd′),对应的特征向量矩阵 V~,则降维后的样本表示为
Z~=Λ~1/2V~⊺∈Rd′×m
下面是 MDS 算法的描述:
- 按 (1) 计算 di⋅2,d⋅j2,d⋅⋅2;
- 按 (2) 计算 B
- 对 B 进行特征值分解;
- 取 Λ~ 为 d′ 个最大特征值构成的对角矩阵,V~ 为相应的特征向量矩阵;
- 输出:Λ~1/2V~⊺∈Rm×d′,每行是一个样本的低维坐标。
一般来说,欲获得低维子空间,最简单的是对原始高维空间进行线性变换。给定 d 维空间中的样本 X=(x1…,xm)∈Rd×m,变换之后得到 d′⩽d 维空间中的样本
Z=W⊺X
其中 W∈Rd×d′ 是变换矩阵,Z∈Rd′×m 是样本在新空间中的表述。
变换矩阵可视为 d′ 个 d 维向量,zi=Wxi 是第 i 个样本与这 d′ 个基向量分别做内积而得到的 d′ 维属性向量。
换言之,zi 是原属性向量 xi 在新坐标系 {w1,…,wd′} 中的坐标向量。
若 wi,wj 正交,则新坐标系是一个正交坐标系,此时 W 为正交变换。
显然新空间中的属性是原空间中属性的线性组合。
基于线性变换来进行降维的方法称为「线性降维方法」,都符合 Z=W⊺X 的基本形式,不同之处在于对低维子空间的性质有不同要求,相当于对 W 施加了不同的约束。
对降维效果的评估,通常是比较降维前后学习器的性能,若性能有所提高则认为降维起到了作用。若将维数降至二维或三维,则可通过可视化技术来直观地判断降维效果。
主成分分析
主成分分析(Principal Component Analysis, PCA)是最常用的一种降维方法。
对于正交属性空间中的样本点,如何用一个超平面对所有样本进行恰当的表达?
- 最近重构性:样本点到这个超平面的距离都足够近
- 最大可分性:样本点在这个超平面上的投影尽可能分开
基于这两个性质,能分别得到 PCA 的两种等价推导。
最近重构性
假设数据样本进行了中心化,即 i∑xi=0,再假定投影变换后得到的新坐标系为 {w1,…,wd},其中 wi 是标准正交基向量(∥wi∥2=1,wi⊺wj=0)。
若丢弃新坐标系中的部分坐标,即将维度降低到 d′<d,则样本点 xi 在低维坐标系中的投影为 zi=(zi1;…;zid′),其中 zij=wj⊺xi 是 xi 在低维坐标系下第 j 维的坐标。若基于 zi 来重构 xi,则会得到 x^i=j=1∑d′zijwj。
考虑整个训练集,原样本点 xi 与基于投影重构的样本点 x^i 之间的距离为
i=1∑mj=1∑d′zijwj−xi22=i=1∑mj=1∑d′zijwj−xi⊺j=1∑d′zijwj−xi=i=1∑mj=1∑d′zijwj⊺j=1∑d′zijwj−2i=1∑mj=1∑d′zijwj⊺xi+i=1∑mxi⊺xi=i=1∑mj=1∑d′zij2−2i=1∑mj=1∑d′zijwj⊺xi+i=1∑mxi⊺xi=i=1∑mzi⊺zi−2i=1∑mzi⊺W⊺xi+constant∝−tr(W⊺(i=1∑mxixi⊺)W)
根据最近重构性,上式应被最小化。考虑到 wj 是标准正交基,且 i∑xixi⊺ 是协方差矩阵,有主成分分析的优化目标
Wmin−tr(W⊺XX⊺W)s.t.W⊺W=I
其中 X=(x1,…,xm)∈Rd×m,W=[w1,…,wd]∈Rd×d。
最大可分性
样本点 xi 在新空间中超平面上的投影为 W⊺xi。若所有样本点的投影能尽可能分开,则应该使投影后样本点的方差最大化。
投影后样本点的方差为 sumiW⊺xixi⊺W,于是优化目标可写为
Wmaxtr(W⊺XX⊺W)s.t.W⊺W=I
这与 (3) 是等价的。
求解
使用拉格朗日乘子法可得
XX⊺W=λW
于是只需对协方差矩阵 XX⊺ 进行特征值分解,将求得特征值进行排序 λ1⩾…λd,再取前 d′ 个特征值对应的特征向量构成 W=(w1,…,wd′),这就是主成分分析的解。
PCA 算法描述如下:
- 对所有样本进行中心化:xi←xi−m1i=1∑mxi;
- 计算样本的协方差矩阵 XX⊺;
- 对协方差矩阵进行特征值分解;
- 取前 d′ 个最大特征值对应的特征向量 w1,…,wd′;
- 输出:投影矩阵 W∗=(w1,…,wd′)。
降维后低维空间的维数 d′ 通常是由用户事先指定,或通过在 d′ 值不同的低维空间中对 k 近邻分类器(或其他开销较小的学习器)进行交叉验证,来选取较好的 d′ 值。
对 PCA,还可从重构的角度设置一个重构阈值 t(例如 95%),然后选取使下式成立的最小 d′ 值:
∑i=1dλi∑i=1d′λi⩾t
PCA 仅需保留 W∗ 与样本的均值向量(均值向量是为了中心化),即可通过简单的向量减法与矩阵-向量乘法,将新样本投影至低维空间中。
低维空间与原始高维空间必有不同,因为对应的最小的 d−d′ 个特征值的特征向量被舍弃了,这也是降维导致的结果。但舍弃这部分信息往往是必要的:一方面,舍弃这部分信息之后能使样本的采样密度增大,这正是降维的重要动机;另一方面,当数据受到噪声影响时,最小的特征值所对应的特征向量往往与噪声有关,将它们舍弃能在一定程度上起到去噪的效果。
核化线性降维
线性降维方法假设从高维空间到低维空间的函数映射是线性的,然而,在不少现实任务中,可能需要非线性映射才能找到恰当的低维嵌:
其中将「原本采样」的低维空间称为「本真」(intrinsic)低维空间,以区别于降维后的低维空间。
非线性降维的一种常用方法,就是基于核技巧对线性降维方法进行「核化」。下面是核主成分分析(Kernelized PCA, KPCA)的描述。
假定我们将在高维特征空间中把数据投影到由 W=(w1,…,wd) 确定的超平面上,则对于 wj 有
(i=1∑mzizi⊺)wj=λjwj
其中 zi 是样本点 xi 在高维特征空间中的像。
令 αij=λj1zi⊺W,有
wj=λj1(i=1∑mzizi⊺)wj=i=1∑mziλjzi⊺wj=i=1∑mziαij
假定 zi 是由原始属性空间中的样本点 xi 通过映射 ϕ 产生的,即
zi=ϕ(xi),i=1,2,…,m.
若 ϕ 能被显式表达出来,则通过它将样本映射至高维空间,再在特征空间中实施 PCA 即可,即有
(i=1∑mϕ(xi)ϕ(xi)⊺)wj=λjwj
与
wj=i=1∑mϕ(xi)αij
对于 W 即为 W=i=1∑mziαi。
一般情形下不清楚 ϕ 的具体形式,因此引入核函数
κ(xi,xj)=ϕ(xi)⊺ϕ(xj)
又由 wj 的值,代入优化式可得
Kαj=λjαj
其中 K 为 κ 对应的核矩阵,有 (K)ij=κ(xi,xj) 与 αj=(α1j;…;αmj)。
上式为特征值分解问题,取 K 最大的 d′ 个特征值对应的特征向量即可。
对新样本 x,其投影后第 j 维坐标为
zj=wj⊺ϕ(x)=i=1∑mαijϕ(xi)⊺ϕ(x)=i=1∑mαijκ(xi,x)
其中 αi 已经过规范化。
可见,为获得投影后的坐标,KPCA 需对所有样本求和,因此它的计算开销较大。
上述推导的书上版本
书上的推导直接使用了 W。假定我们将在高维特征空间中把数据投影到由 W 确定的超平面上,即 PCA 欲求解
(i=1∑mzizi⊺)W=λW
其中 zi 是样本点 xi 在高维特征空间中的像。
令 αi=λ1zi⊺W,有
W=λ1(i=1∑mzizi⊺)W=i=1∑mziλzi⊺W=i=1∑mziαi
zi=ϕ(xi) 可得 PCA 欲求解的式子进一步有
(i=1∑mϕ(xi)ϕ(xi)⊺)W=λW
与
W=i=1∑mϕ(xi)αi
引入核函数后代入化简欲求解的式子为
KA=λA
其中 K 为核矩阵,A=(αi;…;αm)。
上式为特征值分解问题,取 K 最大的 d′ 个特征值对应的特征向量即可。
对新样本 x 有
z=W⊺ϕ(x)=i=1∑mαiϕ(xi)⊺ϕ(x)=i=1∑mαiκ(xi,x)
其中 αi 已经过规范化。
流形学习
流形学习(manifold learning)是一类借鉴了拓扑流形概念的降维方法。「流形」是在局部与欧氏空间同胚的空间,换言之,它在局部具有欧氏空间的性质,能用欧氏距离来进行距离计算。
若低维流形嵌入到高维空间中,则数据样本在高维空间的分布虽然看上去非常复杂,但在局部上仍具有欧氏空间的性质,因此,可以容易地在局部建立降维映射关系,然后再设法将局部映射关系推广到全局。
当维数被降至二维或三维时,能对数据进行可视化展示,因此流形学习也可被用于可视化。
等度量映射
等度量映射(Isometric Mapping, Isomap)的基本出发点,是认为低维流形嵌入到高维空间之后,直接在高维空间中计算直线距离具有误导性,因为高维空间中的直线距离在低维嵌入流形上不可达。
低维嵌入流形上两点间的本真距离是「测地线」(geodesic) 距离。
测地线距离的计算:利用流形在局部上与欧氏空间同胚这个性质,对每个点基于欧氏距离找出其近邻点,然后就能建立一个近邻连接图,图种近邻点之间存在连接,而非近邻点之间不存在连接,于是,计算两点之间测地线距离的问题,就转变为计算近邻连接图上两点之间的最短路径问题。
最短路径的计算可通过 Dijkstra 算法或 Floyd 算法来实现。得到距离后可通过多维缩放方法(MDS)获得样本点在低维空间中的坐标。
Isomap 算法描述如下:
Isomap 仅是得到了训练样本在低维空间的坐标,但对于新样本,如何将其映射到低维空间呢?
这个问题的常用解决方案,是将训练样本的高维空间坐标作为输入,低维空间坐标作为输出,训练一个回归学习器对新样本的低维空间坐标进行预测。
这仅是一个权宜之计,目前似乎没有更好的办法。
对近邻图的构建通常有两种做法:
- 指定近邻点个数:如欧式距离最近的 k 个点为近邻点,这样得到的近邻图称为 k 近邻图;
- 指定距离阈值:距离小于阈值 ϵ 的点被认为是近邻点,这样得到的近邻图称为 ϵ 近邻图。
不足:
- 若近邻范围指定得较大,则距离很远的点可能被误认为近邻,这样就出现「短路」问题;
- 若近邻范围指定得较小,则近邻图可能不连通,这样就出现「断路」问题。
局部线性嵌入
局部线性嵌入(Locally Linear Embedding, LLE)试图保持邻域内样本之间的线性关系。
假定样本点 xi 能通过它的邻域样本 xj,xk,xl 的坐标通过线性组合 xi=wijxj+wikxk+wilxl 而重构出来,LLE 希望这样的关系在低维空间中得以保持,如下图所示:
LLE 先为每个样本 xi 找到其近邻下标集合 Qi,然后计算出基于 Qi 中的样本点对 xi 进行线性重构的系数 wi:
w1,…,wmmini=1∑mxi−j∈Qi∑wijxj22s.t.j∈Qi∑wij=1
其中 xi,xj 已知,令 Cjk=(xi−xj)⊺(xi−xk),则 wij 有闭式解
wij=∑l,s∈QiCls−1∑k∈QiCjk−1
LLE 在低维空间中保持 wi 不变,于是 xi 对应的低维空间坐标 zi 可通过下式求解:
z1,…,zmmini=1∑mzi−j∈Qi∑wijzj22
这与上面的优化目标同形,区别是优化目标需确定的是 wi,而这里则是 xi 对应的低维空间坐标 zi。
令 Z=(z1,…,zm)∈Rd′×m,W=(wij)∈Rm×m,则有
M=(I−W)⊺(I−W)
可将求解式子重写为
Zmintr(ZMZ⊺)s.t.ZZ⊺=I
上式可通过特征值分解求解:M 最小的 d′ 个特征值对应的特征向量组成的矩阵即为 Z⊺。
LLE 算法描述如下:
算法第 4 行显示出,对于不在样本 xi 邻域区域的样本 xj,无论其如何变化都对 xi,zi 没有任何影响,即「将变动限制在局部」的思想。
度量学习
在机器学习中,对高维数据进行降维的主要目的是希望找到一个合适的低维空间,在此空间中进行学习能比原始空间性能更好。事实上,每个空间对应了在样本属性上定义的一个距离度量,而寻找合适的空间,实质上就是在寻找一个合适的距离度量。那么,为何不直接尝试「学习」出一个合适的距离度量呢?
欲对距离度量进行学习,必须有一个便于学习的距离度量表达形式。
对两个 d 维样本 xi,xj,它们之间的平方欧氏距离可写为
disted2(xi,xj)=∥xi−xj∥22=dij,12+⋯+dij,d2
其中 dij,k=∥xik−xjk∥2 是 xi,xj 在第 k 维上的距离。
假定不同属性的重要性不同,则可引入属性权重 w 得到
distwed2(xi,xj)=w1⋅dij,12+⋯+wd⋅dij,d2=(xi−xj)⊺W(xi−xj)
其中 wi⩾0,W=diag(w) 是一个对角矩阵,(W)ii=wi,可通过学习确定。
由于 W 非对角元素均为零,这意味着坐标轴是正交的,即属性之间无关。但现实问题往往不是这样的。
为此,将 W 替换为一个普通的半正定对称矩阵 M,就得到了马氏距离(Mahalanobis distance):
distmah2(xi,xj)=(xi−xj)⊺M(xi−xj)=∥xi−xj∥M2
其中 M 亦称为「度量矩阵」。
度量学习则是对 M 进行学习。
为了保持距离非负且对称,M 必须是半正定对称矩阵,即必有正交基 P 使得 M=PP⊺,这部分可参见《线性代数》的笔记「实二次型」。
对 M 的学习要设置一个目标,假定我们是希望提高近邻分类器的性能,则可将 M 直接嵌入到近邻分类器的评价指标中去,通过优化该性能指标相应地求得 M。