Определение параметра расстояния (V) в поиске сетки перекрестных узлов knn (метрики расстояния по евклидову / махаланобису) - PullRequest
1 голос
/ 20 января 2020

Я пытаюсь выполнить k-кратный поиск по сетке перекрестной проверки, используя алгоритм KNN, используя python sklearn, с параметрами в поиске, являющимися числом соседей K и расстоянием metri c. Я включаю махаланобис и суклидеан в качестве метрик расстояния, и понимаю, что у них есть параметр, который необходимо указать, а именно 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) (*)

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

TypeError: __init __ () получил неожиданный аргумент ключевого слова 'V'

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

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

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

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

Любая помощь признателен!

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

1 Ответ

0 голосов
/ 21 января 2020
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. Таким образом, вы должны разделить их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...