KNeighborsRegressor用户定义的度量重构

时间:2015-11-11 03:16:17

标签: python-2.7 scikit-learn nearest-neighbor

我正在定义一个自定义距离指标,供Scikit-Learn的KNearestRegressor使用。

我的距离指标需要两张图像,并根据视觉特征计算它们的相似性:

def imageMatchingMetric(x,y): 
      # the RGB images have size 480x640
      x = x.reshape(480,640,3)
      y = y.reshape(480,640,3)
      (...)

因此,我的X矩阵是图像矩阵。然后我打电话给

metricObject = sklearn.neighbors.DistanceMetric.get_metric('pyfunc', func=imageMatchingMetric)
clf = KNeighborsRegressor(n_neighbors=d['kneighbours'], metric=metricObject)
clf.fit(X, y)

我从imageMatchingMetric收到错误,当重塑时,我必须保持大小相同。

我从调试中发现,x imageMatchingMetric收到的是一个长度为10的向量,它不是X的行。

为什么?我该如何解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:0)

您不需要将您的指标包装在DistanceMetric对象中,您只需将其作为参数传递给KNeighborsRegressor。

然后,由于您正在进行重塑,它会失败,因为sklearn试图通过尝试使用两个形状为10左右的向量来检查您的指标是否为有效函数[1] 。您可以检测到该情况并返回0(这是一个有效的距离指标)。

[1] here