Sklearn KNeighborsRegressor Пользовательские метрики расстояния
Я использую KNeighborsRegressor, но я хотел бы использовать его с пользовательской функцией расстояния. Мой тренировочный набор - это DataFrame для панд, который выглядит следующим образом:
week_day hour minute temp humidity
0 1 9 0 1
1 1 9 0 1
2 1 9 0 1
3 1 9 0 1
4 1 9 1 1
...
def customDistance(a, b):
print a, b
return np.sum((a-b)**2)
dt = DistanceMetric.get_metric("pyfunc", func=customDistance)
knn_regression = KNeighborsRegressor(n_neighbors=15, metric='pyfunc', metric_params={"func": customDistance})
knn_regression.fit(trainSetFeatures, trainSetResults)
Я также попытался вызвать customDistance непосредственно из конструктора KNeighborsRegressor, например:
knn_regression = KNeighborsRegressor(n_neighbors=15, metric=customDistance)
Функция выполняется в обоих направлениях, но результаты довольно странные. Прежде всего, я ожидал бы видеть в качестве входных данных функции A и B строки из моего DataFrame, но вместо этого я получаю:
[0.87716989 11.46944914 1.00018801 1.10616031 1.] [ 1. 9. 0. 1. 1.]
Второй атрибут B, очевидно, является строкой из моего тренировочного набора, но я не могу уточнить, откуда появился первый ряд? Если бы кто-то мог объяснить или опубликовать пример правильной вставки пользовательской функции расстояния в упомянутый алгоритм, он был бы очень признателен.
Заранее спасибо.
С уважением, Клемен