1.1 输入数据
为了训练一个模型,feature_x应该为 n×m的2D数组,其中n为样本的个数,m为数据的维数。y为大小为n的一维数组,该数组包含X中每个数据的类别标签(回归问题是为实数,例如度量学习核回归MLKR)。
下面给出用于度量学习的数据例子,数据中包含两种类别:狗与猫。
import numpy as np
X = np.array([[2.3, 3.6], [0.2, 0.5], [6.7, 2.1]])
y = np.array(['dog', 'cat', 'dog'])
1.2 Fit, transform以及其它
有监督度量学习算法的目标是为了将数据转换到新空间中,在该空间中,同类别的两个数据点的距离会非常小,而不同类别的两个数据的距离则很大。为了得到这个转换矩阵,我们需要利用训练数据来fit度量学习器(例子:最近邻成分分析NCA)。
>>> from metric_learn import NCA
>>> nca = NCA(random_state=42)
>>> nca.fit(X, y)
NCA(init=None, max_iter=100, n_components=None, num_dims='deprecated',
preprocessor=None, random_state=42, tol=None, verbose=False)
首先,我们可以利用transform
将数据转换到新的状态空间。下面给出转换两个数据到嵌入空间的例子:
>>> X_new = np.array([[9.4, 4.1], [2.1, 4.4]])
>>> nca.transform(X_new)
array([[ 5.91884732, 10.25406973], [ 3.1545886 , 6.80350083]])
通过以上步骤,我们的度量学习器已经学到了数据点之间的距离,我们有以下两种使用它的途径:
我们可以利用score_pairs
返回两个数据点之间的距离:
>>> nca.score_pairs([[[3.5, 3.6], [5.6, 2.4]], [[1.2, 4.2], [2.1, 6.4]]])
array([0.49627072, 3.65287282])
也可以利用get_metric
函数返回两个数据点之间的距离:
>>> metric_fun = nca.get_metric()
>>> metric_fun([3.5, 3.6], [5.6, 2.4]) 0.4962707194621285