Subajuste e sobreajuste
Parte da seção Aprendizado supervisionado do Journey de Machine Learning da Coddy. Lição 32 de 58.
Você encontrou a maior armadilha do aprendizado de máquina: k = 1 e árvores profundas decoradas. Este capítulo dá um nome a ela e termina com gráficos como este:
A armadilha: 15 plantas de manjericão, regadas de maneiras diferentes, e três curvas ajustadas à sua colheita:
O grau 1 é simples demais: subajuste. O grau 12 passa por todos os pontos de treinamento, oscilando entre eles: sobreajuste, memorizando em vez de aprender.
np.polyval(coefs, x) fornece as alturas de uma curva. RMSE de treino e de teste, em gramas:
for degree in [1, 3, 12]:
coefs = np.polyfit(water_train, grams_train, degree)
train_err = np.sqrt(mean_squared_error(grams_train, np.polyval(coefs, water_train)))
test_err = np.sqrt(mean_squared_error(grams_test, np.polyval(coefs, water_test)))
print(degree, round(train_err), round(test_err))Ele imprime:
1 156 138
3 15 19
12 9 173O sinal de overfitting: erro de treinamento pequeno, erro de teste grande.
Desafio
MédioUma fazenda eólica modela a potência de uma turbina a partir da velocidade do vento. O código inicial divide as 24 leituras e lê max_degree.
- Para cada grau de 1 a
max_degree, ajuste uma curva com as linhas de treinamento; imprima o RMSE de treinamento e de teste em kW inteiros. - Imprima o primeiro grau cujo erro de teste seja mais que o dobro do erro de treinamento, ou
No overfitting up to degreeemax_degree.
Para outra turbina e 7:
Degree 1: train 117 kW, test 172 kW
Degree 2: train 115 kW, test 182 kW
Degree 3: train 64 kW, test 85 kW
Degree 4: train 63 kW, test 79 kW
Degree 5: train 47 kW, test 67 kW
Degree 6: train 47 kW, test 65 kW
Degree 7: train 23 kW, test 85 kW
Overfitting starts at degree 7Experimente você mesmo
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
max_degree = int(input())
# Não altere as linhas abaixo: velocidade do vento (m/s) e potência (kW) de uma turbina eólica
speed = np.array([3.8, 4.3, 5.1, 5.6, 5.6, 6.7, 6.8, 7.2, 7.8, 8.5, 8.9, 9.1,
10.2, 10.9, 11.4, 11.9, 12.2, 12.4, 12.6, 13.2, 13.9, 14.4, 15.5, 16.5])
power = np.array([0, 85, 179, 22, 17, 126, 255, 273, 419, 545, 612, 665,
913, 1120, 1114, 1227, 1299, 1400, 1293, 1329, 1396, 1493, 1461, 1552])
speed_train, speed_test, power_train, power_test = train_test_split(
speed, power, test_size=0.25, random_state=0)
# Escreva seu código abaixo
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Aprendizado supervisionado
1Seu primeiro modelo
Aprendendo com exemplosConjuntos de treino e testeAjustar e preverAvaliar um modeloRecapitulação: classificador de sementes4Regressão logística
Previsões de sim ou nãoO limiar de decisãoPesos como evidênciasVárias classesRevisão: filtro de spam7Sobreajuste
Subajuste e sobreajusteCurvas de aprendizadoRegularizaçãoConjuntos de validaçãoRevisão: ajustando uma árvore2Vizinhos Mais Próximos
Como o k-NN DecideEscolhendo kLimites de DecisãoEscalonamento para VizinhosRevisão: Vizinhos do Vinho5Avaliando Classificadores
A Matriz de ConfusãoPrecisão e RevocaçãoA Pontuação F1Classes DesbalanceadasCurvas ROCRecapitulação: Teste de Triagem8Validação Cruzada
Validação K-FoldComparando Modelos de Forma JustaBusca em GradeRevisão: Consertos de Skate11Projeto: Espécies de Pinguins
Conheça os PinguinsPrepare os DadosEscolha um ModeloAjuste o VencedorColoque o Modelo em Produção3Regressão Linear
Prevendo númerosVárias característicasMedindo errosGráficos de resíduosRevisão: aluguel de bicicletas6Árvores de Decisão
Árvores fazem perguntasLendo uma árvoreProfundidade da árvoreImportância das característicasRevisão: decisões de empréstimoPratique por conta própria: Compilador de Python online