Eu tenho um conjunto de dados com cerca de 70 variáveis que eu gostaria de reduzir. O que estou procurando fazer é usar o CV para encontrar as variáveis mais úteis da seguinte maneira.
1) Selecione aleatoriamente digamos 20 variáveis.
2) Use stepwise
/ LASSO
/ lars
/ etc para escolher as variáveis mais importantes.
3) Repita ~ 50x e veja quais variáveis são selecionadas (não eliminadas) com mais freqüência.
Isso é parecido com o que um randomForest
faria, mas o rfVarSel
pacote parece funcionar apenas para fatores / classificação e eu preciso prever uma variável dependente contínua.
Eu estou usando R, então qualquer sugestão seria idealmente implementada lá.
Respostas:
Eu acredito que o que você descreve já está implementado no
caret
pacote. Veja arfe
função ou a vinheta aqui: http://cran.r-project.org/web/packages/caret/vignettes/caretSelection.pdfAgora, tendo dito isso, por que você precisa reduzir o número de recursos? De 70 a 20 não é realmente uma ordem de magnitude decrescente. Eu acho que você precisaria de mais de 70 recursos antes de ter uma firme convicção de que alguns deles realmente e verdadeiramente não importam. Mas, novamente, é aí que entra um prior subjetivo, suponho.
fonte
Não há razão para que a frequência de seleção de variáveis forneça informações que você ainda não obtém da aparente importância das variáveis no modelo inicial. Isso é essencialmente uma repetição da significância estatística inicial. você também está adicionando um novo nível de arbitrariedade ao tentar decidir um ponto de corte para a frequência de seleção. A seleção de reamostragem de variáveis está seriamente danificada pela colinearidade, além de outros problemas.
fonte
Revisei minha resposta hoje cedo. Agora eu gerei alguns dados de exemplo nos quais executar o código. Outros sugeriram, com razão, que você use o pacote de intercalação, com o qual eu concordo. Em alguns casos, no entanto, você pode achar necessário escrever seu próprio código. Abaixo, tentei demonstrar como usar a função sample () em R para atribuir observações aleatoriamente às dobras de validação cruzada. Também uso loops para executar pré-seleção variável (usando regressão linear univariada com um valor de corte branda de 0,1) e construção de modelo (usando regressão stepwise) nos dez conjuntos de treinamento. Em seguida, você pode escrever seu próprio código para aplicar os modelos resultantes às dobras de validação. Espero que isto ajude!
Antes de executar a validação cruzada, é importante que você leia sobre o uso adequado. Essas duas referências oferecem excelentes discussões sobre validação cruzada:
Esses documentos são voltados para bioestatísticos, mas seriam úteis para qualquer pessoa.
Além disso, lembre-se de que o uso da regressão passo a passo é perigoso (embora o uso da validação cruzada deva ajudar a aliviar o ajuste excessivo). Uma boa discussão sobre regressão gradual está disponível aqui: http://www.stata.com/support/faqs/stat/stepwise.html .
Deixe-me saber se você tiver quaisquer perguntas adicionais!
fonte
Acabei de encontrar algo legal por aqui: http://cran.r-project.org/web/packages/Causata/vignettes/Causata-vignette.pdf
Tente isso talvez ao usar o pacote glmnet
fonte