我需要在Python中应用最近邻算法,我正在查看scikit-learn
和scipy
库,这两个库都需要数据作为输入,然后计算距离并应用算法。
在我的情况下,我需要计算一种非传统的距离,因此我想知道是否有办法直接输入距离矩阵。
回答:
你需要创建一个DistanceMetric
对象,并将你自己的函数作为参数提供:
metric = sklearn.neighbors.DistanceMetric.get_metric('pyfunc', func=func)
根据文档说明:
这里的
func
是一个函数,它接受两个一维的numpy数组,并返回一个距离。请注意,为了在BallTree中使用,距离必须是一个真正的度量:即它必须满足以下属性
- 非负性:d(x, y) >= 0
- 同一性:d(x, y) = 0 当且仅当 x == y
- 对称性:d(x, y) = d(y, x)
- 三角不等式:d(x, y) + d(y, z) >= d(x, z)
然后你可以使用metric=metric
作为关键字参数创建你的分类器,它将在计算距离时使用这个度量。