Supervised Metric Learning

194 阅读4分钟

监督度量学习

监督度量学习以点xx和标签yy为输入,学一个距离矩阵,使同一类(分类)中的点或接近目标值(回归)中的点彼此接近,不同类别的点或远离目标值的点彼此远离。

General API

有监督的度量学习算法本质上使用与 scikit-learn 相同的 API。

输入数据

为训练数据,需要两个数组例如x,yx,yxx应该为一个2维数组其形式为(n_samples, n_features)n_samples表示数据集内样本的数量,n_features表示每个样本的特征数量。yy应该为一个一维数组其形式为(n_samples),表示xx中每个样本所属的分类。

下面是两只狗和一只猫(类是“狗”和“猫”)用两个数字表示的动物的数据集的示例。 image.png

Fit, transform 等等

监督度量学习算法的目标是在一个新的空间中对样本点进行变换,在这个空间中,同类中的两个点间的距离较小,而不同类中的两个点间的距离较大。然后对度量学习器使用fit函数(例子:NCA)

image.png

现在estimator已经fitted,可以在新数据上使用它。

首先,可以使用transform函数将数据转换到学习空间中,如下所示将新样本点转换到新嵌入空间:

image.png

正如之前解释的,度量学习器已经学到了一个样本点间的距离,可以通过以下两种方式来使用这些距离:

  1. 使用score_pairs函数来返回一对样本点间的距离:

image.png

  1. 或者,可以返回一个函数,该函数将返回两个1维数组(原始空间中点的坐标)间的距离(在新的空间中):

image.png

使用get_mahalanobis_matrix函数可以学习马氏距离:

image.png

算法

LMNN

Large Margin Nearest Neighbor Metric Learning (LMNN)

LMNN在KNN分类设置中学习一个马氏距离度量,学习到的度量尝试保持同一类中的K近邻接近,而不同类中的样本则大幅度被分离,该算法不假设数据分布。

这个距离是通过解决以下的最佳化问题来学习的:

image.png

xix_i为一个数据样本点,xjx_j为K近邻中的一个点,二者共享相同的标签,xlx_l为该区域内带不同标签的其他所有的实例。ηij,yij{0,1}\eta_{ij}, y_{ij}\in\{0,1\}为指示者,用来表示xjx_j是否为xix_i的K近邻(即带相同标签)。yij=0y_{ij}=0表示二者属于不同的类,[]+=max(0,)[\cdot]_+=max(0,\cdot)为Hinge loss。

image.png

NCA

Neighborhood Components Analysis(NCA)

NCA是一种距离度量学习算法,其目标在于提高最近邻分类的准确性。改算法直接在训练集合上最大化留一法KNN得分的一个随机变量,它还可以学习一个数据的低维线性转换用于数据可视化和快速分类。

它使用了分解M=LTLM=L^TL,并通过计算马氏距离的softmax似然值来定义xix_ixjx_j近邻的概率pijp_{ij}

image.png

使用随机近邻规则正确分类xix_i的概率是:

pi=j:ji,yj=yipijp_i=\sum_{j:j\neq i,y_j=y_i}p_{ij}

优化问题的目标是找到矩阵LL令被分类准确的概率和最大:

L=argmaxipiL=argmax\sum_i p_i

image.png

LFDA

Local Fisher Discriminant Analysis(LFDA)

LFDA是一种线性监督降维方法,它有效地结合了线性判别分类和本地保留映射(Locality-Preserving Projection)的思想。在处理多模态时特别有用,在多模态下一个或多个类在输入空间中由独立的集群组成。LDFA的核心优化问题的是作为广义特征值问题求解的。

算法以成对的方式定义了Fisher local within-/between-class scatter matrix S(w)/S(b)S^{(w)}/S^{(b)}

image.png

Ai,jA_{i,j}为关联矩阵AA的第(i,j)(i,j)个实体,可以由 local scaling methods 计算得到,n,nln,n_l分别表示样本点的总数和每个集群ll中样本点的数量。

然后学习问题就变成了推导出 LFDA 的变换矩阵LLFDAL_{LFDA}

LLFDA=arg maxL[tr((LTS(w)L)1LTS(b)L)]L_{LFDA}=\argmax_L[tr((L^TS^{(w)}L)^{-1}L^TS^{(b)}L)]

这就是说,它需要找到一个变换矩阵LL来满足上面的公式。

image.png

MLKR

Metric Learning for Kernel Regression(MLKR)

MLKR是一种监督度量学习算法,它通过直接最小化留一法回归错误来学习一个距离函数。这种算法也可以看做一个PCA的有监督变体,用于降维和高维数据可视化。

理论上,MLKR可以应用于多种类型的核函数和距离度量,重点讨论一个高斯核和马氏距离的实例,高斯核表示为:

image.png

d(,)d(\cdot,\cdot)表示某些度量下的平方距离,此处为马氏距离,即d(xi,xj)=L(xixj)d(x_i,x_j)=||L(x_i-x_j)||,转换矩阵LL由马氏距离的分解推导而出M=LTLM=L^TL

由于σ2\sigma^2可以被并入d(,)d(\cdot,\cdot)中,为简化问题设置σ2=1\sigma^2=1。次吃使用累加留一法二次回归错误作为训练样本的损失函数,写作:

L=i(yiy^i)2L=\sum_i(y_i-\hat{y}_i)^2

此处y^i\hat{y}_i来自核回归,通过所有样本的一个加权平均来计算:

image.png

image.png