Curvas de aprendizado
Parte da seção Aprendizado supervisionado do Journey de Machine Learning da Coddy. Lição 33 de 58.
Mais dados melhorariam seu modelo? Uma curva de aprendizado mostra isso: a acurácia de teste à medida que o conjunto de treinamento cresce. Aqui, uma árvore profunda em dados de duas luas:
A árvore memoriza cada conjunto de treinamento, mas cada linha extra ensina algo real. Modelos flexíveis são os que mais se beneficiam dos dados.
Ajuste usando as primeiras n linhas de treinamento e, em seguida, avalie nas mesmas linhas de teste a cada vez:
sizes = [25, 50, 100, 200, 400, 800]
test_scores = []
for n in sizes:
tree = DecisionTreeClassifier(random_state=0)
tree.fit(X_train[:n], y_train[:n])
test_scores.append(tree.score(X_test, y_test))
ax.plot(sizes, test_scores, marker="o")Ainda está subindo na borda direita? Mais dados ajudarão.
Desafio
MédioMais gravações ajudariam a distinguir duas espécies de coruja? O código inicial divide 600 chamados e prepara os dois modelos e o gráfico.
- Para cada
nemsizes, ajuste os dois modelos às primeirasnlinhas de treinamento; guarde suas acurácias de teste. - Imprima o ganho de cada modelo, a última pontuação menos a primeira, com 3 casas decimais.
- Trace ambos em função de
sizes, commarker="o", identificados comologisticetree, com uma legenda.
Corujas de outro bosque imprimem:
Logistic gains 0.053 from more data
Tree gains 0.160 from more datae desenham este gráfico. Em seguida, Coddy descreve o seu.
Experimente você mesmo
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
# Não altere as linhas abaixo: 600 vocalizações de corujas, frequência (Hz) e duração (s)
rng = np.random.default_rng(23)
pitch = np.round(rng.uniform(300, 900, 600))
length = np.round(rng.uniform(0.2, 2.0, 600), 2)
# Espécie 1, a coruja-do-mato, emite vocalizações mais longas para sua frequência; algumas anotações de campo estão erradas
longer = length > 0.5 + 6.4 * ((pitch - 600) / 600) ** 2
wrong_note = rng.random(600) < 0.05
species = np.where(longer != wrong_note, 1, 0)
X = np.column_stack([pitch, length])
X_train, X_test, y_train, y_test = train_test_split(X, species, test_size=0.25, random_state=0)
sizes = [25, 50, 100, 200, 400]
logistic = LogisticRegression(max_iter=1000)
tree = DecisionTreeClassifier(random_state=0)
fig, ax = plt.subplots()
ax.set_title("Owl Calls: Learning Curves")
ax.set_xlabel("Training rows")
ax.set_ylabel("Test accuracy")
# 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