Entrenar un modelo K-NN

| Última modificación: 16 de abril de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

¿Sabes cómo entrenar un modelo K-NN? En este artículo te enseñamos cómo hacerlo.

Recordemos que el modelo K-NN o k-nearest neighbors (algoritmo de vecinos más cercanos) es un algoritmo que determina que los datos que se ingresan en un dataset existente se deben almacenar con el grupo de datos de los datos que más se le parezcan.

¿Cómo entrenar un modelo K-NN?

#Entrenar un modelo K-NN
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

#Ejemplo 1
#preparamos los datos
data1 = ejemplo1.values
x1 = data1 [ : , 0 : 2]
y1 = data1 [ : , - 1 ]

#Entrenar un modelo K-NN
#creamos el modelo y ajustamos
knnModel = KNeighborsClassifier (n_neighbors = 1)
knnModel, fit (x1, y1)

plot_decision_boundary (X1, y1, 0.05, knnModel)

Lo primero que hacemos es importar el modelo y su métrica.

Hay que tener en cuenta que estamos trabajando con Pandas.

Si ponemos un type:

type (e2)

El resultado es un dataframe:

pandas.core.frame.DataFrame

Los modelos de scikit-learn no funcionan con dataframe, sino con arrays de numpy.

Lo bueno es que es muy fácil convertir un dataframe a un array de numpy.

type (ejemplo1)

pandas.Core.frame.DataFrame

Si hacemos lo anterior, tenemos claro que el resultado es un dataframe.

No obstante, si hacemos lo siguiente sabremos que el resultado ya no es un array:

type (ejemplo1.values)

numpy.ndarray

Es decir, lo único que tendremos que hacer si queremos pasar un dataframe y convertirlo en un array de numpy es copiar lo siguiente:

data1 = ejemplo1.values

Continuando con el ejercicio, x1 es igual a data1 [ : , 0 : 2] porque queremos todas las filas, pero solo queremos las columnas de la 0 a la 2, dado que no queremos label, que es la columna 3. En cuanto a y, es únicamente la variable objetivo.

El siguiente paso es crear el modelo. En este caso, hemos declarado un KNeighborsClassifier. Número de vecinos igual a 1, el dot fit y con eso ya hemos terminado.

El resultado que obtenemos de todo este ejercicio es:

entrenar un modelo k-nn

Vemos cómo, en ambos gráficos, el accuracy es 1; la frontera es perfecta. La separación se puede ver claramente entre la clase roja y la clase azul.

En cuanto al número de vecinos, podemos modificar el número de vecinos l del algoritmo k-nn implementado en scikit-learn mediante el parámetro n_neighbors. Por defecto, scikit-learn toma n_neighbors = 5

¿Qué pasa si varía el valor de n_neighbors?

#Entrenar un modelo K-NN
data1 = ejemplo1.values
x1 = data1 [ : , 0 : 2]
y1 = data1 [ : , - 1 ]

#creamos el modelo y ajustamos
knnModel = KNeighborsClassifier (n_neighbors = 5)
knnModel, fit (x1, y1)

plot_decision_boundary (X1, y1, 0.05, knnModel)

Aquí lo cambiamos a 5. Veamos:

Al aumentar el número de vecinos, hemos perdido accuracy. Recordemos que antes el accuracy estaba en 1, ahora está en 0.92.

Si miramos detenidamente, la línea que se observa no es muy diferente a la anterior, pero observamos que esta última es más recta, menos picuda y, por tanto, menos adaptada a los datos reales.

Esto quiere decir que con este último modelo, donde ponemos el n_neighbors en 5, tenemos más errores, pero un modelo más simple.

El gráfico que vemos a la derecha es la probabilidad. Esto generalmente no se ve, pero aquí nos sirve para entender que el algoritmo distingue una zona que es claramente roja, otra que evidentemente es azul y los demás son distintos matices, datos que pueden llegar a cruzarse.

¿Y qué pasaría si subiéramos el n_neighbors a 10? Por supuesto el accuracy bajaría más, la recta se suavizaría y nos acercaríamos más a un modelo simplificado, que no es tan complejo.

Esto por lo general es bueno, pero siempre se debe buscar un equilibrio. Este equilibrio se debe dar entre sesgo y varianza.

Ahora que hemos aprendido cómo entrenar un modelo K-NN, es el momento de aplicarlo en tus propios proyectos. Aun así, todavía queda mucho más por aprender y, para ello, te invitamos a inscribirte en nuestro Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, una formación intensiva en la que aprenderás fundamentación teórica y práctica y adquirirás todos los conocimientos necesarios para incursionar en el mundo de la analítica de datos y el Big Data. En KeepCoding tenemos a los mejores profesionales para que te acompañen en tu proceso formativo y puedas lograr tus objetivos. ¡Anímate y solicita más información!

Sandra Navarro

Business Intelligence & Big Data Advisor & Coordinadora del Bootcamp en Data Science, Big Data & Machine Learning.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado