从 k-NN 的输出逆向工程距离度量

数据挖掘 推荐系统 距离 k-nn
2022-03-13 10:01:25

假设有人根据某个未知度量训练了最近邻算法。我有一个大数据集N观察和P特征。对于每一次观察,我都会得到K对应的指标K(相同)数据集中的“最近”点。

学习这个指标的一般策略是什么?这类问题有标准名称吗?是否有任何 Kaggle 类型的比赛有这样的任务,或者这很不寻常?

2个回答

有趣的问题。如果您认为距离度量是一些常见的度量,当然您可以尝试所有常见的度量,看看它返回的最近邻居与什么一致。

我想不出一种可靠地学习这一点的方法,因为您没有关于实际距离的任何信息。也许将所有最近邻对视为具有“小”距离而其余的“大”距离,并训练一个试图学习跨点对预测它的深度模型。无论它作为一个指标提出什么都会近似它。

这称为“距离度量学习”或“学习距离度量”。您可以在有关该主题的文献中找到许多论文。

有许多用于学习距离度量的算法。其中一些允许您指定四胞胎(x1,x2,x3,x4)我们被承诺的地方d(x1,x2)<d(x3,x4),任务是学习一个距离矩阵d这与这个训练集是一致的。然后,您可以通过采样将此类算法用于您的任务x1从你的训练集中随机抽样x2从其中之一K最近的邻居x1, 环境x3=x1, 和抽样x4从另一个NK1非邻居。

一种方法是学习马氏距离,即形式的距离度量d(x,x)=LxLx2. 这可以等效地表述为其中您可以将学习任务制定为优化问题,然后使用标准优化方法来学习矩阵(或)。这学习了一个线性距离度量。d(x,x)=(xx)M(xx)M=LLLM

还有其他方法试图使用神经网络学习更复杂的非线性距离度量,例如,其中是神经网络(因此,使用连体网络测量距离)。关于训练神经网络以测量图像相似度的标准文献描述了学习这种网络的多种方法,并且它也可以通过适当地采样三元组来应用于您的情况。d(x,x)=N(x)N(x)2N

您可能对 Python的metric-learn 包感兴趣。