Menu
CoddyTech

Búsqueda en cuadrícula

Parte de la sección Aprendizaje supervisado del Journey de Machine Learning de Coddy. Lección 39 de 58.

Ajustar a mano significa anidar bucles. GridSearchCV valida de forma cruzada cada combinación de configuraciones y conserva la mejor. Para 300 viajes en tranvía, con retraso o a tiempo:

Una cuadrícula de 3 por 3 de exactitudes medias: profundidad del árbol 2, 4, 6 en el lateral; menor cantidad de filas por hoja 1, 5, 20 en la parte superior. La mejor celda, profundidad 4 con hoja 5, obtiene 0.876 y está enmarcada

Un diccionario asigna a cada configuración los valores que se probarán. min_samples_leaf es la menor cantidad de filas que puede contener una hoja:

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}")

Esto imprime:

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

La búsqueda vuelve a ajustar el ganador con todas las filas de entrenamiento, así que search.score lo prueba una vez. Mantén las cuadrículas pequeñas: cada celda cuesta 5 ajustes.

challenge icon

Desafío

Intermedio

Un equipo de satélites etiqueta los píxeles como nube o cielo despejado con k-NN. El programa lee el valor máximo de k que se probará; el código inicial divide los datos.

  1. Haz una búsqueda en cuadrícula de todos los valores impares de k desde 1 hasta ese número, con weights "uniform" o "distance" (los vecinos más cercanos cuentan más), cv=5.
  2. Muestra la mejor configuración, su precisión validada de forma cruzada y la precisión de prueba, con 3 decimales.

Para otros píxeles y 7:

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

Pruébalo tú mismo

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

max_k = int(input())

# No cambies las líneas siguientes: 360 píxeles de satélite, 4 lecturas de luz cada uno; la etiqueta 1 significa nube
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)

# Escribe tu código a continuación
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Aprendizaje supervisado

Practica por tu cuenta: Compilador de Python online