O ajuste excessivo é tão ruim que você não deve escolher um modelo que se ajuste demais, mesmo que o erro de teste seja menor? Não. Mas você deve ter uma justificativa para escolhê-lo.
Esse comportamento não está restrito ao XGBoost. É um fio comum entre todas as técnicas de aprendizado de máquina; encontrar o tradeoff certo entre underfitting e overfitting. A definição formal é o tradeoff de variação de polarização (Wikipedia) .
A troca de viés e variância
A seguir, é uma simplificação da compensação de desvios de polarização, para ajudar a justificar a escolha do seu modelo.
Dizemos que um modelo tem um viés alto se não for capaz de usar totalmente as informações nos dados. É muito dependente de informações gerais, como o caso mais frequente, a média da resposta ou alguns recursos avançados. O viés pode vir de suposições erradas, por exemplo, assumindo que as variáveis são normalmente distribuídas ou que o modelo é linear.
Dizemos que um modelo tem alta variação se estiver usando muita informação dos dados. Ele se baseia em informações que são reveladoras apenas no conjunto de treinamento que lhe foi apresentado, o que não é generalizado o suficiente. Normalmente, o modelo mudará muito se você alterar o conjunto de treinamento, daí o nome "alta variação".
Essas definições são muito semelhantes às definições de underfitting e overfitting. No entanto, essas definições são muitas vezes simplificadas demais para serem opostas, como em
- O modelo será insuficiente se os erros de treinamento e teste forem altos. Isso significa que o modelo é muito simples.
- O modelo será sobrescrito se o erro de teste for maior que o erro de treinamento. Isso significa que o modelo é muito complexo.
Naturalmente, essas simplificações são úteis, pois ajudam a escolher a complexidade certa do modelo. Mas eles ignoram um ponto importante, o fato de que (quase) todo modelo tem um componente de viés e de variância. A descrição de underfitting / overfitting diz que você tem muito viés / muita variação, mas você (quase) sempre tem os dois .
Se você deseja obter mais informações sobre a troca de desvio e desvio, elas oferecem muitas visualizações úteis e bons recursos disponíveis no google. Todo livro didático de aprendizado de máquina terá uma seção sobre a troca de polarização e desvio, aqui estão algumas
- Uma introdução ao aprendizado estatístico e Elementos do aprendizado estatístico (disponíveis aqui) .
- Reconhecimento de Padrões e Aprendizado de Máquina, de Christopher Bishop.
- Aprendizado de máquina: uma perspectiva probabilística, de Kevin Murphy.
Além disso, um bom post no blog que me ajudou a entender é o entendimento de Scott Fortmann-Roe sobre o tradeoff de variação .
Aplicação ao seu problema
Então você tem dois modelos,
MARSXGBoostTrem MAE∼ 4,0∼ 0,3Teste MAE∼ 4,0∼ 2.4Baixa variância, maior viés ,Maior variância, menor viés ,
e você precisa escolher um. Para fazer isso, você precisa definir o que é um modelo melhor. Os parâmetros que devem ser incluídos em suas decisões são a complexidade e o desempenho do modelo.
- Quantas "unidades" de complexidade você deseja trocar por uma "unidade" de desempenho?
- Mais complexidade está associada a maior variação. Se você deseja que seu modelo generalize bem em um conjunto de dados um pouco diferente daquele em que você treinou, você deve procurar menos complexidade.
- Se você deseja um modelo que possa entender facilmente, pode fazê-lo com o custo de desempenho, reduzindo a complexidade do modelo.
- Se você está buscando o melhor desempenho em um conjunto de dados que você sabe que vem do mesmo processo generativo que seu conjunto de treinamento, pode manipular a complexidade para otimizar seu erro de teste e usá-lo como uma métrica. Isso acontece quando o seu conjunto de treinamento é amostrado aleatoriamente em um conjunto maior e seu modelo será aplicado nesse conjunto. É o caso da maioria das competições do Kaggle, por exemplo.
O objetivo aqui não é encontrar um modelo que "não se ajuste demais". É encontrar o modelo que tem a melhor troca de desvio e desvio. Nesse caso, eu argumentaria que a redução no viés realizada pelo modelo XGBoost é boa o suficiente para justificar o aumento da variação.
O que você pode fazer
No entanto, você provavelmente pode fazer melhor ajustando os hiperparâmetros.
Aumentar o número de rodadas e reduzir a taxa de aprendizado é uma possibilidade. Algo "estranho" sobre o aumento de gradiente é que executá-lo bem além do ponto em que o erro de treinamento atingiu zero parece ainda melhorar o erro de teste (conforme discutido aqui: É mais profundo melhor quando superficial é bom? ). Você pode tentar treinar seu modelo um pouco mais no conjunto de dados depois de definir os outros parâmetros,
1 / 214. Pode ser um jargão, mas se seus recursos tiverem um grau de interação de 3 (aproximadamente: uma combinação de 4 recursos não é mais poderosa do que uma combinação de 3 desses recursos + o quarto), então o crescimento de árvores de tamanho maior que 3 é prejudicial. Duas árvores de profundidade três terão mais poder de generalização do que uma árvore de profundidade quatro. Esse é um conceito bastante complicado e não vou abordá-lo agora, mas você pode verificar esta coleção de papéis para começar. Além disso, observe que as árvores profundas levam a uma alta variação!
O uso de subamostragem, conhecido como ensacamento , é ótimo para reduzir a variação. Se suas árvores individuais tiverem uma alta variação, o empacotamento fará a média das árvores e a média terá menos variação do que as árvores individuais. Se, depois de ajustar a profundidade de suas árvores, você ainda encontrar alta variação, tente aumentar a subamostragem (ou seja, reduza a fração dos dados usados). A subamostragem do espaço de recurso também atinge esse objetivo.