Subequipamento e Sobreequipamento no Aprendizado de Máquinas
Acreditar ou não, no mundo real nunca teremos um conjunto de dados limpo e perfeito. Cada conjunto de dados terá algumas partes estranhas ou em falta ou dados desequilibrados. Ou nós, como Programadores de Aprendizagem de Máquina, introduziremos alguns erros ou deficiências no nosso modelo. Uma das principais razões para isso é que queremos que o nosso modelo seja capaz de descrever um padrão subjacente. Infelizmente a natureza dos dados da vida real é que eles vêm com algum nível de ruído e outliers, e para a maioria das partes queremos que o modelo capture o sinal nos dados e não o ruído.
Agora, para capturar o padrão subjacente nos dados com precisão, o modelo pode ter que incorporar o ruído. A implicação é que o modelo derivado se encaixa bem nos dados de modelagem mas não generaliza o suficiente para outras amostras que não foram incluídas no processo de modelagem.
Existe terminologia para descrever como um modelo de aprendizagem de máquina aprende e generaliza para novos dados, isto é sobreajustamento e subajustamento. O objetivo de um bom modelo de aprendizagem de máquina é generalizar bem desde o conjunto de dados de treinamento até qualquer conjunto de dados do domínio do problema. Isto nos permite fazer previsões baseadas em um conjunto de dados que o modelo nunca viu.
Em estatística um ajuste é referido como, quão próximo o seu modelo está da classe / função / valor alvo. Overfitting e underfitting são as duas maiores causas do mau desempenho dos algoritmos ou modelos de aprendizagem da máquina.
Vamos entender o que é Best Fit, Overfitting e Underfitting? Seguido de algum código.
O que é Overfitting & Underfitting?
Overfitting refere-se ao cenário onde um modelo de aprendizagem de máquina não pode generalizar ou encaixar bem no conjunto de dados invisível. Um sinal claro de sobreajuste da aprendizagem da máquina é se seu erro no conjunto de dados de teste ou validação for muito maior do que o erro no conjunto de dados de treinamento.
Overfitting é um termo usado em estatísticas que se refere a um erro de modelagem que ocorre quando uma função corresponde muito próxima a um conjunto de dados. Como resultado, o sobreajuste pode não se ajustar a dados adicionais, o que pode afetar a precisão da previsão de futuras observações.
Overfitting acontece quando um modelo aprende o detalhe e o ruído no conjunto de dados de treinamento, na medida em que impacta negativamente o desempenho do modelo em um novo conjunto de dados. Isto significa que o ruído ou flutuações aleatórias no conjunto de dados de treinamento são captados e aprendidos como conceitos pelo modelo. O problema é que esses conceitos não se aplicam a novos conjuntos de dados e afetam negativamente a capacidade do modelo de generalizar.
O oposto de overfitting é underfitting.
Underfitting refere-se a um modelo que não pode modelar o conjunto de dados de treinamento nem generalizar para o novo conjunto de dados. Um modelo de aprendizagem de máquina de underfitting não é um modelo adequado e será óbvio, pois terá um mau desempenho no conjunto de dados de treinamento.
Underfitting muitas vezes não é discutido, pois é fácil de detectar dada uma boa métrica de desempenho.
Entendendo-o com Exemplos
Exemplo 1:
Vamos dizer que três alunos se prepararam para um exame de matemática.
O primeiro aluno só estudou operações matemáticas de Adição e pulou outras operações matemáticas como Subtração, Divisão, Multiplicação etc.
O segundo aluno tem uma memória particularmente boa. Assim, o segundo aluno memorizou todos os problemas apresentados no livro didático.
E o terceiro aluno estudou todas as operações matemáticas e está bem preparado para o exame.
No exame o aluno só poderá resolver as questões relacionadas com a Adição e reprovará nos problemas ou perguntas feitas relacionadas com outras operações matemáticas.
O aluno dois só será capaz de responder as perguntas se elas aparecerem no livro didático (como ele memorizou) e não será capaz de responder quaisquer outras perguntas.
O aluno três será capaz de resolver todos os problemas do exame razoavelmente bem.
Os algoritmos de aprendizagem da máquina têm comportamento semelhante aos nossos três alunos, às vezes o modelo gerado pelo algoritmo é semelhante ao do primeiro aluno. Eles aprendem apenas de uma pequena parte do conjunto de dados de treinamento, nestes casos o modelo é Underfitting.
Por vezes o modelo irá memorizar todo o conjunto de dados de treinamento, como o segundo estudante. Eles têm um desempenho muito bom em instâncias conhecidas, mas com falhas em dados não vistos ou instâncias desconhecidas. Nesses casos, o modelo é dito como sendo Overfitting.
E quando o modelo se sai bem tanto no conjunto de dados de treinamento quanto nos dados não vistos ou instâncias desconhecidas como o aluno três, é um bom ajuste.
Exemplo 2:
Vamos ter outro exemplo e considerar que você visitou uma cidade “X” e pegou carona num táxi. Ao falar com amigos, você mais tarde percebe que o taxista cobrou duas ou três vezes mais do que a tarifa normal. Isso ocorreu porque você era novo na cidade e o motorista literalmente o levou para dar uma volta.
Também, você comprou alguns itens de um vendedor ambulante, e mais uma vez acabou pagando mais do que valiam. Você finalmente decide que as pessoas na cidade “X” são desonestas. O que é um traço humano, as pessoas muitas vezes generalizam. Modelos de aprendizagem de máquinas também têm esta fraqueza se não tivermos o cuidado de evitar preconceitos durante as fases de desenvolvimento: modelagem, seleção de algoritmos, recursos, conjunto de dados de treinamento etc.
Suponha na mesma cidade “X” outro motorista de táxi cobrou-lhe razoavelmente e de acordo com o metro, mas com base na experiência, você considera que este motorista também cobrou mais. Isto se chama Overfitting.
Acima de dois exemplos podemos dizer que, se o modelo tem um bom desempenho no conjunto de dados de teste ou não visto, então é um modelo mais adequado ou bom modelo. E se não teve um bom desempenho no conjunto de dados de teste ou não visto, mas teve um bom desempenho no conjunto de dados de treinamento, então é um modelo Overfit. E qualquer modelo que não se saiu bem no conjunto de dados de treinamento nem no conjunto de dados de teste então é um modelo Underfit.
Nextos verá um exemplo com código python.
Exemplo 3:
Este exemplo demonstra os problemas de underfitting e overfitting e como podemos usar a regressão linear com características polinomiais para aproximar funções não lineares.
Deixe-nos gerar duas variáveis, digamos X e y. X terá algum número / amostra aleatória, onde como y é parte da função co-seno.
Baseado nos dados o gráfico se parecerá… simples traçado X e y.
Deixe treinar nosso modelo usando a Regressão Linear, prever e visualizar.
Vejamos o modelo previsto.
Vemos que a linha reta é incapaz de capturar os padrões nos dados. Este é um exemplo de subajuste. O erro será enorme neste modelo.
Vamos considerar a característica polinomial com alguns graus e treinar o nosso modelo.
Vemos que uma função linear (polinomial com grau 1) não é suficiente para caber nas amostras de treino. Isto é chamado underfitting.
Um polinômio de grau 4 aproxima-se quase perfeitamente da verdadeira função. Isto é chamado de Best Fit ou Good Model.
No entanto, para graus mais altos (com grau 15) o modelo irá sobreajustar o conjunto de dados de treinamento, ou seja, ele aprende o ruído dos dados de treinamento.
Avaliamos quantitativamente o sobreajustamento / subajustamento usando a validação cruzada.
Nós também calculamos o erro quadrático médio (MSE) no conjunto de dados de validação, quanto maior a probabilidade do modelo generalizar corretamente a partir do conjunto de dados de treinamento.
Código completo pode ser referenciado de
https://colab.research.google.com/drive/1XzngJPT8WUyHFW-JxhrawVhPurJlv1cA?usp=sharing
Detectar Overfitting ou Underfitting
Um desafio chave de detectar qualquer tipo de ajuste (seja subequipamento ou melhor ajuste ou sobreequipamento), é quase impossível antes de testar os dados. Ele pode ajudar a resolver as características inerentes ao sobreajuste, que é a incapacidade de generalizar um conjunto de dados. Os dados podem, portanto, ser separados em diferentes subconjuntos para facilitar o treinamento e os testes. Os dados são divididos em duas partes principais, ou seja, um conjunto de dados de teste e um conjunto de dados de treinamento.
Técnica de divisão pode variar com base no tipo de conjunto de dados e pode-se usar qualquer técnica de divisão.
Se o nosso modelo faz muito melhor no conjunto de dados de treinamento do que no conjunto de dados de teste, então é provável que estejamos sobreajustando Por exemplo, o nosso modelo realizado com uma precisão de 99% no conjunto de dados de treinamento, mas apenas 50-55% de precisão no conjunto de dados de teste. É sobreajustar o modelo e não teve um bom desempenho no conjunto de dados não visto.
Se o nosso modelo faz muito melhor no conjunto de dados de teste do que no conjunto de dados de treinamento, então provavelmente estamos subajustando.
E se o nosso modelo faz bem tanto no conjunto de dados de treinamento e teste, então temos o melhor ajuste. Por exemplo, o nosso modelo realizou 90% de precisão no conjunto de dados de treinamento e realiza 88% – 92% de precisão no conjunto de dados de teste. É o modelo com melhor ajuste.
Outra forma simples de detectar isto é usando a validação cruzada. Isto tenta examinar o modelo treinado com um novo conjunto de dados para verificar a sua precisão preditiva. Dado um conjunto de dados, alguma parte disto é retida (digamos 30%) enquanto o resto é usado no treinamento do modelo. Uma vez que o modelo tenha sido treinado, os dados reservados são então usados para verificar a precisão do modelo em comparação com a precisão dos dados derivados dos dados usados no treinamento. Uma variação significativa nestes dois flags overfitting.
Como evitar overfitting ou underfitting
Detecting overfitting ou underfitting é útil, mas não resolve o problema. Felizmente, você tem várias opções para tentar. Aqui estão algumas das soluções mais populares.
O remédio para o Underfitting, é avançar e tentar algoritmos alternativos de aprendizagem da máquina. No entanto, ele fornece um bom contraste ao problema de overfitting.
Para prevenir overfitting, existem várias maneiras e algumas delas são mostradas abaixo.
- Validação cruzada:
- Validação cruzada é uma poderosa medida preventiva contra overfitting.
- Utilize seus dados de treinamento inicial para gerar múltiplas mini-divisões de testes de treinamento. Use estas partições para ajustar o seu modelo.
- Na validação cruzada k-padrão, dividimos os dados em subconjuntos k, chamados dobras. Em seguida, treinamos iterativamente o algoritmo nas dobras k-1 enquanto usamos a dobra restante como o conjunto de teste (chamado “holdout fold”).
- Validação cruzada permite que você ajuste os hiperparâmetros apenas com o conjunto de dados de treinamento original. Isso permite que você mantenha o conjunto de dados do teste como um conjunto de dados verdadeiramente invisível para selecionar seu modelo final.
- Treinar com mais dados
- Não funcionará sempre, mas o treinamento com mais dados pode ajudar os algoritmos a detectar melhor o sinal.
- Como o usuário alimenta mais dados de treinamento no modelo, ele será incapaz de sobreajustar todas as amostras e será forçado a generalizar para obter resultados.
- Os usuários devem continuamente coletar mais dados como forma de aumentar a precisão do modelo.
- No entanto, este método é considerado caro e, portanto, os usuários devem garantir que os dados utilizados sejam relevantes e limpos.
- Of course, isso nem sempre é o caso. Se apenas adicionarmos mais dados ruidosos, esta técnica não vai ajudar. É por isso que você deve sempre garantir que seus dados sejam limpos e relevantes.
- Aumento de dados
- Uma alternativa ao treinamento com mais dados é o aumento de dados, que é menos caro em comparação com o primeiro.
- Se você não conseguir coletar mais dados continuamente, você pode fazer com que os conjuntos de dados disponíveis apareçam diversos.
- Aumento de dados faz com que uma amostra de dados pareça ligeiramente diferente cada vez que é processada pelo modelo. O processo faz com que cada conjunto de dados pareça único para o modelo e impede que o modelo aprenda as características dos conjuntos de dados.
- Reduzir Complexidade ou Simplificação de Dados
- Overfitting pode ocorrer devido à complexidade de um modelo, de tal forma que, mesmo com grandes volumes de dados, o modelo ainda consegue superajustar o conjunto de dados de treinamento.
- O método de simplificação de dados é usado para reduzir o sobreajuste, diminuindo a complexidade do modelo para torná-lo simples o suficiente para que ele não se sobreajuste.
- Algumas das ações que podem ser implementadas incluem podar uma árvore de decisão, reduzindo o número de parâmetros em uma Rede Neural, e usar o dropout em uma Rede Neural.
- Simplificar o modelo também pode tornar o modelo mais leve e executar mais rápido.
- Regularização
- Regularização refere-se a uma ampla gama de técnicas para forçar artificialmente o seu modelo a ser mais simples.
- O método dependerá do tipo de aprendiz que você estiver usando. Por exemplo, você poderia podar uma árvore de decisão, usar dropout em uma rede neural, ou adicionar um parâmetro de penalidade à função de custo em regressão.
- Opés, o método de regularização é um hiperparâmetro também, o que significa que ele pode ser ajustado através de validação cruzada.
- Para aprender sobre Regularização consulte o artigo https://datascience.foundation/datatalk/regularization-machine-learning-teacher escrito e muito bem explicado por Abhishek Mishra.
- Ensembling
- Ensembles são métodos de aprendizagem de máquina para combinar previsões de vários modelos separados. Existem alguns métodos diferentes de ensembling, mas os dois mais comuns são: Boosting e Bagging.
- Boosting funciona usando modelos base simples para aumentar a sua complexidade agregada. Ele treina um grande número de alunos fracos organizados em uma sequência, de modo que cada aluno da sequência aprende dos erros do aluno antes dele.
- Boosting tenta melhorar a flexibilidade preditiva de modelos simples.
- Boosting combina todos os alunos fracos da sequência para trazer à tona um aluno forte.
- Bagging funciona treinando muitos alunos fortes organizados em um padrão paralelo e depois combinando-os para otimizar suas previsões.
- Bagging tenta reduzir a hipótese de sobreajustar modelos complexos.
- Bagging então combina todos os alunos fortes para “suavizar” as suas previsões.
- Pararagem precoce
- Quando você está treinando um algoritmo de aprendizagem iterativamente, você pode medir o quão bem cada iteração do modelo se comporta.
- Até um certo número de iterações, novas iterações melhoram o modelo. Após esse ponto, no entanto, a capacidade do modelo para generalizar pode enfraquecer à medida que começa a sobreajustar os dados de treinamento.
- Parar precocemente refere-se a parar o processo de treinamento antes do aluno passar esse ponto.
- Hoje, esta técnica é usada principalmente no aprendizado profundo, enquanto outras técnicas (por exemplo Regularização) são preferíveis para a aprendizagem clássica da máquina.
- É necessário adicionar regularização no caso de modelos Linear e SVM.
- Em modelos de árvore de decisão você pode reduzir a profundidade máxima.
- Enquanto em Redes Neurais, você pode introduzir a camada dropout para reduzir o overfitting.
Resumo rápido
Overfitting é um erro de modelagem que introduz viés no modelo porque está muito relacionado ao conjunto de dados.
Overfitting torna o modelo relevante apenas para seu conjunto de dados e irrelevante para qualquer outro conjunto de dados.
Alguns dos métodos usados para evitar o overfitting incluem agrupamento, aumento de dados, simplificação de dados e validação cruzada.