目录
- [1 k近邻学习](#1 k近邻学习)
- [2 低维嵌入](#2 低维嵌入)
- [3 主成分分析(PCA)](#3 主成分分析(PCA))
- [4 核化线性降维](#4 核化线性降维)
- [5 流形学习](#5 流形学习)
-
- [5.1 等度量映射](#5.1 等度量映射)
- [5.2 局部线性嵌入(LLE)](#5.2 局部线性嵌入(LLE))
- [6 度量学习](#6 度量学习)
1 k近邻学习
k近邻学习是一种常用的监督学习方法。
工作机制:给定测试样本,基于某种距离量找出训练集中与其最靠近的k个训练样本,然后基于这k个邻居的信息来进行预测。
分类任务中:使用投票法,选择这k个样本中出现最多的类别标记作为预测结果。
回归任务中:使用平均法,将这k个样本的实值输出标记的平均值作为预测结果,还可基于距离远近进行加权平均或加权投票,距离越近的样本权重越大。
懒惰学习:此类学习技术在训练阶段仅仅是把样本保存起来,训练时间开销为零,待收到测试样本后再进行处理。
急切学习:在训练阶段就对样本进行学习处理的方法。
k近邻学习是懒惰学习的代表。
2 低维嵌入
维数灾难:在高维情形下出现的数据样本稀疏,距离计算困难等问题。
缓解维数灾难的一个重要途径是降维(维数约简),通过某种数学变换将原始属性空间转变为一低维子空间,在子空间中样本密度大幅提高,距离计算也变得更为容易。
要求原始空间中样本之间的距离在低维空间中得以保持,需要使用多维缩放(MDS)这样一种经典的降维方法。
假定 m 个样本在原始空间的距离矩阵为 D ∈ R m × m \mathbf{D} \in \mathbb{R}^{m \times m} D∈Rm×m , 其第 i 行 j 列的元素 d i s t i j dist {i j} distij 为样本 x i \boldsymbol{x}{i} xi 到 x j \boldsymbol{x}{j} xj 的距离. 我们的目标是获得样本在 d ′ d^{\prime} d′ 维空间的表示 Z ∈ R d ′ × m \mathbf{Z} \in \mathbb{R}^{d^{\prime} \times m} Z∈Rd′×m, d ′ ⩽ d d^{\prime} \leqslant d d′⩽d , 且任意两个样本在 d ′ d^{\prime} d′ 维空间中的欧氏距离等于原始空间中的距离, 即 ∥ z i − z j ∥ = d i s t i j \left\|z{i}-z_{j}\right\|=d i s t_{i j} ∥zi−zj∥=distij .
令 B = Z T Z ∈ R m × m \mathbf{B}=\mathbf{Z}^{\mathrm{T}} \mathbf{Z} \in \mathbb{R}^{m \times m} B=ZTZ∈Rm×m , 其中 B \mathbf{B} B 为降维后样本的内积矩阵, b i j = z i T z j b_{i j}=\boldsymbol{z}{i}^{\mathrm{T}} \boldsymbol{z}{j} bij=ziTzj , 有
d i s t i j 2 = ∥ z i ∥ 2 + ∥ z j ∥ 2 − 2 z i T z j = b i i + b j j − 2 b i j \begin{aligned} d i s t_{i j}^{2} & =\left\|\boldsymbol{z}{i}\right\|^{2}+\left\|\boldsymbol{z}{j}\right\|^{2}-2 \boldsymbol{z}{i}^{\mathrm{T}} \boldsymbol{z}{j} \\ & =b_{i i}+b_{j j}-2 b_{i j} \end{aligned} distij2=∥zi∥2+∥zj∥2−2ziTzj=bii+bjj−2bij
令降维后样本Z被中心化,矩阵B的行与列之和均为零,可以得到
∑ i = 1 m d i s t i j 2 = tr ( B ) + m b j j ∑ j = 1 m d i s t i j 2 = tr ( B ) + m b i i ∑ i = 1 m ∑ j = 1 m d i s t i j 2 = 2 m tr ( B ) \begin{array}{l} \sum_{i=1}^{m} d i s t_{i j}^{2}=\operatorname{tr}(\mathbf{B})+m b_{j j} \\ \sum_{j=1}^{m} d i s t_{i j}^{2}=\operatorname{tr}(\mathbf{B})+m b_{i i} \\ \sum_{i=1}^{m} \sum_{j=1}^{m} d i s t_{i j}^{2}=2 m \operatorname{tr}(\mathbf{B}) \end{array} ∑i=1mdistij2=tr(B)+mbjj∑j=1mdistij2=tr(B)+mbii∑i=1m∑j=1mdistij2=2mtr(B)
d i s t i ⋅ 2 = 1 m ∑ j = 1 m d i s t i j 2 , d i s t ⋅ j 2 = 1 m ∑ i = 1 m d i s t i j 2 , d i s t . . 2 = 1 m 2 ∑ i = 1 m ∑ j = 1 m d i s t i j 2 , \begin{array}{l} d i s t_{i \cdot}^{2}=\frac{1}{m} \sum_{j=1}^{m} d i s t_{i j}^{2}, \\ d i s t_{\cdot j}^{2}=\frac{1}{m} \sum_{i=1}^{m} d i s t_{i j}^{2}, \\ d i s t_{. .}^{2}=\frac{1}{m^{2}} \sum_{i=1}^{m} \sum_{j=1}^{m} d i s t_{i j}^{2}, \\ \end{array} disti⋅2=m1∑j=1mdistij2,dist⋅j2=m1∑i=1mdistij2,dist..2=m21∑i=1m∑j=1mdistij2,
可得:
b i j = − 1 2 ( d i s t i j 2 − d i s t i . 2 − d i s t . j 2 + d i s t . . 2 ) b_{ij}=-\frac{1}{2}(dist_{ij}^2-dist_{i.}^2-dist_{.j}^2+dist_{..}^2) bij=−21(distij2−disti.2−dist.j2+dist..2)
可通过降维前后保持不变的距离矩阵D求取内积矩阵B。
对矩阵B做特征值分解, B = V Λ V T B=V\Lambda V^T B=VΛVT,其中 Λ \Lambda Λ为特征值构成的对角矩阵。而现实应用中为了有效降维,仅需降维后的距离与原始空间中的距离尽可能接近,而不必严格相等。
对降维效果的评估,通常是比较降维前后学习器的性能,若性能有所提高,则认为降维起到了作用。
3 主成分分析(PCA)
最常见的一种降维方法。对于正交属性空间中的样本点,具有如下性质的超平面可以对所有样本进行恰当的表达。
- 最近重构性:样本点到这个超平面的距离都足够近。
- 最大可分性:样本点在这个超平面上的投影尽可能分开。
根据最近重构性,有优化目标:
min W − t r ( W T X X T W ) s . t . W T W = I . \begin{array}{rl}\min_{\mathbf{W}}&-\mathrm{tr}\left(\mathbf{W}^{\mathrm{T}}\mathbf{X}\mathbf{X}^{\mathrm{T}}\mathbf{W}\right)\\\\\mathrm{s.t.}&\mathbf{W}^{\mathrm{T}}\mathbf{W}=\mathbf{I}.\end{array} minWs.t.−tr(WTXXTW)WTW=I.
根据最大可分性,有优化目标:
max W t r ( W T X X T W ) s . t . W T W = I , \begin{array}{rl}\max_{\mathbf{W}}&\mathrm{tr}\left(\mathbf{W}^\mathrm{T}\mathbf{X}\mathbf{X}^\mathrm{T}\mathbf{W}\right)\\\\\mathrm{s.t.}&\mathbf{W}^\mathrm{T}\mathbf{W}=\mathbf{I} ,\end{array} maxWs.t.tr(WTXXTW)WTW=I,
使用拉格朗日乘子法可得
x x T W = λ W \mathbf{x} \mathbf{x} ^{\mathrm{T} }\mathbf{W} = \lambda \mathbf{W} xxTW=λW ,
于是,只需对协方差矩阵 X X T \mathbf{X} \mathbf{X} ^\mathrm{T} XXT进行特征值分解;将求得的特征值排序: λ 1 ⩾ λ 2 ⩾ ... ⩾ λ d \lambda_{1}\geqslant\lambda_{2}\geqslant\ldots\geqslant\lambda_{d} λ1⩾λ2⩾...⩾λd,再取前 d ′ d^\prime d′个特征值对应的特征向量构成 W = ( w 1 \mathbf{W}=(\boldsymbol{w}{1} W=(w1, w 2 , ... , w d ′ ) . w_2,\ldots,w{d^{\prime}}). w2,...,wd′). 这就是主成分分析的解。
二维空间降维
python
import numpy as np
from sklearn.decomposition import PCA
X = np.array([[1, 1], [2, 2], [3, 3]])
pca = PCA(n_components=1)
pca.fit(X)
X_transformed = pca.transform(X)
print(X_transformed)
降维结果:
4 核化线性降维
线性降维方法假设从高维空间到低维空间的函数映射是线性的,然而在现实任务中,可能需要非线性映射才能找到恰当的低维嵌入。
非线性降维的一种常用方法,是基于核技巧对线性降维方法进行核化。例如核主成分分析(KPCA)。
python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
from sklearn.decomposition import KernelPCA
X, y = make_moons(n_samples=200, random_state=50)
scikit_kpca = KernelPCA(n_components=2, kernel='rbf', gamma=15)
X_skernpca = scikit_kpca.fit_transform(X)
plt.scatter(X_skernpca[y == 0, 0], X_skernpca[y == 0, 1],
color='red', marker='^', alpha=0.5)
plt.scatter(X_skernpca[y == 1, 0], X_skernpca[y == 1, 1],
color='blue', marker='o', alpha=0.5)
plt.tight_layout()
plt.show()
分析:通过KPCA映射,原本非线性可分数据集变为线性可分。
5 流形学习
流形学习是一类借鉴了拓扑流形概念的降维方法。流形是在局部与欧式空间同胚的空间,它在局部具有欧氏空间的性质,能用欧氏距离来进行距离计算。若低维流形嵌入到高维空间中,则数据样本在高维空间的分布虽然看上去非常复杂但在局部上仍具有欧氏空间的性质,因此,可以容易地在局部建立降维映射关系,然后再设法将局部映射关系推广到全局。
5.1 等度量映射
等度量映射的基本出发点,是认为低维流形嵌入到高维空间之后,直接在高维空间中计算直线距离具有误导性,因为高维空间中的直线距离在低维嵌入流形上是不可达的。计算测地线距离可以利用流形在局部上与欧氏空间同胚的性质,对每个点基于欧氏距离找出其近邻点,然后能建立一个近邻连接图。
在近邻连接图上计算两点间的最短路径,可采用Dijkstra算法或Floyd算法,得到任意两点的距离之后,可通过MDS方法来获得样本点在低维空间中坐标。
注意:Isomap仅得到了训练样本在低维空间的坐标,对于新样本,如果要将其映射到低维空间,可以将训练样本的高维空间坐标作为输入,低维空间坐标作为输出,训练一个回归学习器来对新样本的低维空间坐标进行预测。
近邻图构建做法:
- 指定近邻点个数,例如欧氏距离最近的k个点为近邻点,
- 指定距离阈值 ϵ \epsilon ϵ,距离小于 ϵ \epsilon ϵ的点被认为是近邻点,这样得到的近邻图称为 ϵ \epsilon ϵ近邻图。
5.2 局部线性嵌入(LLE)
局部线性嵌入试图保持邻域内样本之间的线性关系。
假定样本点 x i x_i xi的坐标能通过它的邻域样本 x j x_j xj, x k , x l x_k,\boldsymbol{x}l xk,xl的坐标通过线性组合而重构出来,即
x i = w i j x j + w i k x k + w i l x l , x{i}=w_{ij}\boldsymbol{x}{j}+w{ik}\boldsymbol{x}{k}+w{il}\boldsymbol{x}_{l}\:, xi=wijxj+wikxk+wilxl,
LLE 希望式的关系在低维空间中得以保持
6 度量学习
每个空间对应了在样本属性上定义一个距离度量,而寻找合适的空间,实质上就是在寻找一个合适的距离度量,度量学习就是尝试学习出一个合适的距离度量。
对两个 d d d维样本 x i x_i xi和 x j x_j xj,它们之间的平方欧氏距离可写为
d i s t e d 2 ( x i , x j ) = ∣ ∣ x i − x j ∣ ∣ 2 2 = d i s t i j , 1 2 + d i s t i j , 2 2 + ... + d i s t i j , d 2 , \mathrm{dist}_{\mathrm{ed}}^2(\boldsymbol{x}_i,\boldsymbol{x}_j)=||\boldsymbol{x}i-\boldsymbol{x}j||2^2=dist{ij,1}^2+dist{ij,2}^2+\ldots+dist{ij,d}^2\:, disted2(xi,xj)=∣∣xi−xj∣∣22=distij,12+distij,22+...+distij,d2,
其中 d i s t i j , k dist_{ij,k} distij,k表示 x i x_i xi与 x j x_j xj在第 k k k维上的距离. 若假定不同属性的重要性不同
则可引入属性权重 w w w,得到
d i s t w e d 2 ( x i , x j ) = ∣ ∣ x i − x j ∣ ∣ 2 2 = w 1 ⋅ d i s t i j , 1 2 + w 2 ⋅ d i s t i j , 2 2 + ... + w d ⋅ d i s t i j , d 2 = ( x i − x j ) T W ( x i − x j ) , \begin{aligned}\mathrm{dist}{\mathrm{wed}}^{2}(\boldsymbol{x}{i},\boldsymbol{x}{j})&=||\boldsymbol{x}{i}-\boldsymbol{x}{j}||{2}^{2}=w_{1}\cdot dist_{ij,1}^{2}+w_{2}\cdot dist_{ij,2}^{2}+\ldots+w_{d}\cdot dist_{ij,d}^{2}\\&=(\boldsymbol{x}{i}-\boldsymbol{x}{j})^{\mathrm{T}}\mathbf{W}(\boldsymbol{x}{i}-\boldsymbol{x}{j})\:,&\end{aligned} distwed2(xi,xj)=∣∣xi−xj∣∣22=w1⋅distij,12+w2⋅distij,22+...+wd⋅distij,d2=(xi−xj)TW(xi−xj),
其中 w i ⩾ 0 , W = w_i\geqslant0,\mathbf{W}= wi⩾0,W=diag ( w ) (\boldsymbol w) (w)是一个对角矩阵, ( W ) i i = w i . (\mathbf{W})_ii=w_i. (W)ii=wi.
将W替换为一个普通的半正定对称矩阵M,得到了马氏距离
d i s t m a h 2 ( x i , x j ) = ( x i − x j ) T M ( x i − x j ) , \begin{aligned}\mathrm{dist}{\mathrm{mah}}^{2}(\boldsymbol{x}{i},\boldsymbol{x}{j})&=(\boldsymbol{x}{i}-\boldsymbol{x}{j})^{\mathrm{T}}\mathbf{M}(\boldsymbol{x}{i}-\boldsymbol{x}_{j})\:,&\end{aligned} distmah2(xi,xj)=(xi−xj)TM(xi−xj),
其中M亦称度量矩阵,而度量学习则是对M进行学习,M必须是(半)正定对称矩阵。