到每个数据点具有不同距离矩阵的 K 最近邻

数据挖掘 机器学习 scikit-学习 距离 k-nn
2021-10-14 19:00:38

我想知道python(例如sklearn)中是否有库支持在每个数据点(x是查询点)具有自定义距离矩阵(正定)的数据集上执行KNN, xi 是一个数据设定点):

d(x,xi)=(xxi)TQi(xxi)

我知道对于所有数据点的固定正定矩阵,这是我可以转换为的度量

Q=ATA       d(x,xi)=(AxAxi)T(AxAxi)
我可以通过首先通过乘法转换输入空间来通过普通 KNN 计算 A.

我为每个数据点设置一个单独的矩阵的问题出现了,因为我在每个点的附近都有一个协方差。然后可以将 KNN 解释为该查询点所在的最可能的邻域。如果邻域沿某个维度没有变化,那么我们应该根据增加的距离高度惩罚沿该维度的差异。

1个回答

正如@Pratik Deoghare 所指出的,您可以在 sklearn kNN 上创建自定义指标,您可以在他提供的链接中查看如何。

但是你想要一个对每个人都不同的功能xi,这不是数学意义上的度量,但我可以看到这如何使算法受益。

您作为指标传递的函数(请参阅链接中的方法)可以定义为

def creatmydist(AllA):
    Alist = AllA
    def mydist(x, y):
        nonlocal Alist
        if x[-1] == 0: i = y[-1]
        else: i=x[-1]        
        A = Alist[i]
        x = np.dot(A,x[0:len(x)-1])
        y = np.dot(A,y[0:len(y)-1])
        return np.dot(x-y,x-y)
    return mydist

AllA 应该是一个包含所有内容的列表A=(AT)1Q和每一个xi 应该有作为最后一个元素它的索引i