Передача параметров в 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)
подскажите, как решить проблему