Sklearn KNeighborsRegressor пользовательские метрики расстояния

Я использую KNeighborsRegressor, но я хотел бы использовать его с пользовательской функцией расстояния. Мой тренировочный набор - это pandas 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 явно является строкой из моего тренировочного набора, но я не могу уточнить, откуда взялась первая строка? Если бы кто-то мог объяснить или опубликовать пример правильной вставки пользовательской функции расстояния в упомянутый алгоритм, он был бы очень признателен.

Заранее спасибо.

С уважением, Клемен


person Klemen Koželj    schedule 25.01.2017    source источник
comment
Даже я столкнулся с этой проблемой. Вы придумали разрешение   -  person user3480922    schedule 20.09.2019