弱监督算法比有监督算法处理的数据点信息更弱。与标记点不同,他们将数据点元组的相似性判断作为输入,例如相似点和不相似点的对。
General API
输入数据
在下面的段落中,为了概括起见,以元组为主体讨论,可以是对、三元组、四元组等,取决于度量学习算法。
基本形式
每个弱监督算法的输入都是带样本点的元祖,如果需要还可以取这些元祖的标签。这些样本点构成的元祖也可以称为约束(constraints)。标签是有关这组点的一些信息(例如:“这两个点是相似的”)
tuple
参数是每个方法的第一个参数(例如scikit-learn中经典方法里的
参数),第二个参数是标签,其语义取决于使用的算法。例如,对于样本对学习器,
是一个标签,表示这对样本是相似还是不相似。
然后可以在这个元组上匹配一个弱监督度量学习器,如下所示:
如同经典设置中的将
划分为训练集和测试集,此处将tuple
划分为训练集和测试集:
3维元组数组
最直观的表示元组的方法是为算法提供一个3维类数组元组,其形状为:(n_tuples, tuple_size, n_features)
。n_tuples表示tuple的数量,tuple_size表示一个tuple中的元素数量,n_features表示每个样本点的特征数。
注意:对于大量的元祖不推荐使用这种方式,因为它是冗余的,需要大量的内存。
2维数组的 indicators + preprocessor
一种更有效的方法是用样本点的索引来表示元组,由于失去了特征维度,因此得到的数组是2D的:
为了适应度量学习算法与这种类型的输入,需要给估计器的原始数据集样本点 ,以便它知道的点索引指向。
Fit, transform 等等
弱监督度量学习算法的目标是转换样本点到一个新的空, 在这个空间中元组级的约束能够被遵从。
或者(使用预处理器):
现在estimator已经安装好了,可以用它来处理新的数据。
首先,可以使用transform
来转换数据到学习空间,下面的例子转换两个样本点到新的嵌入空间:
度量学习器学习两样本点间的距离,可以通过下面两种方法得到该距离:
- 使用
score_pairs
函数返回一对样本点之间的距离:
- 或者可使用
get_metric
函数构造度量函数:
使用get_mahalanobis_matrix
函数可以得到马氏距离度量:
预测和打分
弱监督在fitted后也能够预测给定元组的标签(样本对)或顺序(四元组),它们同样也有评分方式。
Scikit-learn兼容性
弱监督估计器和scikit-learn程序兼容(sklearn.model_selection.cross_val_score, sklearn.model_selection.GridSearchCV )
样本对学习
一些度量学习算法是基于样本对的,这种情况下要给算法提供N_samples对样本点,及其对应的标签,标签值为1或-1表示给定样本对是否相似。
fitted
下面是一个fitted 的例子:
在这里学习了一个度量标准,在变换后的空间中,前两个点靠得更近,而后两个点则相距更远。
预测
当样本对学习器fitted后,它就能预测:
预测阈值
预测一对新样本是否代表相似或不相似的样本,需要设置一个学习距离的阈值,在学习空间中,比这个阈值小的距离被预测为相似,而超出阈值的被预测为不相似。有几种方法可以实现这种阈值:
- 在fit的时候进行校正:使用
calibrate_threshold
在训练集上设置阈值,可以在fit
方法中直接指定校准参数,使用threshold_params
参数。注意,在训练集上进行校准可能会导致一些过拟合,为避免这个情况可以在fitted之后校准。
- 在验证集上校准:调用
calibrate_threshold
在验证集上校准阈值以获得特定的分数,该分数位于经典分类分数之间(精确度,F1分数……)。
- 手工阈值:使用
set_threshold
手工给阈值设置一个特殊的值:
评分
样本对度量学习器也可以返回一个用于成对组合的decision_function
,这个分数对应于新空间中距离的相反值(高分表示样本点相似,低分表示样本点不同)。
这允许使用通用的评分函数来实现二分类,例如sklearn.metrics.accuracy_score
可以在交叉验证例程中使用:
样本对学习器也有默认分数,基本上返回sklearn.metrics.roc_auc_score
。
算法
ITML
Information Theoretic Metric Learning (ITML)
ITML 最小化(微分)相对熵,又名 Kullback-Leibler 散度,在相关马氏距离约束下的多元高斯方程之间,通过最小化 LogDet 散度在线性约束下的散度形成一个 Bregman 优化问题。该算法可以处理各种各样的约束条件,并且可以选择性地在距离函数中加入先验。与其他方法不同,ITML 不依赖于特征值计算或半定规划。
给定一个马氏距离 ,其相关的多元高斯分布表示为:
为标准化常数,马氏矩阵的逆矩阵 为高斯分布的协方差。
给定相似对 和不相似对 ,距离度量学习问题是最小化LogDet散度,等同于最小化
其中, 为相似和不相似对的上下限, 是先验距离度量,默认设置为单位矩阵, 为对数行列式。
SDML
Sparse High-Dimensional Metric Learning (SDML)
SDML是一个有效的稀疏度量学习,它在高维空间中使用双正则化:对马氏矩阵 的非对角元素使用L1-penalization和 间的对数行列式散度(设置为 或者 ,其中 为协方差矩阵)
形式化优化基于半正定矩阵 是凸的:
为训练数据集, 为非对角L1范数。
RCA
Relative Components Analysis (RCA)
RCA基于一个加权 in-chunklets 协方差矩阵来学习一个满轶马氏距离度量,它使用了一个全局线性映射来给相关的维度分配较大的权重,给不相关的维度分配较低的权重。这些相关维度是使用chunklets(已知属于同一类的点的子集)来估计的。
对于规模为 的训练集在 个chunklets中,该算法计算:
此处,chunklet 由 构成,其均值为 。 的逆作为马氏距离。
MMC
Metric Learning with Application for Clustering with Side Information (MMC)
MMC 最小化相似点之间的距离平方和,同时强制不同点之间的距离之和大于一。这可以得到凸函数从而有效地解决局部极小最佳化问题。然而,该算法涉及特征值的计算,是主要的速度瓶颈。因为它最初是为聚类应用而设计的,所以 MMC 隐含的假设之一是所有类形成一个紧凑的集合,即遵循一个单峰分布,这限制了该方法可能的应用范围,但它仍然是最早的和仍然经常被引用的技术之一。
该算法旨在最小化所有相似点之间的距离和,同时约束不同点之间的距离和:
三元组学习
fitted
下面是一个fitted三元组的示例:
预测
评分
三元组度量学习者还可以返回一组三元组的decision_function
,该判定函数对应于前两个点之间的距离减去三元组的第一个点和最后一个点之间的距离(值越高,第一个点和第二个点相比,第二个点越相似)。该分数可以被解释为度量这个三元组得到+1预测的可能性:
在上面的例子中,对于三元组测试中的第一个三元组,预计第一个点与第二个点的相似度要小于与最后一个点的相似度(它们在转换空间中的距离更远)。
与对子学习者不同,三元组学习者不允许在拟合时给出 : 假设三元组中点的排序使得训练的三元组都是正的。因此,不可能使用 scikit-learn 评分功能(如f1 _ score)在三元组学习者上。
然而,三元组学习者确实有一个默认的评分函数,它基本上会返回给定测试集的准确性分数,即具有正确预测顺序的三元组的比例。
算法
SCML
Sparse Compositional Metric Learning (SCML)
SCML通过优化稀疏正权重来给一组 rank-one PSD bases从三元组约束中学习一个系数马氏距离。这个可以形式化为一个只有 参数的优化问题,并通过一个有效的随机组合方案来解决它。
马氏距离 基于一个基集 来搭建,通过一个 维向量 来赋权:
关于 的优化问题可以通过一个经典的基于边际的hinge loss函数来形式化,包括集合 的三元组。添加一个正则化 用于产生一个系数组合,其形式化如下所示: