XGBOOST vs LightGBM: Qual algoritmo vence a corrida !!!

Sai Nikhilesh Kasturi em Rumo à Ciência de Dados Seguir Jul 11 · 10 min ler

Este post é sobre o benchmarking LightGBM e XGBoost no Dataset Census Income. Eu observei que o tempo de execução do XGBoost é mais lento quando comparado ao do LightGBM. Vamos entrar em mais detalhes para entender o que é superior quando comparado com vários parâmetros.

O desenvolvimento do Boosting Machines começou a partir do AdaBoost para o muito aguardado XGBOOST de hoje. O XGBOOST se tornou um algoritmo de fato para ganhar competições em Kaggle, simplesmente porque é extremamente poderoso. Mas, dados muitos e muitos dados, até o XGBOOST leva muito tempo para treinar.

Aí vem… Luz GBM na imagem.

Timeline

Muitos de vocês podem estar familiarizados com o Light Gradient Boosting, mas vocês terão uma sólida compreensão depois de ler este artigo. A pergunta mais natural que virá à sua mente é – Por que outro algoritmo de máquina de impulsionar? É mais rápido que o XGBOOST?

Bem, você adivinhou certo !!! Neste artigo, compararemos o GBM e o XGBoost Light e o desempenho deles com um exemplo.

Subtópicos a serem discutidos nesta história:

  1. O que é o GBM Light?
  2. Vantagens do GBM Light
  3. Diferenças Estruturais
  4. Noções básicas sobre parâmetros
  5. Implementação no Dataset
  6. Desempenho de cada algoritmo
  7. Parâmetros de ajuste
  8. Notas finais

O que é o GBM Light?

O Light GBM é uma estrutura de aprimoramento de gradiente rápida, distribuída e de alto desempenho baseada no algoritmo de árvore de decisão, usado para classificação, classificação e muitas outras tarefas de aprendizado de máquina.

Uma vez que é baseado em algoritmos de árvore de decisão, ele divide a folha de árvore com o melhor ajuste, enquanto outros algoritmos de divisão dividem a profundidade da árvore em nível ou em nível, em vez de foliar. Assim, ao crescer na mesma folha no GBM Light, o algoritmo folha-sábio pode reduzir mais perdas do que o algoritmo de nível e, portanto, resulta em uma precisão muito melhor que raramente pode ser alcançada por qualquer um dos algoritmos de boost existentes.

Antes é uma representação diagramática pelos criadores do GBM Light para explicar claramente a diferença.

Crescimento em folhas para o GBM Light

Vantagens do GBM Light

  1. Velocidade de treinamento mais rápida e maior eficiência : O GBM leve usa o algoritmo baseado em histograma, ou seja, armazena valores de recursos contínuos em compartimentos discretos que prendem o procedimento de treinamento.
  2. Menor consumo de memória: substitui os valores contínuos por compartimentos discretos que resultam em menor uso de memória.
  3. Melhor precisão do que qualquer outro algoritmo impulsionador: ele produz árvores muito mais complexas seguindo a abordagem de divisão sábia das folhas, em vez de uma abordagem de nível, que é o principal fator para alcançar maior precisão. No entanto, às vezes pode levar a overfitting que pode ser evitado, definindo o parâmetro max_depth.
  4. Compatibilidade com conjuntos de dados grandes: É capaz de funcionar igualmente bem com grandes conjuntos de dados com uma redução significativa no tempo de treinamento em comparação com o XGBOOST.

Diferenças Estruturais no LightGBM & XGBoost

O LightGBM usa uma nova técnica de amostragem em um lado com base em gradiente (GOSS) para filtrar as instâncias de dados para encontrar um valor dividido, enquanto o XGBoost usa algoritmo pré-classificado e algoritmo baseado em histograma para calcular a melhor divisão. Aqui, instâncias são observações / amostras.

Em termos simples, o algoritmo baseado em histograma divide todos os pontos de dados de um recurso em compartimentos discretos e usa esses compartimentos para localizar o valor de divisão do histograma. Embora seja eficiente do que o algoritmo pré-ordenado na velocidade de treinamento, que enumera todos os pontos de divisão possíveis nos valores de recurso pré-classificados, ele ainda está atrás do GOSS em termos de velocidade.

Então, o que torna esse método GOSS eficiente?
O GOSS (Amostragem em Um Lado Baseado em Gradiente) é um novo método de amostragem que reduz as amostras com base em gradientes. Como sabemos, instâncias com pequenos gradientes são bem treinadas (pequeno erro de treinamento) e aquelas com grandes gradientes são undertrained. Uma abordagem ingênua para reduzir a amostra é descartar instâncias com pequenos gradientes, concentrando-se apenas em instâncias com grandes gradientes, mas isso alteraria a distribuição de dados. Resumindo, o GOSS retém instâncias com grandes gradientes enquanto realiza amostragem aleatória em instâncias com pequenos gradientes.

Parâmetros importantes da luz GBM:

num_leaves : o número de nós de folha a serem usados. Ter um grande número de folhas aumentará a precisão, mas também levará ao overfitting.

min_child_samples : o número mínimo de amostras (dados) para agrupar em uma folha. O parâmetro pode ajudar muito com o overfitting: tamanhos de amostra maiores por folha reduzirão o overfitting (mas pode levar a uma falta de ajuste).

max_depth : controla a profundidade da árvore explicitamente. Árvores rasas reduzem o overfitting.

Ajuste para dados desbalanceados

A maneira mais simples de explicar os dados desequilibrados ou distorcidos é adicionar peso aos exemplos de classe positivos:

scale_pos_weight : o peso pode ser calculado com base no número de exemplos negativos e positivos: sample_pos_weight = number of negative samples / number of positive samples .

Ajuste para overfitting

Além dos parâmetros mencionados acima, os seguintes parâmetros podem ser usados para controlar o overfitting:

max_bin : os números máximos de compartimentos nos quais os valores de recursos são max_bin . Um max_bin menor reduz o overfitting.

min_child_weight : a soma mínima de hessian para uma folha. Em conjunto com min_child_samples, valores maiores reduzem o overfitting.

bagging_fraction e bagging_freq : permite ensacar (subamostragem) dos dados de treinamento. Ambos os valores precisam ser definidos para o ensaque a ser usado. A freqüência controla com que frequência (iteração) o empacotamento é usado. Frações e freqüências menores reduzem o overfitting.

feature_fraction : controla a subamostragem de recursos usados para treinamento (ao contrário de subamostrar os dados de treinamento reais no caso de ensacar). Frações menores reduzem o overfitting.

lambda_l1 e lambda_l2 : controla a regularização L1 e L2.

Ajuste para precisão

A precisão pode ser melhorada ajustando os seguintes parâmetros:

max_bin : um max_bin maior aumenta a precisão.

learning_rate : usar uma taxa de aprendizado menor e aumentar o número de iterações pode melhorar a precisão.

num_leaves : aumentar o número de folhas aumenta a precisão com um alto risco de overfitting.

Parâmetros importantes do XGBoost:

Os parâmetros gerais foram divididos em 3 categorias pelos autores do XGBoost:

  1. Parâmetros gerais: orientar o funcionamento geral
  2. Parâmetros de reforço: Guiam o impulsionador individual (árvore / regressão) a cada passo
  3. Parâmetros da tarefa de aprendizado: orientar a otimização realizada

Parâmetros Gerais

Estes definem a funcionalidade geral do XGBoost.

1. booster [default = gbtree]

Selecione o tipo de modelo a ser executado em cada iteração. Tem 2 opções:

gbtree: modelos baseados em árvore

gblinear: modelos lineares

2. silent [default = 0]:

Modo silencioso é ativado é definido como 1, ou seja, nenhuma mensagem em execução será impressa.

Geralmente é bom mantê-lo como as mensagens podem ajudar na compreensão do modelo.

3. nthread [padrão para o número máximo de encadeamentos disponíveis se não estiver definido]

Isso é usado para processamento paralelo e o número de núcleos no sistema deve ser inserido

Se você deseja executar em todos os núcleos, o valor não deve ser inserido e o algoritmo será detectado automaticamente.

Parâmetros de reforço

Embora haja 2 tipos de boosters, considerarei apenas o booster de árvore aqui, porque sempre supera o booster linear e, portanto, o último é raramente usado.

1. eta [padrão = 0.3]

Analogamente à taxa de aprendizado no GBM

Torna o modelo mais robusto diminuindo os pesos em cada etapa

Valores finais típicos a serem utilizados: 0,01–0,2

2. min_child_weight [default = 1]

Define a soma mínima de pesos de todas as observações necessárias em uma criança.

Isso é semelhante a min_child_leaf no GBM, mas não exatamente. Isto refere-se a min “soma de pesos” de observações enquanto o GBM tem um “número de observações” min.

Usado para controlar o ajuste excessivo. Valores mais altos impedem que um modelo aprenda relações que podem ser altamente específicas para a amostra particular selecionada para uma árvore.

Valores muito altos podem levar a sub-montagem, portanto, deve ser ajustado usando o CV.

3. max_depth [default = 6]

A profundidade máxima de uma árvore, igual a GBM.

Usada para controlar o ajuste excessivo, uma profundidade maior permitirá que o modelo aprenda relações muito específicas para uma determinada amostra.

Deve ser ajustado usando o CV.

Valores típicos: 3 a 10

4. max_leaf_nodes

O número máximo de nós ou folhas terminais em uma árvore.

Pode ser definido no lugar de max_depth. Uma vez que as árvores binárias são criadas, uma profundidade de 'n' produziria um máximo de 2 ^ n folhas.

Se isso for definido, o GBM ignorará max_depth.

5. gama [padrão = 0]

Um nó é dividido apenas quando a divisão resultante fornece uma redução positiva na função de perda. Gama especifica a redução mínima de perda necessária para fazer uma divisão.

Torna o algoritmo conservador. Os valores podem variar dependendo da função de perda e devem ser ajustados.

6. max_delta_step [default = 0]

Na etapa delta máxima, permitimos que a estimativa de peso de cada árvore seja. Se o valor for definido como 0, significa que não há restrição. Se estiver definido como um valor positivo, pode ajudar a tornar a etapa de atualização mais conservadora.

Geralmente, esse parâmetro não é necessário, mas pode ajudar na regressão logística quando a classe está extremamente desequilibrada.

Isso geralmente não é usado, mas você pode explorar mais se desejar.

7. subamostra [padrão = 1]

O mesmo que a subamostra do GBM. Indica a fração de observações a serem amostras aleatórias para cada árvore.

Valores mais baixos tornam o algoritmo mais conservador e evitam overfitting, mas valores muito pequenos podem levar a um ajuste insuficiente.

Valores típicos: 0,5–1

8. lambda [default = 1]

Termo de regularização de L2 em pesos (análogo à regressão de Ridge)

Isso costumava lidar com a parte de regularização do XGBoost. Embora muitos cientistas de dados não o usem com frequência, ele deve ser explorado para reduzir o overfitting.

9. alpha [default = 0]

Termo de regularização de L1 no peso (análogo à regressão de Lasso)

Pode ser usado em caso de alta dimensionalidade para que o algoritmo corra mais rápido quando implementado

10. scale_pos_weight [default = 1]

Um valor maior que 0 deve ser usado em caso de desequilíbrio de alta classe, pois ajuda na convergência mais rápida

Parâmetros da Tarefa de Aprendizagem

Esses parâmetros são usados para definir o objetivo de otimização da métrica a ser calculada em cada etapa.

  1. objetivo [default = reg: linear]

Isso define a função de perda a ser minimizada. Os valores mais utilizados são:

binário: logística – regressão logística para classificação binária, retorna a probabilidade prevista (não a classe)

multi: softmax – classificação multiclássica usando o objetivo softmax, retorna a classe prevista (não probabilidades)

multi: softprob –same as softmax, mas retorna a probabilidade prevista de cada ponto de dados pertencente a cada classe.

2. eval_metric [padrão de acordo com o objetivo]

  • A métrica a ser usada para dados de validação.
  • Os valores padrão são rmse para regressão e erro para classificação.
  • Valores típicos são:

rmse – erro quadrático médio da raiz

mae – erro absoluto médio

logloss – probabilidade de log negativa

error – Taxa de erro de classificação binária (0,5 limiar)

merror – Taxa de erro de classificação multiclasse

mlogloss – logloss multiclasse

auc: Área sob a curva.

Semelhança nos hiperparâmetros

Implementação no Dataset:

Então, agora vamos comparar o LightGBM com o XGBoost, aplicando ambos os algoritmos a um conjunto de dados de renda do censo e, em seguida, comparando seu desempenho.

Informação do Conjunto de Dados Carregando os dados descrição de dados

Após a execução do Light GBM e XGboost no conjunto de dados acima. Os resultados são:

Métricas de avaliação: precisão, auc_score e tempo de execução (modelo 1) Métricas de avaliação: Precisão, rsme_score e tempo de execução (Modelo 2)

Houve apenas um ligeiro aumento na precisão, pontuação AUC e uma ligeira diminuição na pontuação rsme aplicando XGBoost sobre LightGBM, mas há uma diferença significativa no tempo de execução para o procedimento de treinamento. O GBM leve é muito rápido quando comparado ao XGBOOST e é uma abordagem muito melhor quando se lida com grandes conjuntos de dados.

Isso acaba sendo uma grande vantagem quando você está trabalhando em grandes conjuntos de dados em competições de tempo limitado.

Parâmetros de ajuste:

Para XGBOOST

Estes são os parâmetros definidos para o modelo 1:

Parâmetros para XGBoost – Model 1

Precisão para o modelo 1:

Estes são os parâmetros para o modelo 2: O ajuste dos parâmetros está sendo feito.

Parâmetros de ajuste para XGBoost – Model 2

Precisão para o modelo 2:

Como podemos ver, com o ajuste dos parâmetros, houve pouco aumento na precisão do nosso modelo.

Para LightGBM:

Estes são os parâmetros definidos para o modelo 1:

Parâmetros para LightGBM – Model 1

Precisão para o modelo 1:

Estes são os parâmetros para o modelo 2: O ajuste dos parâmetros está sendo feito.

Parâmetros do LightGBM – Modelo 2

Precisão para o modelo 2:

Como podemos ver, com o ajuste dos parâmetros, houve pouco aumento na precisão do nosso modelo.

Notas finais

Neste post, eu tentei comparar o desempenho do Light GBM vs XGBoost. Uma das desvantagens de usar este LightGBM é sua estreita base de usuários – mas isso está mudando rapidamente. Este algoritmo, além de ser mais preciso e economizar tempo do que o XGBOOST, tem sido limitado em uso devido à menor documentação disponível. No entanto, esse algoritmo mostrou resultados muito melhores e superou os algoritmos de aprimoramento existentes.

Você pode encontrar todo o código no meu repositório do GitHub.

Nikhileshorg / LightGBM-x-XGBoost

Contribua para o desenvolvimento do Nikhileshorg / LightGBM-x-XGBoost criando uma conta no GitHub.

github.com

Texto original em inglês.