监督度量学习
监督度量学习以点和标签为输入,学一个距离矩阵,使同一类(分类)中的点或接近目标值(回归)中的点彼此接近,不同类别的点或远离目标值的点彼此远离。
General API
有监督的度量学习算法本质上使用与 scikit-learn 相同的 API。
输入数据
为训练数据,需要两个数组例如。应该为一个2维数组其形式为(n_samples, n_features),n_samples表示数据集内样本的数量,n_features表示每个样本的特征数量。应该为一个一维数组其形式为(n_samples),表示中每个样本所属的分类。
下面是两只狗和一只猫(类是“狗”和“猫”)用两个数字表示的动物的数据集的示例。
Fit, transform 等等
监督度量学习算法的目标是在一个新的空间中对样本点进行变换,在这个空间中,同类中的两个点间的距离较小,而不同类中的两个点间的距离较大。然后对度量学习器使用fit函数(例子:NCA)
现在estimator已经fitted,可以在新数据上使用它。
首先,可以使用transform函数将数据转换到学习空间中,如下所示将新样本点转换到新嵌入空间:
正如之前解释的,度量学习器已经学到了一个样本点间的距离,可以通过以下两种方式来使用这些距离:
- 使用
score_pairs函数来返回一对样本点间的距离:
- 或者,可以返回一个函数,该函数将返回两个1维数组(原始空间中点的坐标)间的距离(在新的空间中):
使用get_mahalanobis_matrix函数可以学习马氏距离:
算法
LMNN
Large Margin Nearest Neighbor Metric Learning (LMNN)
LMNN在KNN分类设置中学习一个马氏距离度量,学习到的度量尝试保持同一类中的K近邻接近,而不同类中的样本则大幅度被分离,该算法不假设数据分布。
这个距离是通过解决以下的最佳化问题来学习的:
为一个数据样本点,为K近邻中的一个点,二者共享相同的标签,为该区域内带不同标签的其他所有的实例。为指示者,用来表示是否为的K近邻(即带相同标签)。表示二者属于不同的类,为Hinge loss。
NCA
Neighborhood Components Analysis(NCA)
NCA是一种距离度量学习算法,其目标在于提高最近邻分类的准确性。改算法直接在训练集合上最大化留一法KNN得分的一个随机变量,它还可以学习一个数据的低维线性转换用于数据可视化和快速分类。
它使用了分解,并通过计算马氏距离的softmax似然值来定义是近邻的概率:
使用随机近邻规则正确分类的概率是:
优化问题的目标是找到矩阵令被分类准确的概率和最大:
LFDA
Local Fisher Discriminant Analysis(LFDA)
LFDA是一种线性监督降维方法,它有效地结合了线性判别分类和本地保留映射(Locality-Preserving Projection)的思想。在处理多模态时特别有用,在多模态下一个或多个类在输入空间中由独立的集群组成。LDFA的核心优化问题的是作为广义特征值问题求解的。
算法以成对的方式定义了Fisher local within-/between-class scatter matrix :
为关联矩阵的第个实体,可以由 local scaling methods 计算得到,分别表示样本点的总数和每个集群中样本点的数量。
然后学习问题就变成了推导出 LFDA 的变换矩阵:
这就是说,它需要找到一个变换矩阵来满足上面的公式。
MLKR
Metric Learning for Kernel Regression(MLKR)
MLKR是一种监督度量学习算法,它通过直接最小化留一法回归错误来学习一个距离函数。这种算法也可以看做一个PCA的有监督变体,用于降维和高维数据可视化。
理论上,MLKR可以应用于多种类型的核函数和距离度量,重点讨论一个高斯核和马氏距离的实例,高斯核表示为:
表示某些度量下的平方距离,此处为马氏距离,即,转换矩阵由马氏距离的分解推导而出。
由于可以被并入中,为简化问题设置。次吃使用累加留一法二次回归错误作为训练样本的损失函数,写作:
此处来自核回归,通过所有样本的一个加权平均来计算: