Como selecionar rapidamente variáveis ​​importantes de um conjunto de dados muito grande?


9

Eu tenho um conjunto de dados com cerca de 2.000 variáveis ​​binárias / 200.000 linhas e estou tentando prever uma única variável dependente binária. Meu principal objetivo, neste estágio, não é obter precisão de previsão, mas identificar quais dessas variáveis ​​são preditores importantes. Gostaria de reduzir o número de variáveis ​​no meu modelo final para cerca de 100.

Existe uma maneira relativamente rápida de obter as variáveis ​​mais importantes? randomForest parece demorar muito tempo.

Não preciso usar todas as 200.000 observações, portanto a amostragem é uma opção em cima da mesa.


Por preditores "importantes" em vez de "precisos", você quer dizer que deseja encontrar os melhores candidatos para explicar o resultado e ajudá-lo a construir uma teoria? Nesse caso, 100 variáveis ​​explicativas são um número muito grande - proibitivamente grande. Teoria-construção e verdadeira explicação (em vez de mera previsão) provavelmente exigiria que você reduzir o número de X do que 10 ou 15.
rolando2

2
@ rolando2 Em algumas aplicações, 100 não é grande. Por exemplo, a literatura sobre acessibilidade à banda larga de alta velocidade aponta para aproximadamente 150 variáveis ​​(dentre muitas centenas analisadas) e todas elas são razoáveis: elas se relacionam à facilidade de engenharia (terreno, tipo de rocha, clima etc.), à economia (SES, etc.), à demografia, à geometria da infra-estrutura de transporte local, à política (clima tributário e comercial), etc. Acredito que muitos modelos econômicos da mesma forma podem incluir muitas centenas de variáveis ​​teoricamente importantes.
whuber

@whuber - Estou pensando no seu ponto ... Você concorda que é preciso um analista incomum, dedicado, talentoso e experiente para resolver os papéis causais (e não apenas preditivos) desempenhados por tantas variáveis?
Rolando2

@rolando Claro. 2000 variáveis ​​é muito trabalho!
whuber

Respostas:


6

Você pode começar com um filtro Univariate simples e usar a validação cruzada para decidir quais variáveis ​​manter. A sbffunção no caretpacote para R é realmente útil. Você pode ler mais sobre isso aqui , começando na página 19.


Obrigado. Acabei de ler o artigo e parece uma abordagem sólida. No entanto, estou com alguns problemas de memória no meu sistema de memória de 64 bits e 4 MB.
DevX 4/10/11

11
@ DevX: Se você tiver muitos dados, tente coletar uma amostra e escolher variáveis ​​com base na amostra?
Zach

13

Isso soa como um problema adequado para laços e amigos que fazem encolhimento e seleção de variáveis. Os Elementos de Aprendizagem Estatística descrevem laço e rede elástica para regressão e, o que é mais relevante para esse problema, regressão logística.

Os autores do livro disponibilizaram uma implementação eficiente do laço e da rede elástica como um pacote R chamado glmnet . Eu já usei esse pacote para análise de dados binários com matrizes de aproximadamente 250.000 linhas, embora um pouco menos de colunas, mas realmente executando regressões de todas as colunas em relação a todas as outras colunas. Se a matriz de dados também for escassa, a implementação também poderá tirar vantagem disso, e acredito que o método possa realmente funcionar para o conjunto completo de dados dos OPs. Aqui estão alguns comentários sobre o laço:

  • Lasso atinge a seleção de variáveis ​​usando uma função de penalidade que não é suave (the -norm), que geralmente resulta em estimativas de parâmetros com alguns parâmetros exatamente iguais a 0. Quantos parâmetros diferentes de zero são estimados e quanto os parâmetros diferentes de zero são reduzidos, é determinado por um parâmetro de ajuste. A eficiência da implementação no glmnet depende muito do fato de que, para uma grande penalidade, apenas alguns parâmetros são diferentes de 0.1
  • A seleção do parâmetro de ajuste geralmente é feita por validação cruzada, mas mesmo sem a etapa de validação cruzada, o método pode fornecer uma boa sequência de variáveis ​​selecionadas indexadas pelo parâmetro de penalidade.
  • O lado negativo, para a seleção de variáveis, é que o laço pode ser instável na seleção de variáveis, em particular, se elas estiverem um pouco correlacionadas. A penalidade líquida elástica mais geral foi inventada para melhorar essa instabilidade, mas não resolve o problema completamente. Laço adaptável é outra idéia para melhorar a seleção de variáveis ​​para o laço.
  • A seleção de estabilidade é um método geral sugerido por Meinshausen e Bühlmann para obter maior estabilidade das variáveis ​​selecionadas com métodos como o laço. Requer vários ajustes em subamostras do conjunto de dados e, como tal, é muito mais exigente em termos de computação.
  • Uma maneira razoável de pensar no laço é como um método para gerar um conjunto unidimensional de modelos "bons", que variam de um modelo de variável única a um modelo mais complicado (não necessariamente incluindo todas as variáveis) parametrizado pelo parâmetro de penalidade. Por outro lado, os filtros univariados produzem uma seleção ou pedido apenas de bons modelos de variável única.

Para Python, há uma implementação no scikit-learn de métodos como laço e rede elástica.


Como uma noção adicionado, se o número de potenciais foguetes preditores, como no GWAS, você poderia fazer algo assim neste artigo para pré-seleção: análise de associação em todo o genoma por lasso regressão logística penalizada
Nick Sabbe

@ NickSabbe, obrigado por esta referência. É muito útil. No contexto do GWAS, e provavelmente também em outros contextos com um grande número de preditores correlacionados, ouvi Sylvia Richardson recomendar a seleção de modelos bayesianos com base, por exemplo, em algumas comparações com a seleção de estabilidade. Os cálculos do MCMC eram realmente exigentes.
NRH 04/10

Acho que vale a pena enfatizar mais o laço adaptável, pois é fácil de implementar (quase apenas duas chamadas em vez de uma para glmnetR). Outra opção é Thresholding the Lasso, que também é bastante simples de implementar. Consulte a seção 2.9 de springer.com/gp/book/9783642201912 .
Benjamin Christoffersen

2

Você pode fazer um teste de associação de regressão logística / qui-quadrado para cada variável e reter apenas aqueles que têm um valor p menor que algum valor, digamos .2.


4
Para ter uma idéia de como essa recomendação pode ser executada, considere um caso em que existem 100 (digamos) preditores importantes (altamente correlacionados com a variável dependente) e o restante não esteja completamente relacionado à variável dependente e entre si. Reter aqueles com valores-p menores que 0,2 garante que você terá aproximadamente 100 + 0,2 * (2000-100) = 480 variáveis, das quais 380 são inúteis. Para conjuntos de dados pequenos, essa abordagem às vezes é usada como uma tela inicial rápida, mas realmente não pode ser seriamente considerada aqui.
whuber

Bom ponto @whuber. Você precisaria definir seu nível de alfa muito mais baixo para reter cerca de 100, mas poderá perder variáveis ​​que só podem afetar o ajuste de outras pessoas. No entanto, passar de 2000 a 480 poderia ser mais gerenciável na execução de algo como florestas aleatórias.
Glen

Você está certo, há mérito nessa triagem - se funcionar corretamente. 480 é uma redução, mas há problemas adicionais com a possibilidade de altas correlações entre todas as 2000 variáveis ​​originais. Isso pode fazer com que uma ou todas as 100 variáveis ​​corretas não sejam mantidas, conforme ilustrado em algumas das respostas a uma pergunta relacionada .
whuber
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.