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:
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.813La 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.
Desafío
IntermedioUn 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.
- 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. - 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.800Prué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
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Aprendizaje supervisado
1Tu primer modelo
Aprender de ejemplosConjuntos de entrenamiento y pruebaAjustar y predecirEvaluar un modeloRepaso: clasificador de semillas4Regresión logística
Predicciones de sí o noEl umbral de decisiónLos pesos como evidenciaVarias clasesRepaso: filtro de spam2Vecinos más cercanos
Cómo decide k-NNCómo elegir kFronteras de decisiónEscalado para los vecinosRepaso: vecinos del vino5Medición de clasificadores
La matriz de confusiónPrecisión y exhaustividadLa puntuación F1Clases desequilibradasCurvas ROCRepaso: prueba de detección8Validación cruzada
Validación K-FoldComparación justa de modelosBúsqueda en cuadrículaRepaso: reparaciones de monopatines11Proyecto: especies de pingüinos
Conoce a los pingüinosPrepara los datosElige un modeloAjusta el modelo ganadorPublica el modelo3Regresión lineal
Predicción de númerosVarias característicasMedición de erroresGráficos de residuosRepaso: alquiler de bicicletas6Árboles de decisión
Los árboles hacen preguntasLeer un árbolProfundidad del árbolImportancia de las característicasRepaso: decisiones de préstamosPractica por tu cuenta: Compilador de Python online