Conjuntos de validação
Parte da seção Aprendizado supervisionado do Journey de Machine Learning da Coddy. Lição 35 de 58.
Em Escolhendo k e a profundidade da árvore, você manteve o k ou a profundidade com a melhor pontuação no teste. Essa pontuação é enganosa: você a manteve porque foi alta.
Então mantenha um terceiro conjunto para escolher, o conjunto de validação:
Dois particionamentos resolvem. 0.25 dos 80% restantes corresponde a 20%:
X_rest, X_test, y_rest, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
X_train, X_val, y_train, y_val = train_test_split(X_rest, y_rest, test_size=0.25, random_state=0)
print(len(X_train), len(X_val), len(X_test))Para 500 linhas, ele imprime:
300 100 100Escolha com base na validação. Use o conjunto de teste uma única vez, no final.
Desafio
MédioUm vinhedo prevê a produção de uvas por fileira com Ridge. O código inicial escolhe alpha pela pontuação de teste e informa essa mesma pontuação. Corrija-o.
- Divida
X_restey_restem linhas de treinamento e validação (test_size=0.25,random_state=0). - Escolha alpha com base no R ao quadrado da validação e imprima-o junto com essa pontuação.
- Ajuste o alpha escolhido usando as linhas de treinamento e imprima seu R ao quadrado de teste.
Para outro vinhedo:
Chosen alpha: 1 (validation R squared 0.787)
Test R squared: 0.726A pontuação honesta costuma ser menor que a do código inicial. Ela é a verdadeira.
Experimente você mesmo
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Ridge
# Ajusta um Ridge(alpha) com dados padronizados no primeiro conjunto de linhas e retorna seu R² no segundo
def ridge_r2(alpha, X_fit, y_fit, X_check, y_check):
scaler = StandardScaler()
model = Ridge(alpha=alpha)
model.fit(scaler.fit_transform(X_fit), y_fit)
return model.score(scaler.transform(X_check), y_check)
# 90 linhas de dados do vinhedo: 10 medições cada e a produção de uvas em kg
rows = pd.read_csv("vineyard.csv")
features = ["sun_hours", "rain_mm", "soil_ph", "slope_deg", "vine_age",
"row_length_m", "buds_per_vine", "frost_days", "wind_kmh", "clay_pct"]
X = rows[features]
y = rows["yield_kg"]
alphas = [0.1, 1, 10, 100]
X_rest, X_test, y_rest, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# Isso escolhe alpha pela pontuação do teste e depois apresenta essa mesma pontuação: corrija isso
best_alpha = 0
best_r2 = -1
for alpha in alphas:
r2 = ridge_r2(alpha, X_rest, y_rest, X_test, y_test)
if r2 > best_r2:
best_alpha = alpha
best_r2 = r2
print(f"Chosen alpha: {best_alpha}")
print(f"Test R squared: {best_r2:.3f}")
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