Menu
CoddyTech

Busca em Grade

Parte da seção Aprendizado supervisionado do Journey de Machine Learning da Coddy. Lição 39 de 58.

Ajustar manualmente significa aninhar loops. O GridSearchCV valida cruzadamente cada combinação de configurações e mantém a melhor. Para 300 viagens de bonde, atrasado ou no horário:

Uma grade 3 por 3 de acurácias médias: profundidade da árvore 2, 4, 6 na lateral; menor número de linhas por folha 1, 5, 20 na parte superior. A melhor célula, profundidade 4 com folha 5, obtém 0.876 e está emoldurada

Um dicionário associa cada configuração aos valores a testar. min_samples_leaf é o menor número de linhas que uma folha pode conter:

from sklearn.model_selection import GridSearchCV

grid = {"max_depth": [2, 4, 6], "min_samples_leaf": [1, 5, 20]}
search = GridSearchCV(DecisionTreeClassifier(random_state=0), grid, cv=5)
search.fit(X_train, y_train)
print(search.best_params_)
print(f"{search.best_score_:.3f}")
print(f"{search.score(X_test, y_test):.3f}")

Isso imprime:

{'max_depth': 4, 'min_samples_leaf': 5}
0.876
0.813

A busca ajusta novamente o vencedor com todas as linhas de treinamento, então search.score o testa uma vez. Mantenha as grades pequenas: cada célula custa 5 ajustes.

challenge icon

Desafio

Médio

Uma equipe de satélites classifica pixels como nuvem ou céu limpo usando k-NN. O programa lê o maior k a testar; o código inicial divide os dados.

  1. Faça uma busca em grade para cada k ímpar de 1 até esse número, com weights "uniform" ou "distance" (vizinhos mais próximos contam mais), cv=5.
  2. Imprima as melhores configurações, sua acurácia validada cruzadamente e a acurácia de teste, com 3 casas decimais.

Para outros pixels e 7:

Best k: 7, weights: distance
Cross-validated accuracy: 0.885
Test accuracy: 0.800

Experimente você mesmo

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.neighbors import KNeighborsClassifier

max_k = int(input())

# Não altere as linhas abaixo: 360 pixels de satélite, 4 leituras de luz para cada um; o rótulo 1 significa nuvem
X, y = make_classification(n_samples=360, n_features=4, n_informative=3, n_redundant=0,
                           flip_y=0.08, class_sep=0.7, random_state=1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)

# Escreva seu código abaixo
quiz iconTeste seus conhecimentos

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

Pratique por conta própria: Compilador de Python online