Menu
CoddyTech

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:

Exactitud media de validación cruzada de k-NN en escáneres de tumores para valores de k de 1 a 29: alcanza su punto máximo en k = 3 con 0.974, marcado con una estrella, y luego desciende gradualmente hasta 0.946 en k = 29

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.

challenge icon

Desafío

Intermedio

Tu 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.

  1. Haz una búsqueda en cuadrícula con esos valores y 5 particiones en las filas de entrenamiento.
  2. Imprime el mejor valor de k y su precisión de validación cruzada, con 3 decimales.
  3. 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.009

Despué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
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