Проблема с методом SelectKBest в конвейере - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь решить проблему, в которой я использую алгоритм KNN для классификации. При использовании конвейера я решил добавить SelectKBest, но я получаю ошибку ниже:

Все промежуточные этапы должны быть преобразователями и выполнять подгонку и преобразование.

Я не знаю, смогу ли я использовать этот алгоритм выбора с KNN. Но я тоже попробовал с SVM и получил тот же результат. Вот мой код:

sel = SelectKBest('chi2',k = 3)
clf = kn()
s = ss()
step = [('scaler', s), ('kn', clf), ('sel',sel)]
pipeline = Pipeline(step)
parameter = {'kn__n_neighbors':range(1,40,1), 'kn__weights':['uniform','distance'], 'kn__p':[1,2] }
kfold = StratifiedKFold(n_splits=5, random_state=0)
grid = GridSearchCV(pipeline, param_grid = parameter, cv=kfold, scoring = 'accuracy', n_jobs = -1)
grid.fit(x_train, y_train)

Ответы [ 2 ]

1 голос
/ 25 марта 2019

Порядок операций в конвейере, определенный в steps, имеет значение; из документов :

шаги: список

Список (имя, преобразование) кортежей (реализующих подгонку / преобразование), которые объединены в цепочку, в том порядке, в котором они связаны, с последним объектом - оценщиком.

Ошибка связана с добавлением SelectKBest в качестве элемента last вашего конвейера:

step = [('scaler', s), ('kn', clf), ('sel',sel)]

который не является оценщиком (это трансформатор), а также ваш промежуточный шаг kn не является трансформатором.

Полагаю, вы не хотите выполнять выбор функции после того, как вы установили модель ...

Измените его на:

step = [('scaler', s), ('sel', sel), ('kn', clf)]

и у тебя все будет хорошо.

0 голосов
/ 25 марта 2019

Итак, я не думал, что порядок конвейера важен, но потом я обнаружил, что последний член конвейера должен быть в состоянии соответствовать / преобразовываться. Я изменил порядок конвейера, сделав clf последним. Проблема решена.

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