Estou tentando fazer previsões usando um modelo aleatório de floresta em R.
No entanto, recebo erros, pois alguns fatores têm valores diferentes no conjunto de testes e no conjunto de treinamento. Por exemplo, um fator Cat_2
possui valores 34, 68, 76
, etc., no conjunto de testes que não aparecem no conjunto de treinamento. Infelizmente, não tenho controle sobre o conjunto de testes ... devo usá-lo como está.
Minha única solução alternativa foi converter os fatores problemáticos novamente em valores numéricos, usando as.numeric()
. Ele funciona , mas não estou muito satisfeito, uma vez que estes valores são códigos que não têm nenhum senso numérico ...
Você acha que haveria outra solução, eliminar os novos valores do conjunto de testes? Mas sem remover todos os outros valores de fator (digamos 1, 2, 14, 32
, valores etc.) que estão no treinamento e no teste, e contém informações potencialmente úteis para previsões.
fonte
Respostas:
Se o conjunto de testes possui muitos desses pontos com novos valores de fator, não tenho certeza de qual é a melhor abordagem. Se for apenas um punhado de pontos, você poderá se safar de algo obsceno, como tratar os níveis de fatores errantes como dados ausentes e imputá-los com a abordagem que achar melhor. A implementação do R tem duas maneiras de imputar dados ausentes, basta definir esses níveis de fator como NA para indicar que eles estão ausentes.
fonte
King e Bonoit , esse trecho pode ser útil para harmonizar níveis:
Também imprime quais atributos foram alterados. Não encontrei uma boa maneira de escrever com mais elegância (com ldply ou algo assim). Todas as dicas são apreciadas.
fonte
Aqui está um código que escrevi que aborda a resposta de @ King acima. Corrigiu o erro:
fonte
O conjunto de teste e treinamento deve ser combinado como um conjunto e depois alterar os níveis do conjunto de treinamento. Meus códigos são:
Isso funciona em todos os casos em que o número de níveis em teste é mais ou menos que o treinamento.
fonte
Eu tenho uma solução ruim quando uso randomForest em R. Provavelmente não é teoricamente bom, mas deixa tudo funcionando.
ou do outro modo. Basicamente, ele apenas informa ao R que é um valor válido, pois existem 0 casos; então pare de me incomodar com o erro.
Não sou inteligente o suficiente para codificá-lo, de modo que ele execute automaticamente a ação para todos os recursos categóricos. Envie-me o código, se você souber como ...
fonte
Tenho certeza de que você já teria pensado nisso, se esse fosse o caso, mas se o conjunto de testes tiver valores reais e você estiver usando o conjunto de testes para fins de validação cruzada, re-divida o quadro de dados em quadros de dados de treinamento e teste onde os dois estão equilibrados com esses fatores, evitaria o seu problema. Esse método é conhecido popularmente como validação cruzada estratificada .
fonte