我正在定义一个自定义距离指标,供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
的行。
为什么?我该如何解决这个问题?
谢谢!
答案 0 :(得分:0)
您不需要将您的指标包装在DistanceMetric对象中,您只需将其作为参数传递给KNeighborsRegressor。
然后,由于您正在进行重塑,它会失败,因为sklearn试图通过尝试使用两个形状为10左右的向量来检查您的指标是否为有效函数[1] 。您可以检测到该情况并返回0(这是一个有效的距离指标)。
[1] here