Estou usando o pacote de festa no R com 10.000 linhas e 34 recursos, e alguns recursos de fator têm mais de 300 níveis. O tempo de computação é muito longo. (Demorou 3 horas até agora e ainda não terminou.)
Quero saber quais elementos têm um grande efeito no tempo de computação de uma floresta aleatória. Está tendo fatores com muitos níveis? Existem métodos otimizados para melhorar o tempo de computação de RF?
r
random-forest
Chenghao Liu
fonte
fonte
Como randomForest é uma coleção de carros independentes treinados em um subconjunto aleatório de recursos e registros, ele se presta à paralelização. A
combine()
função no pacote randomForest unirá florestas treinadas independentemente. Aqui está um exemplo de brinquedo. Como afirma a resposta do @mpq, você não deve usar a notação de fórmula, mas passar um quadro de dados / matriz de variáveis e um vetor de resultados. Eu descaradamente tirei isso dos documentos.Passei a função de combinação randomForest para o parâmetro .combine de nome semelhante (que controla a função na saída do loop. O lado negativo é que você não obtém taxa de erro OOB ou importância tragicamente mais variável.
Editar:
Depois de reler o post, percebo que não falo nada sobre a questão dos 34 ou mais fatores. Uma resposta não-pensada poderia ser representá-los como variáveis binárias. Esse é cada fator uma coluna que é codificada com fator de nível 0/1 sobre sua presença / não presença. Ao fazer uma seleção de variáveis sobre fatores sem importância e removê-los, você pode impedir que o espaço do recurso fique muito grande.
fonte
Eu sugeriria alguns links:
1) O número reduzido de níveis de uma variável de fator é um link para uma pergunta
stackoverflow
para lidar com um problema semelhante ao usar orandomForest
pacote. Especificamente, trata do uso apenas dos níveis que ocorrem com mais frequência e da atribuição de um novo nível para todos os outros níveis que ocorrem com menos frequência.A idéia veio daqui: 2009 KDD Cup Slow Challenge . Os dados para esta competição tinham muitos fatores com vários níveis e discutem alguns dos métodos usados para reduzir os dados de 50.000 linhas por 15.000 colunas para rodar em um laptop com 2 núcleos / 2 GB de RAM.
Minha última sugestão seria analisar a execução do problema, como sugerido acima, em paralelo em uma instância do Amazon EC2 com alta CPU.
fonte
Não consigo falar com a velocidade de algoritmos específicos em R, mas deve ser óbvio o que está causando um longo tempo de computação. Para cada árvore em cada ramo, o CART está procurando a melhor divisão binária. Portanto, para cada um dos 34 recursos, mais se observa as divisões fornecidas por cada um dos níveis das variáveis. Multiplique o tempo de execução de cada divisão em uma árvore pelo número de galhos na árvore e depois multiplique pelo número de árvores na floresta e você terá um longo tempo de execução. Quem sabe? Talvez, mesmo com um computador rápido, isso possa levar anos para terminar?
A melhor maneira de acelerar as coisas, eu acho, seria agrupar alguns níveis juntos, de modo que cada variável caia para talvez 3 a 5 níveis em vez de até 300. É claro que isso depende de ser capaz de fazer isso sem perder importantes informações em seus dados.
Depois disso, talvez você possa ver se existe algum algoritmo inteligente que pode acelerar o tempo de pesquisa para a divisão em cada nó das árvores individuais. pode ser que em uma árvore específica a pesquisa dividida seja uma repetição de uma pesquisa já feita para uma árvore anterior. Portanto, se você pode salvar as soluções das decisões divididas anteriores e identificar quando está repetindo, talvez essa estratégia possa economizar um pouco de tempo de computação.
fonte