Я работаю над проблемой со слишком многими функциями, и обучение моих моделей занимает слишком много времени. Я реализовал алгоритм прямого выбора для выбора функций.
Однако мне было интересно, есть ли у scikit-learn алгоритм прямого выбора / пошаговой регрессии?
Ответы:
Нет, у sklearn нет алгоритма прямого выбора. Тем не менее, он обеспечивает рекурсивное удаление признаков, которое является жадным алгоритмом удаления признаков, подобным последовательному обратному выбору. Смотрите документацию здесь:
http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFE.html
источник
coef_
интерфейс. Это исключило бы метод на основе дерева и т. Д. Однако, я думаю, что @Maksud попросил то, что описано в «Введение в статистическое обучение» Джеймсом, в котором функции рекурсивно добавляются / удаляются по их важности, которую он оценивает с помощью точности набора проверки. , Это позволяет выбирать функции для всех типов моделей, а не только для линейных параметрических.Склеарн имеет алгоритм прямого выбора, хотя в scikit-learn он не называется. Метод выбора функции, называемый F_regression в scikit-learn, будет последовательно включать функции, которые улучшают модель в наибольшей степени, до тех пор, пока
K
в модели не появятся элементы (K является входом).Он начинается с регрессии меток на каждом объекте в отдельности, а затем наблюдения за тем, какой объект улучшил модель, используя F-статистику. Затем он включает в себя функцию победы в модели. Затем он перебирает оставшиеся функции, чтобы найти следующую функцию, которая максимально улучшает модель, снова используя F-статистику или F-тест. Это происходит до тех пор, пока в модели не появятся K функций.
Обратите внимание, что остальные функции, которые связаны с функциями, включенными в модель, вероятно, не будут выбраны, поскольку они не коррелируют с остатками (хотя они могут хорошо коррелировать с метками). Это помогает защититься от мультиколлинеарности.
источник
Scikit-Learn действительно не поддерживает ступенчатую регрессию. Это потому, что то, что обычно известно как «ступенчатая регрессия», представляет собой алгоритм, основанный на p-значениях коэффициентов линейной регрессии, и scikit-learn намеренно избегает логического подхода к обучению модели (тестирование значимости и т. Д.). Более того, чистый OLS является лишь одним из многочисленных алгоритмов регрессии, и с точки зрения scikit-learn он не является ни очень важным, ни одним из лучших.
Однако есть несколько советов для тех, кому все еще нужен хороший способ выбора функций с линейными моделями:
ElasticNet
илиLasso
.StandardScaler
, а затем упорядочить свои функции простоmodel.coef_
. Для совершенно независимых ковариат это эквивалентно сортировке по p-значениям. Классsklearn.feature_selection.RFE
сделает это за вас иRFECV
даже оценит оптимальное количество функций.statsmodels
mlxtend
, поддерживает этот подход для любой оценки и любого показателя.statsmodels
, поскольку этот пакет вычисляет p-значения для вас. Базовый выбор вперед-назад может выглядеть так:`` `
Этот пример напечатает следующий вывод:
источник
На самом деле есть хороший алгоритм под названием «Forward_Select», который использует Statsmodels и позволяет вам устанавливать свою собственную метрику (AIC, BIC, Adjusted-R-Squared или что угодно) для постепенного добавления переменной в модель. Алгоритм можно найти в разделе комментариев этой страницы - прокрутите вниз, и вы увидите его в нижней части страницы.
https://planspace.org/20150423-forward_selection_with_statsmodels/
Я хотел бы добавить, что алгоритм также имеет одну приятную особенность: вы можете применить его к задачам классификации или регрессии! Вы просто должны сказать это.
Попробуйте и убедитесь сами.
источник
На самом деле у sklearn нет алгоритма прямого выбора, хотя в апреле 2017 года в репозитории Scikit-Learn ожидается пул- запрос с реализацией прямого выбора функций.
В качестве альтернативы в mlxtend есть прямой и обратный выбор на один шаг вперед . Вы можете найти его документ в Sequential Feature Selector.
источник