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é:
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
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 b
Se 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 ff
em 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?
fonte
Respostas:
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.
fonte
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:
Portanto, meu conselho é seguir essas diretrizes, pois certamente vale a pena se seus dados forem enormes.
fonte
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
fonte