scikit-learn: получить выбранные функции при использовании SelectKBest в конвейере
Я пытаюсь сделать выбор функций как часть конвейера scikit-learn, в сценарии с несколькими метками. Моя цель состоит в том, чтобы выбрать лучшие K функций, для некоторых заданных k.
Это может быть просто, но я не понимаю, как получить индексы выбранных функций в таком сценарии.
по обычному сценарию я мог бы сделать что-то подобное:
anova_filter = SelectKBest(f_classif, k=10)
anove_filter.fit_transform(data.X, data.Y)
anova_filter.get_support()
но в сценарии с несколькими метками мои размеры меток равны #samples X #unique_labels, поэтому fit и fit_transform выдают следующее исключение: ValueError: неправильная форма ввода
что имеет смысл, потому что он ожидает метки измерения [#samples]
в сценарии с несколькими метками имеет смысл сделать что-то подобное:
clf = Pipeline([('f_classif', SelectKBest(f_classif, k=10)),('svm', LinearSVC())])
multiclf = OneVsRestClassifier(clf, n_jobs=-1)
multiclf.fit(data.X, data.Y)
но тогда объект, который я получаю, имеет тип sklearn.multiclass.OneVsRestClassifier, у которого нет функции get_support. Как получить обученную модель SelectKBest, когда она используется во время конвейера?
1 ответ
То, как вы его настроите, будет один SelectKBest для каждого класса. Это то, что вы хотели? Вы можете получить их через
multiclf.estimators_[i].named_steps['f_classif'].get_support()
Если вы хотите один выбор функций для всех моделей OvR, вы можете сделать
clf = Pipeline([('f_classif', SelectKBest(f_classif, k=10)),
('svm', OneVsRestClassifier(LinearSVC()))])
и получить единый выбор функции с
clf.named_steps['f_classif'].get_support()