Estimativa de erro fora da bolsa para impulsionar?


9

Na Floresta Aleatória, cada árvore é cultivada em paralelo em uma amostra exclusiva dos dados. Como se espera que cada amostra do boostrap contenha cerca de 63% das observações exclusivas, isso deixa cerca de 37% das observações de fora, que podem ser usadas para testar a árvore.

Agora, parece que no Estochastic Gradient Boosting, também há uma semelhante à do RF:OOBerror

Se bag.fraction for definido como maior que 0 (0,5 é recomendado), o gbm calcula uma estimativa de out-of-bag da melhoria no desempenho preditivo. Ele avalia a redução no desvio nas observações não usadas na seleção da próxima árvore de regressão.

Fonte: Ridgeway (2007) , seção 3.3 (página 8).

Tenho problemas para entender como funciona / é válido. Digamos que estou adicionando uma árvore na sequência. Estou crescendo essa árvore em uma subamostra aleatória do conjunto de dados original. Eu poderia testar essa única árvore nas observações que não foram usadas para cultivá-la. Acordado. MAS , como o Boosting é seqüencial, estou usando a sequência inteira de árvores construídas até agora para fornecer uma previsão para essas observações deixadas de fora. E, há uma grande chance de que muitas das árvores anteriores já tenham visto essas observações. Então o modelo não está realmente sendo testado a cada rodada em observações invisíveis, como com RF, certo?

Então, como é que isso é chamado de estimativa de erro "pronto para uso"? Para mim, não parece estar "fora" de nenhuma sacola, já que as observações já foram vistas?


11
Veja a discussão aqui github.com/scikit-learn/scikit-learn/pull/1806 . Você não está sozinho em expressar preocupações da maneira como as estimativas OOB são calculadas.
mpiktas 16/09/2015

obrigado pelo link, mas infelizmente todos os colaboradores do tópico parecem estar tão perdidos quanto eu!
Antoine

11
Na verdade não. Consulte github.com/scikit-learn/scikit-learn/pull/2188 . Nesse commit, a pontuação OOB é alterada para aprimoramento OOB da maneira que o gbm faz. Não sei como essa ideia funciona com precisão, mas, pelo que coletei, a amostra oob da árvore atual é usada para calcular a melhoria do OOB. Como não consegui encontrar as fórmulas matemáticas, é necessário cavar o código gbm para ver como exatamente essa melhoria é calculada.
mpiktas 16/09/2015

@Antoine Pergunta realmente emocionante! foi encontrada uma resposta definitiva?
Soren Havelund Welling

11
Não, infelizmente. Algumas dicas são fornecidas pelos links acima (nos comentários), este tópico e este outro tópico . Isso está me deixando completamente louco. Algum dia alguém deve enviar um e-mail para o Dr. Friedman / Hastie ... Agradecemos sua atenção.
Antoine

Respostas:


2

Respondendo apenas parcialmente (e adicionando uma nova pergunta à sua pergunta).

A implementação do gbm em R http://www.rdocumentation.org/packages/gbm/functions/gbm possui dois parâmetros para ajustar a falta de bagagem.

a) train.fractiondefinirá uma proporção dos dados que são usados ​​para treinar todas as árvores e, assim, 1 - train.fractionserá verdadeiro OOB (out-of-bag).

b) bag.fractiondefinirá a proporção de dados de treinamento a serem usados ​​na criação da próxima árvore no impulso. Portanto, pode haver alguns dados que nunca são usados ​​para a criação de qualquer árvore e eles podem realmente ser usados ​​como dados OOB. (Mas é improvável, veja a pergunta abaixo)

O que me leva à pergunta. Sua análise de 37% dos dados como sendo OOB é verdadeira para apenas UMA árvore. Mas a chance de haver dados que não sejam usados ​​em QUALQUER árvore é muito menor - (ele deve estar no OOB para todas árvores - meu entendimento é que cada árvore faz seu próprio bootstrap). Portanto, em RandomForests, é muito improvável que haja qualquer OOB para testar a floresta. E, no entanto, a implementação randomForest no R (baseada no código original de Breiman) fala muito sobre OOB (por exemplo, os dados do resultado e consulte http://www.rdocumentation.org/packages/randomForest/functions/randomForest ) n t r e e0,37ntreesntreeerr.rateconfusion

Não sei como responder a isso (e agradeço (+1) por fazer a pergunta e me fazer perceber que não entendo esse aspecto das florestas aleatórias). A solução possível é que exista apenas um bootstrap - e todas as árvores são construídas a partir dele - mas, tanto quanto eu sei, não é o caso.


Para RF / ensacamento, não há problema: em qualquer etapa do processo de construção do conjunto, qualquer observação no conjunto de dados original pode ser fornecida a todas as árvores que foram treinadas em amostras de boostrap sem essa observação. Aproximadamente um terço (~ 37%) do número total de árvores atenderá a essa condição. Além disso, ao permitir que essas árvores votem e obtenham a classe mais popular, uma previsão pode ser obtida para a observação. O número de vezes que o difere de previsão do verdadeiro rótulo de observação médias ao longo de todas as classes, dá a estimativa de erro fora-de-saco
Antoine

11
Além disso, parece que o que fornece a capacidade de estimativa de erro OOB no Boosting não vem do train.fractionparâmetro (que é apenas um recurso da função gbm, mas não está presente no algoritmo original), mas realmente do fato de que apenas uma subamostra do Os dados são usados ​​para treinar cada árvore na sequência, deixando as observações de fora (que podem ser usadas para testes). O que remonta à minha pergunta original. Como essas observações podem ser usadas para testes, uma vez que provavelmente foram vistas muitas vezes por muitas árvores anteriores na sequência?
Antoine

esqueci de mencionar que cada árvore RF é realmente construído a partir de sua própria amostra, única inicialização dos dados originais
Antoine

@ user2835597 obrigado por suas explicações sobre RF. Portanto, um erro OOB de uma RF está realmente avaliando apenas 1/3 das árvores da floresta (o que não me parece muito útil). Bem, aprendendo algo todos os dias.
Jacques Wainer

De qualquer forma, o parâmetro train.fraction parece ser a resposta para sua pergunta. A implementação sklearn também tem um parâmetro similar, a subamostra (veja scikit-learn.org/stable/modules/generated/...
Jacques Wainer

-2

Eu acredito que eles fazem uma estimativa fora do saco em cada etapa. Como os resultados de todas as etapas são adicionados (com coeficientes), os erros OOB também podem ser adicionados com os mesmos coeficientes.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.