Ajusta el modelo ganador
Parte de la sección Aprendizaje supervisado del Journey de Machine Learning de Coddy. Lección 53 de 58.
k-NN ganó con su valor predeterminado de 5 vecinos. ¿Otro valor de k clasificaría mejor a los pingüinos? Una búsqueda en cuadrícula evalúa cada valor de k que indiques mediante validación cruzada, como en este caso con escáneres de tumores:
Al igual que en Ajustar una canalización, k recibe el nombre de su paso:
{"kneighborsclassifier__n_neighbors": [3, 5, 7]}Una mejora menor que la desviación estándar de los pliegues puede deberse a la suerte. Además, el ajuste también usa solo las filas de entrenamiento.
Desafío
IntermedioTu canalización k-NN es pipe, y default contiene su precisión de validación cruzada con k = 5. El programa lee en ks los valores de k que se probarán.
- Haz una búsqueda en cuadrícula con esos valores y 5 particiones en las filas de entrenamiento.
- Imprime el mejor valor de k y su precisión de validación cruzada, con 3 decimales.
- Imprime la mejora respecto a k = 5, con 3 decimales.
Para otra colonia y la cuadrícula 3, 5, 9:
Best k: 3
CV accuracy: 0.969
Gain over k = 5: 0.009Después prueba solo valores grandes, como 21 a 27. ¿Ajustar los hiperparámetros siempre ayuda?
Pruébalo tú mismo
import pandas as pd
from sklearn.model_selection import train_test_split, cross_val_score, GridSearchCV
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import make_pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.neighbors import KNeighborsClassifier
# La colonia de Meet the Penguins, sus características y su etiqueta
penguins = pd.read_csv("penguins.csv")
numbers = ["bill_length_mm", "bill_depth_mm", "flipper_length_mm", "body_mass_g"]
text = ["island", "sex"]
X = penguins[numbers + text]
y = penguins["species"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, stratify=y, random_state=0)
# De Prepare the Data: las dos vías
number_steps = make_pipeline(SimpleImputer(strategy="median"), StandardScaler())
text_steps = make_pipeline(SimpleImputer(strategy="constant", fill_value="unknown"), OneHotEncoder())
prep = ColumnTransformer([("numbers", number_steps, numbers), ("words", text_steps, text)])
# De Choose a Model: el ganador, k-NN con su valor predeterminado de k = 5
pipe = make_pipeline(prep, KNeighborsClassifier())
default = cross_val_score(pipe, X_train, y_train, cv=5).mean()
# Los valores de k que se probarán
n = int(input())
ks = []
for i in range(n):
ks.append(int(input()))
# 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