Primeiro passo para big data (

21

Suponha que você esteja analisando um enorme conjunto de dados na ordem de bilhões de observações por dia, em que cada observação possui algumas milhares de variáveis ​​numéricas e categoriais esparsas e possivelmente redundantes. Digamos que exista um problema de regressão, um problema de classificação binária desequilibrada e uma tarefa de "descobrir quais preditores são mais importantes". Meu pensamento sobre como abordar o problema é:

Ajuste algum modelo preditivo em subamostras progressivamente maiores e maiores (aleatórias) dos dados até:

  1. Ajustar e validar cruzadamente o modelo se torna computacionalmente difícil (por exemplo, excessivamente lento no meu laptop, R fica sem memória etc.), OU

  2. Os valores RMSE de treinamento e teste ou precisão / recall estabilizam.

Se os erros de treinamento e teste não se estabilizarem (1.), use um modelo mais simples e / ou implemente versões multicore ou multinode do modelo e reinicie desde o início.

Se os erros de treinamento e teste estabilizarem (2.):

  • Se (ou seja, ainda posso executar algoritmos no X_ {subconjunto}, pois ele ainda não é muito grande), tente melhorar o desempenho expandindo o espaço de recursos ou usando um modelo mais complexo e reiniciando desde o início.X s u bNsvocêbsetNXsvocêbset

  • Se Nsvocêbset for 'grande' e executar análises adicionais forem caras, analise a importância e o final da variável.

Eu pretendo usar pacotes como biglm, speedglm, multicore, e ffem R inicialmente, e depois usar algoritmos mais complicados e / ou vários nós (no EC2) como necessário.

Isso soa como uma abordagem razoável e, em caso afirmativo, você tem algum conselho ou sugestão específica? Caso contrário, o que você tentaria para um conjunto de dados desse tamanho?

bloqueado
fonte
1
Isso soa como uma abordagem razoável. Encontrei uma conversa sobre uma abordagem semelhante: youtube.com/watch?v=X9YVSDWQokQ .
Alfa
@dcl: Obrigado - a ideia é um método de seleção de variáveis ​​não linear, agradável e computacionalmente barato, que será bem paralelo (embora seja univariado). Talvez eu tente, porque é rápido e muito simples de codificar. Eu estava originalmente pensando em usar esse algoritmo muito legal: code.google.com/p/rf-ace .
Bloqueado 17/04/12
@alfa: Eu realmente gosto dessa idéia! Usando um teste seqüencial em subconjuntos cada vez maiores de dados para eliminar sequencialmente os meta-parâmetros de pior desempenho. Isso deve melhorar bastante. Obrigado! ps aqui está uma versão em papel da palestra: biglearn.org/files/papers/biglearn2011_submission_2.pdf
lockedoff

Respostas:

2

Você deve verificar os métodos online de regressão e classificação para conjuntos de dados desse tamanho. Essas abordagens permitem usar todo o conjunto de dados sem precisar carregá-lo na memória.

Você também pode conferir o Vowpal Wabbit (VW):

https://github.com/JohnLangford/vowpal_wabbit/wiki

Ele usa um método on-line fora do núcleo, portanto, deve ser capaz de lidar com um conjunto de dados desse tamanho. Você pode fazer regressão e classificação e ele suporta formatos esparsos. Você também pode executar versões penalizadas (por exemplo, regressão / classificação do tipo laço) na VW, o que poderia melhorar a precisão do seu modelo.

user1489497
fonte
2

Eu sugeriria o uso do Hadoop e RMR (um pacote específico para Map Reduce in R). Com essa estratégia, você pode executar grandes conjuntos de dados em computadores com commodities com uma configuração acessível (provavelmente em duas horas você terá o Hadoop e o RMR (RHadoop) instalados e em execução).

De fato, se você tiver mais de um computador, poderá criar um cluster, reduzindo o tempo de processamento.

Dou-lhe alguns links para apoiar a minha sugestão:

  • Este link levará você a um tutorial para instalar o Hadoop em um cluster de nó único (um computador).
  • Este link e este link mostrarão como instalar o RMR no seu cluster Hadoop.
  • E, finalmente, aqui você pode encontrar um exemplo de regressão logística por meio do RHadoop.

Portanto, meu conselho é seguir essas diretrizes, pois certamente vale a pena se seus dados forem enormes.

a.desantos
fonte
0

Este é mais um comentário do que uma resposta, mas não posso publicá-lo como um comentário (requer 50 repetições) ..

Você tentou usar o PCA no seu conjunto de dados? Isso pode ajudá-lo a reduzir o espaço da variável e encontrar uma possível direção na qual a variável exclui do seu modelo de regressão. Fazendo isso, o modelo será mais fácil de calcular. Aqui você encontra uma discussão interessante sobre o uso do PCA com variáveis ​​categóricas: A análise de componentes principais pode ser aplicada a conjuntos de dados que contêm uma mistura de variáveis ​​contínuas e categóricas?

Além disso, imagino que você esteja usando R por vários motivos (também uso R), mas pode ser mais fácil usar um software como SAS ou STATA. Eles têm melhor desempenho com big data e você não precisa lidar com computação paralela e com vários núcleos.

Por fim, tente pensar se faz sentido usar o máximo de linhas possível do seu conjunto de dados. Este é um conjunto de dados da população, um conjunto de dados quase populacional ou um conjunto de dados amostrado? Você pode obter melhores resultados com uma boa amostragem no seu conjunto de dados do que usando os dados completos. Dê uma olhada neste post: A amostragem é relevante no momento do 'big data'?

Espero que isto ajude

pietrop
fonte