En este tutorial, vamos a explorar cómo usar el algoritmo de clasificación K vecinos más cercanos (KNN) con la técnica de búsqueda de cuadrÃcula (Grid Search) para optimizar los hiperparámetros y mejorar la precisión de nuestro modelo. Usaremos la biblioteca de aprendizaje automático de Python, Scikit-Learn, que es una herramienta poderosa para la minerÃa de datos y el aprendizaje automático.
Paso 1: Instalar Scikit-Learn
Lo primero que debemos hacer es asegurarnos de tener instalada la biblioteca Scikit-Learn en nuestro entorno de Python. Si aún no lo has hecho, puedes instalarlo usando pip:
pip install scikit-learn
Paso 2: Importar las bibliotecas necesarias
Una vez que tenemos instalada Scikit-Learn, importamos las bibliotecas necesarias en nuestro código. También importamos el dataset que vamos a utilizar para este ejercicio:
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import accuracy_score
Paso 3: Cargar y explorar el dataset
En este ejemplo, utilizaremos el dataset de Iris, que es un conjunto de datos clásico en la minerÃa de datos y el aprendizaje automático. Cargamos el dataset y exploramos sus caracterÃsticas:
iris = load_iris()
X = iris.data
y = iris.target
Paso 4: Dividir el dataset en conjuntos de entrenamiento y prueba
Antes de entrenar nuestro modelo, debemos dividir nuestro dataset en conjuntos de entrenamiento y prueba. Utilizaremos la función train_test_split
de Scikit-Learn para dividir los datos en un 70% para entrenamiento y un 30% para prueba:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
Paso 5: Escalar los datos
Es importante escalar los datos antes de aplicar el algoritmo de K vecinos más cercanos para evitar que las caracterÃsticas con magnitudes diferentes dominen el algoritmo. Utilizaremos la función StandardScaler
de Scikit-Learn para llevar todas las caracterÃsticas a la misma escala:
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
Paso 6: Entrenar el modelo KNN
Ahora estamos listos para entrenar nuestro modelo KNN. Creamos una instancia de KNeighborsClassifier
y ajustamos el modelo a nuestros datos de entrenamiento:
knn = KNeighborsClassifier()
knn.fit(X_train, y_train)
Paso 7: Evaluar el modelo sin Grid Search
Antes de aplicar Grid Search para optimizar los hiperparámetros, evaluamos la precisión de nuestro modelo KNN sin optimización de hiperparámetros utilizando el conjunto de pruebas:
y_pred = knn.predict(X_test)
print('Accuracy sin Grid Search:', accuracy_score(y_test, y_pred))
Paso 8: Aplicar Grid Search para optimizar hiperparámetros
Ahora aplicaremos la técnica de búsqueda de cuadrÃcula (Grid Search) para optimizar los hiperparámetros de nuestro modelo KNN. EspecÃficamente, optimizaremos el número de vecinos (n_neighbors) y el tipo de métrica de distancia (p) que se utiliza en el algoritmo KNN. Definimos una cuadrÃcula de parámetros para buscar:
param_grid = {
'n_neighbors': [3, 5, 7, 9],
'p': [1, 2]
}
Luego creamos una instancia de GridSearchCV
y ajustamos la cuadrÃcula a los datos de entrenamiento:
grid_search = GridSearchCV(knn, param_grid, cv=5)
grid_search.fit(X_train, y_train)
Paso 9: Evaluar el modelo con Grid Search
Una vez que se han realizado todas las combinaciones posibles de valores de hiperparámetros y se ha seleccionado el mejor modelo, evaluamos la precisión del modelo optimizado utilizando el conjunto de pruebas:
y_pred_grid = grid_search.predict(X_test)
print('Accuracy con Grid Search:', accuracy_score(y_test, y_pred_grid))
Conclusión
En este tutorial, hemos explorado cómo aplicar el algoritmo KNN con la técnica de búsqueda de cuadrÃcula (Grid Search) para optimizar los hiperparámetros de nuestro modelo y mejorar su precisión. La optimización de los hiperparámetros es una parte crucial del proceso de modelado de aprendizaje automático, ya que puede mejorar significativamente la precisión de los modelos. Espero que este tutorial te haya sido útil y te motive a explorar más sobre la minerÃa de datos y el aprendizaje automático con Scikit-Learn. ¡Buena suerte!