给出距离矩阵的Python中最近的邻居

时间:2014-02-10 11:11:15

标签: python machine-learning scipy scikit-learn

我必须在Python中应用最近邻,我正在查看scikit-learnscipy库,它们都需要数据作为输入,然后计算距离并应用算法。

在我的情况下,我必须计算一个非常规距离,因此我想知道是否有办法直接输入距离矩阵。

3 个答案:

答案 0 :(得分:6)

正如福特所说并根据文件 http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html#sklearn.neighbors.KNeighborsClassifier您应该将自定义距离转换为DistanceMetric对象,并将其作为指标参数传递。

答案 1 :(得分:5)

您需要创建一个DistanceMetric对象,并将自己的函数作为参数提供:

metric = sklearn.neighbors.DistanceMetric.get_metric('pyfunc', func=func)

来自文档:

  

这里func是一个带有两个一维numpy数组的函数,   并返回一个距离。请注意,为了在BallTree中使用,距离必须是真正的度量:即它必须满足以下属性

     
      
  • 非负性:d(x,y)> = 0
  •   
  • 标识:当且仅当x == y
  • 时,d(x,y)= 0   
  • 对称性:d(x,y)= d(y,x)
  •   
  • 三角不等式:d(x,y)+ d(y,z)> = d(x,z)
  •   

然后,您可以使用metric=metric作为关键字参数创建分类器,并在计算距离时使用此分类器。

答案 2 :(得分:0)

想要添加福特的答案,你必须这样做

metric = DistanceMetric.get_metric(' pyfunc',func = /您的函数名称/)

你不能只把自己的函数作为第二个参数,你必须将参数命名为" func"