2

Я ищу, чтобы выполнить выбор функции с помощью набора данных с несколькими метками, используя sklearn. Я хочу получить окончательный набор функций через ярлыки, которые я буду использовать в другом пакете обучения. Я планировал использовать метод, который я видел here, который выбирает соответствующие функции для каждой метки отдельно.Выбор нескольких ярлыков с использованием sklearn

from sklearn.svm import LinearSVC 
from sklearn.feature_selection import chi2, SelectKBest 
from sklearn.multiclass import OneVsRestClassifier 
clf = Pipeline([('chi2', SelectKBest(chi2, k=1000)), 
       ('svm', LinearSVC())]) 
multi_clf = OneVsRestClassifier(clf) 

я планирую извлечь индексы включенных функций, на этикетке, с помощью этого:

selected_features = [] 
for i in multi_clf.estimators_: 
    selected_features += list(i.named_steps["chi2"].get_support(indices=True)) 

Теперь мой вопрос, как я могу выбрать, какие выбраны функции, чтобы включить в мой последний модель? Я мог бы использовать каждую уникальную функцию (которая включала бы функции, которые были бы релевантны только для одной метки), или я мог бы сделать что-то, чтобы выбрать функции, которые были бы важны для большего количества меток.

Моя первоначальная идея - создать гистограмму количества меток, на которые была выбрана данная функция, и определить порог, основанный на визуальном осмотре. Я обеспокоен тем, что этот метод является субъективным. Существует ли более принципиальный способ выполнения выбора функций для многоуровневых наборов данных с использованием sklearn?

ответ

1

Согласно выводам в этом paper:

[...] Оценка особенности в зависимости от средней или максимальной хи-квадрат счет во всех этикетках, привело к большинству лучших классификаторов в то время как используя меньше возможностей.

Затем, для того, чтобы выбрать хорошее подмножество функций вам просто нужно сделать (что-то вроде) это:

from sklearn.feature_selection import chi2, SelectKBest 

selected_features = [] 
for label in labels: 
    selector = SelectKBest(chi2, k='all') 
    selector.fit(X, Y[label]) 
    selected_features.append(list(selector.scores_)) 

// MeanCS 
selected_features = np.mean(selected_features, axis=0) > threshold 
// MaxCS 
selected_features = np.max(selected_features, axis=0) > threshold 

Примечание: в коде выше, я предполагаю, что X является выходным некоторого текстового вектора (векторизованная версия текстов), а Y - это рамка данных pandas с одним столбцом на метку (поэтому я могу выбрать столбец Y[label]). Кроме того, существует пороговая переменная, которая должна быть исправлена ​​заранее.

0

http://scikit-learn.org/stable/modules/feature_selection.html

Существует множество вариантов, но SelectKBest и устранение Рекурсивной особенности является два достаточно популярными.

RFE работает, оставляя унифицирующие функции вне модели, а также переучивая и сравнивая результаты, так что функции, оставшиеся на конце, являются теми, которые обеспечивают наилучшую точность прогнозирования.

Что лучше всего сильно зависит от ваших данных и использования.

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

+0

Из того, что я понимаю, методы выбора объектов в sklearn для двоичных классификаторов. Вы можете получить выбранные функции для каждой метки отдельно, но мой вопрос заключается в том, как определить окончательный набор функций, которые работают на всех ярлыках принципиально. – user2589328

+0

Я не уверен, что понимаю, что вы имеете в виду. Например, SelectKBest является независимым от модели, и вы можете увидеть пример RFE, который показывает вам, как получить окончательный набор функций в документах. http: // scikit-learn.org/stable/auto_examples/feature_selection/plot_rfe_with_cross_validation.html # example-feature-selection-plot-rfe-with-cross-validation-py Кроме того, многие/большинство реализуют функцию преобразования, которая выберет наилучшие функции обучения с входов. – Chris

+0

Но этот последний набор функций для одного классификатора, правильно? Поскольку методы бинарной релевантности ломают проблему многовариантной классификации в ряд бинарных классификаций, этот окончательный набор функций соответствует только одному из моих многих меток. У меня будет набор функций, возвращаемый методами выбора объектов для каждой из моих отдельных меток, но я хочу объединить выбранные функции для создания набора функций, который хорошо работает для всех меток. – user2589328

Смежные вопросы