Gradient boosting

Origem: Wikipédia, a enciclopédia livre.

O gradient boosting é uma técnica de aprendizado de máquina para problemas de regressão e classificação, que produz um modelo de previsão na forma de um ensemble de modelos de previsão fracos, geralmente árvores de decisão. Ela constrói o modelo em etapas, como outros métodos de boosting, e os generaliza, permitindo a otimização de uma função de perda diferenciável arbitrária.

A ideia de gradient boosting originou-se na observação de Leo Breiman de que o boosting pode ser interpretado como um algoritmo de otimização em uma função de custo adequada.[1] Algoritmos explícitos de gradient boosting de regressão foram desenvolvidos posteriormente por Jerome H. Friedman,[2][3] simultaneamente com a perspectiva mais geral de gradient boosting funcional de Llew Mason, Jonathan Baxter, Peter Bartlett e Marcus Frean.[4][5] Os dois últimos trabalhos introduziram a visão dos algoritmos de boosting como algoritmos iterativos de descida de gradiente funcionais, ou seja, algoritmos que otimizam uma função de custo sobre um espaço de funções, escolhendo iterativamente uma função (hipótese fraca) que aponta na direção oposta do gradiente. Essa visão dos algoritmos de boosting em termos de gradientes funcionais levou ao desenvolvimento de algoritmos de boosting em muitas áreas do aprendizado de máquina e da estatística além da regressão e classificação.

Introdução informal[editar | editar código-fonte]

(Esta seção segue a exposição de gradient boosting por Li.[6] )

Como outros métodos de boosting, o gradient boosting combina "modelos de aprendizado" fracos em um único modelo de aprendizagem forte, de maneira iterativa. Isso pode ser explicado mais facilmente no contexto da regressão por mínimos quadrados, em que o objetivo é "ensinar" um modelo a prever valores da forma minimizando o erro médio quadrático em que o índice percorre algum conjunto de treinamento de tamanho dos valores reais da variável de saída

  • o valor previsto
  • o valor real
  • o número de amostras em

Agora, vamos considerar um algoritmo de gradient boosting com etapas. Em cada etapa ( ) de gradient boosting, considere algum modelo imperfeito (para um baixo, tal modelo pode simplesmente retornar isto é, a média de ) Para melhorar o algoritmo deve adicionar algum novo estimador, Portanto,

ou, equivalentemente,

Portanto, o gradient boosting ajustará h ao resíduo Como em outras variantes de boosting, cada tenta corrigir os erros de seu antecessor Uma generalização dessa ideia para funções de perda que não sejam a de erro quadrático, e para problemas de classificação e ordenação segue da observação de que os resíduos para um determinado modelo são os opostos dos gradientes (em relação a ) da função de perda de erros quadráticos Portanto, o gradient boosting é um algoritmo de descida de gradiente e generalizá-lo implica em "conectar" uma função de perda diferente e seu gradiente.

Algoritmo[editar | editar código-fonte]

Em muitos problemas de aprendizado supervisionado, há uma variável de saída y e um vetor de variáveis de entrada x descritas por meio de uma distribuição de probabilidade conjunta Usando um conjunto de treinamento de valores conhecidos de x e valores correspondentes de y, o objetivo é encontrar uma aproximação para uma função que minimiza o valor esperado de alguma função de perda especificada

O método de gradient boosting assume um y com valores reais e busca uma aproximação na forma de uma soma ponderada de funções de alguma classe chamada de modelos de aprendizagem básicos (ou fracos):

De acordo com o princípio de minimização de risco empírico, o método tenta encontrar uma aproximação que minimiza o valor médio da função de perda no conjunto de treinamento, ou seja, minimiza o risco empírico. Isso é feito começando com um modelo, consistindo de uma função constante e expandindo-o gradualmente de maneira gananciosa:

em que é uma função de modelo de aprendizagem básico.

Infelizmente, escolher a melhor função h em cada etapa para uma função de perda arbitrária L é, em geral, um problema de otimização computacionalmente inviável. Portanto, a abordagem se restringe a uma versão simplificada do problema.

A ideia é aplicar uma etapa de máximo declive a esse problema de minimização (descida de gradiente funcional). Se considerarmos o caso contínuo, ou seja, aquele em que é o conjunto de funções diferenciáveis arbitrárias em atualizaríamos o modelo de acordo com as seguintes equações

em que as derivadas são obtidas com relação às funções para e é o comprimento do passo. No entanto, no caso discreto, ou seja, quando o é finito, escolhemos a função candidata h mais próxima do gradiente de L para a qual o coeficiente γ pode então ser calculado com o auxílio da pesquisa linear nas equações acima. Observe que essa abordagem é uma heurística e, portanto, não produz uma solução exata para o problema em questão, e sim uma aproximação. Em pseudocódigo, o método genérico de gradient boosting é: [2][7]

Entrada: conjunto de treino uma função de perda diferenciável número de iteraçõesM.

Algoritmo:

  1. Inicialize o modelo com um valor constante:
  2. Para m = 1 até M:
    1. Calcule os chamados pseudo-resíduos:
    2. Ajuste um modelo de aprendizagem básico (ou fraco, tal como uma árvore) fechado sob escala aos pseudo-resíduos, isto é, treine-o utilizando o conjunto de treino
    3. Calcule o multiplicador através da resolução de um problema de otimização unidimensional:
    4. Atualize o modelo:
  3. Saída

Gradient boosting em árvore[editar | editar código-fonte]

O gradient boosting normalmente é utilizado com árvores de decisão (especialmente árvores CART ) de um tamanho fixo como modelos de aprendizagem básicos. Para este caso especial, Friedman propõe uma modificação no método de gradient boosting que melhora a qualidade do ajuste de cada modelo básico.

O gradient boosting genérico na m- ésima etapa ajustaria uma uma árvore de decisão a pseudo-resíduos. Seja a sua quantidade de folhas. A árvore divide o espaço de entrada em regiões disjuntas e prevê um valor constante em cada região. Usando a notação do indicador, a saída de para a entrada x pode ser escrita como a soma:

onde é o valor previsto na região [8]

Então os coeficientes são multiplicados por algum valor escolhido usando a pesquisa linear para minimizar a função de perda e o modelo é atualizado da seguinte forma:

Friedman propõe modificar esse algoritmo para escolher um valores ótimos separados para cada uma das regiões da árvore, em vez de um único para a árvore inteira. Ele chama o algoritmo modificado de "TreeBoost". Os coeficientes do procedimento de ajuste de árvore podem então ser simplesmente descartados e a regra de atualização do modelo se torna:

Tamanho das árvores[editar | editar código-fonte]

O valor de que é o número de nós terminais nas árvores, é o parâmetro do método que pode ser ajustado para um conjunto de dados disponível. Ele controla o nível máximo permitido de interação entre variáveis no modelo. Com (stumps de decisão), nenhuma interação entre variáveis é permitida. Com o modelo pode incluir efeitos da interação entre até duas variáveis e assim por diante.

Hastie et al.[7] comenta que normalmente funciona bem para o boosting e os resultados são bastante insensíveis à escolha de nesta faixa, é insuficiente para muitas aplicações e é improvável a necessidade de

Regularização[editar | editar código-fonte]

Um ajuste excessivo ao conjunto de treinamento pode levar à degradação da capacidade de generalização do modelo. Várias técnicas de regularização reduzem esse efeito de sobreajuste restringindo o procedimento de ajuste.

Um parâmetro de regularização natural é o número M de iterações de gradient boosting (ou seja, o número de árvores no modelo quando o modelo de aprendizagem básico é uma árvore de decisão). Aumentar M reduz o erro no conjunto de treinamento, mas configurá-lo alto demais pode levar ao sobreajuste. Um valor ideal de M frequentemente é selecionado pelo monitoramento do erro de previsão em um conjunto de dados de validação separado. Além deste controle do valor de M, são utilizadas várias outras técnicas de regularização.

Outro parâmetro de regularização é a profundidade das árvores. Quanto maior é esse valor, maior é a probabilidade de o modelo superestimar os dados de treinamento.

Encolhimento[editar | editar código-fonte]

Uma parte importante do método de gradient boosting é a regularização por encolhimento, que consiste em modificar a regra de atualização da seguinte maneira:

em que o parâmetro é chamado de "taxa de aprendizado".

Empiricamente, verificou-se que o uso de taxas de aprendizado pequenas (tais como ) produz melhorias drásticas na capacidade de generalização dos modelos em relação ao gradient boosting sem encolhimento ( ) [7] No entanto, isso tem como preço o aumento do tempo computacional durante o treinamento e as consultas: uma taxa de aprendizado mais baixa exige mais iterações.

Gradient boosting estocástico[editar | editar código-fonte]

Pouco depois da introdução do gradient boosting, Friedman propôs uma pequena modificação no algoritmo, motivada pelo método de agregação de bootstrap ("bagging") de Breiman.[3] Especificamente, ele propôs que, a cada iteração do algoritmo, um modelo de aprendizagem básico deveria ser ajustado a uma subamostra do conjunto de treinamento extraída aleatoriamente sem substituição.[9] Friedman observou uma melhoria substancial na precisão do gradient boosting com esta modificação.

O tamanho da subamostra é uma fração constante do tamanho do conjunto de treinamento. Quando o algoritmo é determinístico e idêntico ao descrito acima. Valores menores de introduzem aleatoriedade no algoritmo e ajudam a evitar o sobreajuste, agindo como um tipo de regularização. O algoritmo também se torna mais rápido, porque as árvores de regressão precisam ser ajustadas a conjuntos de dados menores a cada iteração. Friedman[3] obteve que leva a bons resultados para conjuntos de treinamento de tamanho pequeno e moderado. Portanto, normalmente é definido como 0,5, o que significa que metade do conjunto de treinamento é usada para criar cada modelo de aprendizado básico.

Além disso, como na bagging, a subamostragem permite que seja definida um erro fora da bolsa da melhoria do desempenho das previsões, avaliando as previsões nas observações que não foram usadas na construção do próximo modelo de aprendizado básico. As estimativas fora da bolsa ajudam a evitar a necessidade de um conjunto de dados de validação independente, mas geralmente subestimam a melhoria real do desempenho e o número ideal de iterações.[10][11]

Número de observações em folhas[editar | editar código-fonte]

As implementações de gradient boosting de árvore geralmente também usam regularização limitando o número mínimo de observações nos nós terminais das árvores (esse parâmetro é chamado n.minobsinnode no pacote R gbm [10] ). Isso é usado no processo de construção da árvore ignorando quaisquer divisões que levem a nós que contêm menos que esse número de instâncias do conjunto de treinamento.

A imposição desse limite ajuda a reduzir a variância nas previsões nas folhas.

Penalização da complexidade da árvore[editar | editar código-fonte]

Outra técnica de regularização útil para gradient boosting de árvores é penalizar a complexidade do modelo aprendido.[12] A complexidade do modelo pode ser definida como o número proporcional de folhas nas árvores aprendidas. A otimização conjunta da perda e da complexidade do modelo corresponde a um algoritmo pós-poda para remover ramificações que falham em reduzir a perda por um limite. Outros tipos de regularização, como uma penalidade nos valores das folhas, também podem ser adicionadas para evitar sobreajustes.

Uso[editar | editar código-fonte]

Gradient boosting pode ser usado no campo da aprendizagem da classificação. Os mecanismos comerciais de busca na web Yahoo[13] e Yandex[14] usam variantes de gradient boosting em seus mecanismos de classificação aprendidos por máquina.

Nomes[editar | editar código-fonte]

O método é conhecido por vários nomes. Friedman introduziu sua técnica de regressão como uma "Gradient Boosting Machine" (GBM).[2] Mason, Baxter et al. descreveram a classe abstrata generalizada de algoritmos como "gradient boosting funcional".[4][5] Friedman et al. descreveram um avanço de modelos de gradient boosting como árvores de regressão aditiva múltipla (MART);[15] Elith et al. descrevem essa abordagem como "Boosted Regression Trees" (BRT).[16]

Uma implementação popular de código aberto para R chama o método de de "Generalized Boosting Model",[10] no entanto os pacotes que expandem esse trabalho usam o BRT.[17] As implementações comerciais da Salford Systems usam os nomes "Multiple Additive Regression Trees" (MART) e TreeNet, ambos com marca registrada.[carece de fontes?]

Ver também[editar | editar código-fonte]

Referências

  1. «Arcing The Edge» (PDF). Technical Report 486 
  2. a b c «Greedy Function Approximation: A Gradient Boosting Machine» (PDF) 
  3. a b c «Stochastic Gradient Boosting» (PDF) 
  4. a b S.A. Solla and T.K. Leen and K. Müller, ed. (1999). Boosting Algorithms as Gradient Descent (PDF). pp. 512–518 
  5. a b «Boosting Algorithms as Gradient Descent in Function Space» (PDF) 
  6. Cheng Li. «A Gentle Introduction to Gradient Boosting» (PDF) 
  7. a b c Hastie, T.; Tibshirani, R.; Friedman, J. H. (2009). «10. Boosting and Additive Trees». The Elements of Statistical Learning. Springer 2nd ed. New York: [s.n.] pp. 337–384. ISBN 978-0-387-84857-0 
  8. No caso de árvores CART usuais, as árvores são ajustadas utilizando a função de perda de mínimos quadrados, e então o coeficiente para a região é igual a apenas o valor da variável de saída, ponderada sobre otas as instâncias de treino em
  9. Note que isso é diferente de bagging, que faz uma amostragem com substituição por utilizar amostras do mesmo tamanho do conjunto de traino.
  10. a b c Ridgeway, Greg (2007). Generalized Boosted Models: A guide to the gbm package.
  11. Learn Gradient Boosting Algorithm for better predictions (with codes in R)
  12. Tianqi Chen. Introduction to Boosted Trees
  13. Cossock, David and Zhang, Tong (2008). Statistical Analysis of Bayes Optimal Subset Ranking Arquivado em 2010-08-07 no Wayback Machine, page 14.
  14. Yandex corporate blog entry about new ranking model "Snezhinsk" (in Russian)
  15. «Multiple Additive Regression Trees with Application in Epidemiology». Statistics in Medicine. 22: 1365–1381. 2003. PMID 12704603. doi:10.1002/sim.1501 
  16. «A working guide to boosted regression trees». Journal of Animal Ecology. 77: 802–813. 2008. PMID 18397250. doi:10.1111/j.1365-2656.2008.01390.x 
  17. «Boosted Regression Trees for ecological modeling» (PDF). CRAN 

Leitura complementar[editar | editar código-fonte]

  • Boehmke, Bradley; Greenwell, Brandon (2019). «Gradient Boosting». Hands-On Machine Learning with R. Chapman & Hall. [S.l.: s.n.] pp. 221–245. ISBN 978-1-138-49568-5 

Ligações externas[editar | editar código-fonte]