Estou trabalhando no problema com muitos recursos e o treinamento dos meus modelos leva muito tempo. Eu implementei o algoritmo de seleção direta para escolher os recursos.
No entanto, eu queria saber se o scikit-learn tem seleção direta / algoritmo de regressão gradual?
feature-selection
scikit-learn
Maksud
fonte
fonte
Respostas:
Não, o sklearn parece não ter um algoritmo de seleção direta. No entanto, ele fornece eliminação de recurso recursivo, que é um algoritmo de eliminação de recurso ganancioso semelhante à seleção sequencial para trás. Veja a documentação aqui:
http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFE.html
fonte
coef_
interface. Isso excluiria o método baseado em árvore, etc. No entanto, acho que o que o @Maksud pediu é o que é descrito em "Uma introdução ao aprendizado estatístico" de James, no qual os recursos são recursivamente adicionados / removidos por sua importância, que é quantificada pela validação. . Isso permite a seleção de recursos em todos os tipos de modelos, não apenas nos paramétricos lineares.O Sklearn TEM um algoritmo de seleção direta, embora não seja chamado assim no scikit-learn. O método de seleção de recurso chamado F_regression no scikit -learn sequencialmente incluirá recursos que melhoram o modelo, até que haja
K
recursos no modelo (K é uma entrada).Começa por regressão dos rótulos de cada recurso individualmente e depois observando qual recurso melhorou o modelo ao máximo usando a estatística-F. Em seguida, incorpora o recurso vencedor no modelo. Em seguida, ele percorre os recursos restantes para encontrar o próximo recurso que melhor aprimora o modelo, novamente usando a estatística F ou o teste F. Isso é feito até que haja recursos K no modelo.
Observe que os recursos restantes correlacionados aos recursos incorporados ao modelo provavelmente não serão selecionados, pois não se correlacionam com os resíduos (embora possam se correlacionar bem com os rótulos). Isso ajuda a proteger contra a multicolinearidade.
fonte
O Scikit-learn de fato não suporta regressão gradual. Isso porque o que é comumente conhecido como 'regressão stepwise' é um algoritmo baseado em valores-p dos coeficientes de regressão linear, e o scikit-learn evita deliberadamente a abordagem inferencial do modelo de aprendizagem (teste de significância, etc.). Além disso, o OLS puro é apenas um dos numerosos algoritmos de regressão e, do ponto de vista do aprendizado do scikit, não é muito importante nem um dos melhores.
No entanto, existem alguns conselhos para quem ainda precisa de um bom caminho para a seleção de recursos com modelos lineares:
ElasticNet
ouLasso
.StandardScaler
e, em seguida, encomende-os apenas pormodel.coef_
. Para covariáveis perfeitamente independentes, é equivalente à classificação por valores-p. A turmasklearn.feature_selection.RFE
fará isso por você eRFECV
até avaliará o número ideal de recursos.statsmodels
mlxtend
pacote compatível com o scikit-learn suporta essa abordagem para qualquer estimador e qualquer métrica.statsmodels
, pois este pacote calcula valores de p para você. Uma seleção básica para frente e para trás pode ser assim:`` ``
Este exemplo imprimiria a seguinte saída:
fonte
De fato, existe um bom algoritmo chamado "Forward_Select" que usa modelos Stats e permite que você defina sua própria métrica (AIC, BIC, Adjusted-R-Squared ou o que você quiser) para adicionar progressivamente uma variável ao modelo. O algoritmo pode ser encontrado na seção de comentários desta página - role para baixo e você o verá próximo à parte inferior da página.
https://planspace.org/20150423-forward_selection_with_statsmodels/
Eu acrescentaria que o algoritmo também possui um recurso interessante: você pode aplicá-lo a problemas de classificação ou regressão! Você apenas tem que contar.
Experimente e veja por si mesmo.
fonte
Na verdade, o sklearn não possui um algoritmo de seleção direta, embora uma solicitação pull com uma implementação de seleção direta de recursos aguarde no repositório Scikit-Learn desde abril de 2017.
Como alternativa, há uma seleção anterior e um passo à frente no mlxtend . Você pode encontrar o documento no Seletor de recursos sequenciais
fonte