KNeighborsRegressor 用户定义的指标重塑
KNeighborsRegressor User-Defined Metric Reshaped
我正在定义一个自定义距离度量,用于 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
的一行。
这是为什么?我该如何解决?
谢谢!
您无需将指标包装在 DistanceMetric 对象中,只需将其作为参数传递给 KNeighborsRegressor。
然后因为你正在做一个重塑,它会失败,因为 sklearn 试图通过尝试用两个形状为 10 左右的向量调用它来检查你的度量是否是一个有效的函数 [1]。您可以只检测这种情况和 return 0(这是一个有效的距离度量)。
我正在定义一个自定义距离度量,用于 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
的一行。
这是为什么?我该如何解决?
谢谢!
您无需将指标包装在 DistanceMetric 对象中,只需将其作为参数传递给 KNeighborsRegressor。
然后因为你正在做一个重塑,它会失败,因为 sklearn 试图通过尝试用两个形状为 10 左右的向量调用它来检查你的度量是否是一个有效的函数 [1]。您可以只检测这种情况和 return 0(这是一个有效的距离度量)。