Estou usando o pacote randomForest no R (versão 2.13.1, versão 4.6-2 randomForest) para regressão e notei um viés significativo nos meus resultados: o erro de previsão depende do valor da variável de resposta. Valores altos são sub-previstos e valores baixos são super-previstos. Inicialmente, suspeitei que isso fosse uma consequência dos meus dados, mas o exemplo simples a seguir sugere que isso é inerente ao algoritmo de floresta aleatória:
n = 1000;
x1 = rnorm(n, mean = 0, sd = 1)
response = x1
predictors = data.frame(x1=x1)
rf = randomForest(x=predictors, y=response)
error = response-predict(rf, predictors)
plot(x1, error)
Eu suspeito que o viés depende da distribuição da resposta, por exemplo, se x1
for distribuído uniformemente, não haverá viés; se x1
for distribuído exponencialmente, o viés é unilateral. Essencialmente, os valores da resposta nas caudas de uma distribuição normal são discrepantes. Não é surpresa que um modelo tenha dificuldade em prever valores discrepantes. No caso de randomForest, é menos provável que um valor de resposta de magnitude extrema da cauda de uma distribuição acabe em uma folha terminal e seu efeito será eliminado na média do conjunto.
Observe que eu tentei capturar esse efeito em um exemplo anterior, "RandomForest na regressão linear R tails mtry". Este foi um mau exemplo. Se o viés no exemplo acima é realmente inerente ao algoritmo, segue-se que uma correção de viés pode ser formulada, dada a distribuição de resposta que se está tentando prever, resultando em previsões mais precisas.
Os métodos baseados em árvores, como florestas aleatórias, estão sujeitos ao viés de distribuição de respostas? Nesse caso, isso é conhecido anteriormente pela comunidade estatística e como é geralmente corrigido (por exemplo, um segundo modelo que utiliza os resíduos do modelo tendencioso como entrada)?
A correção de um viés dependente da resposta é difícil porque, por natureza, a resposta não é conhecida. Infelizmente, a resposta estimada / prevista geralmente não compartilha o mesmo relacionamento com o viés.
fonte
Respostas:
É perfeitamente como você suspeita - o fato de os nós das folhas conterem meios sobre algum conjunto de objetos torna qualquer modelo de árvore de regressão restringir a distribuição da resposta e impossibilitar qualquer extrapolação. O Ensemble, é claro, não ajuda nisso e, de fato, piora a situação.
A solução ingênua (e perigosa por causa do excesso de ajuste) é envolver o modelo em algum tipo de regressão clássica que redimensione a resposta à sua distribuição desejada.
A melhor solução é um dos modelos de árvore modelo na folha, como, por exemplo, o MOB no pacote de festa. A idéia aqui é que o particionamento do espaço de recurso deve terminar quando o problema for simplificado não para um valor simples (como na árvore comum), mas para uma relação simples (digamos linear) entre a resposta e alguns preditores. Agora, essa relação pode ser resolvida ajustando-se a um modelo simples que não perturbe a distribuição ou reduza valores extremos e poderá extrapolar.
fonte
Eu tive exatamente o mesmo problema com o RF condicional acessado através do pacote chocalho. Enviei um e-mail a Graham Williams (autor do chocalho), que gentilmente encaminhou minha consulta aos autores da floresta, que responderam e sugeriram jogar com dois parâmetros que na verdade não parecem ser referenciados em nenhum lugar da documentação do CRF, mas que, no entanto, pareciam abordar o problema, ou seja, minplit = 2 e minbucket = 1.
fonte
minsplit
,Você deve estimar o valor ideal de mtry e sampsize minimizando o "erro de validação cruzada" fora da amostra em uma grade de diferentes mtry, parâmetros de sampsize, para qualquer variável de resposta correspondente para um conjunto fixo de recursos e, em seguida, tirar conclusões- em termos de resultados. Você pode criar uma combinação dos parâmetros da grade usando expand.grid.
fonte