什么是度量学习
许多机器学习的方法需要测量数据点之间的距离。传统上,从业者会根据领域的先验知识选择一个标准距离度量(例如欧几里德,城市街区,余弦等)。然而,通常很难设计出非常适合特定数据和感兴趣的任务的度量方式。
距离度量学习(简称度量学习)的目的是以机器学习的方式,从(弱监督的)监督数据自动构造任务特定的距离度量。然后,学习到的距离度量可以用于执行各种任务(例如,k-NN 分类,聚类,信息检索)。
问题设置
根据训练数据的监督类型,度量学习问题可以分为两类:
-
监督学习:这类算法访问一组数据点,每个数据点都属于一个类(标签) ,就像标准分类问题一样。广义地说,这种设置的目标是学习一种距离度量,来将标签相同的点放在一起,同时标签不同的点尽可能远离。
-
弱监督学习:这类发算法只能访问一组在元组级别(通常是数据点的对、三联体或四联体)的数据点。这种弱监督的一个典型例子是一组正负对:目标是学习一个距离度量,将正对放在一起,负对互相远离。
基于上述(弱)监督数据,度量学习问题通常被表述为一个最佳化问题,其中寻找距离函数的参数,优化某个目标函数,度量与训练数据的一致性。
马氏距离 Mahalanobis Distances
在度量学习包中,目前实现的所有算法都实现了学习马氏距离。给定一个实值参数矩阵,其形状为(num_dims, n_features),此处的n_features表示数据中特征的数量,关于的马氏距离定义为:
换句话说,一个马氏距离是一个欧式距离经过线性转换后由定义的特征空间(当为单位矩阵时可以得到标准欧式距离)。因此,马氏距离度量学习可以被看作是学习一种新的嵌入空间带维度num_dims。需要注意的是num_dims要小于n_features,来实现降维的目的。
严格地说,马氏距离距离是“伪度量”:它满足度量的3个性质(非负性、对称性、三角不等式) ,但不一定满足不可区别的等同原则。
此外马氏距离同样可以使用一个半正定矩阵(PSD)来参数化:
这种定义基于半正定矩阵可以被分解为,可以证明两个参数化是等价的。
使用案例
度量学习有许多样例,在这里列出一些热门样例(关于其中一些用例代码,请参阅文档的示例部分) :
-
Nearest neighbors models(最近邻学习模型):学习度量可以用来改进最近邻学习模型的分类、回归、异常检测等。
-
聚类:度量学习提供了一种方法通过算法来发现集群偏差,类似于 K-Means 的语义学。
-
信息检索:可以使用习得的度量来检索语义上最接近查询元素的数据库元素。
-
降维:度量学习可以被看作是在(弱)监督环境中降低数据维度的一种方法。
-
更一般地说,学习转换可用于将数据投影到一个新的嵌入空间,然后再将其输入到另一个机器学习算法中。
度量学习的API与 scikit-learn 兼容,这使得通过其他 scikit-learn 估计器(estimators)可以很容易地进行管道(pipeline)度量学习,以实现上述用例,执行联合超参数调整等。