Передача параметров в KNeighborsClassifier

У меня есть код, который задает классификатор KNeighborsClassifier

knn = KNeighborsClassifier(n_neighbors=2, weights=my_distance)

функция my_distance возвращает расстояния до точек с учетом ядра, являющегося полиномом, коэффициенты которого я хочу оптимизировать для нахождения максимума score() на тестовой выборке

def my_distance(weights):
    weights_new = []
    print(weights,'old')
    for i in weights:

        # Функция весов, параметры которой мы будем оптимизировать
        # будем рассматривать функции, являющиеся полиномами вида x^(-4) до x^4
        # каждый вес это массив, состоящий из расстояний до всех уже созданных соседей
        w = []
        for x in i:
            if x!=0:
                w.append(c[4]+x**(-4)*c[0]+x**(-3)*c[1]+x**(-2)*c[2]+x**(-1)*c[3]+x**(4)*c[8]+x**(3)*c[7]+x**(2)*c[6]+x*c[5])
            else:
                w.append(0)                   
        #Изменяем веса
        weights_new.append(w)
    print(weights_new)
    return weights_new

Проблема в том, что, либо в функцию my_distance нельзя передать более одного параметра, либо я это делаю некорректно

def func_opt(c):
    knn = KNeighborsClassifier(n_neighbors=2, weights=my_distance)
    knn.fit(X_train,y_train)
    return -knn.score(X_test,y_test)

поскольку далее решение можно было бы найти при помощи optimize.minimize(func_opt, c)

подскажите, как решить проблему


Ответы (0 шт):