Определение параметра расстояния (V) в поиске по сетке knn crossval (метрики расстояний севклидова/махаланобиса)

Я пытаюсь выполнить k-кратный поиск по сетке перекрестной проверки с использованием алгоритма KNN с использованием python sklearn, при этом параметрами поиска являются количество соседей K и метрика расстояния. Я включаю mahalanobis и seuclidean в качестве показателей расстояния и понимаю, что у них есть параметр, который необходимо указать, а именно V или VI (ковариационная матрица признаков или обратная этому).

Ниже мой код:

X_train, X_test, y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=10,stratify=y)

knn=KNeighborsClassifier()

grid_param={'n_neighbors':np.arange(1,51),'metric':['euclidean','minkowski','mahalanobis','seuclidean'],'metric_params':[{'V': np.cov(X_train)}]} 

knn_gscv=GridSearchCV(knn,grid_param,cv=5)

knn_gscv.fit(X_train,y_train) (*)

Строка (*) выдает эту ошибку при выполнении:

Ошибка типа: __init__() получила неожиданный ключевой аргумент 'V'

Я также пробовал VI вместо V, но получаю ту же ошибку.

Я столкнулся с потенциальными решениями ниже, но они не помогают.

https://github.com/scikit-learn/scikit-learn/issues/ 6915

Scikit-learn: как мы определяем параметр метрики расстояния для поиска по сетке

Любая помощь приветствуется!

Это также мой первый вопрос, поэтому любая обратная связь будет полезна и в этом отношении.


person Aqace    schedule 20.01.2020    source источник


Ответы (1)


grid_params = [
    {'n_neighbors': np.arange(1, 51), 'metric': ['euclidean', 'minkowski']},
    {'n_neighbors': np.arange(1, 51), 'metric': ['mahalanobis', 'seuclidean'],
     'metric_params': [{'V': np.cov(X_train)}]}
]

Проблема в том, что метрики euclidean и minkowski не принимают параметр V. Поэтому вам нужно их разделить.

person Razmik Melikbekyan    schedule 20.01.2020