K Vecinos más Cercanos – Práctica con Python

En esta entrada vamos a explicar como poner en práctica el algoritmo de K vecinos más cercanos. Recuerda que la parte teórica fue explicada con anterioridad, así como también la configuración con la librería de Python scikit learn.

Para este proyecto vamos a continuar utilizando el conjunto de datos del cáncer de seno o BreastCancer que se encuentra disponible dentro de la librería scikit learn.

Este es el mismo conjunto de datos que utilizamos para la parte práctica del algoritmo de Regresión Logística acá importamos los datos y realizamos el respectivo preprocesamiento de los datos, por tal razón acá solamente nos enfocaeremos en cómo implementar el algoritmo de K vecinos más cercanos. Te recomiendo que veas la información publicada en ese contenido en caso de que quieras conocer más como hacer la primera parte de este proyecto.

En este punto ya hemos separados los datos de “X”, correspondiente a data y los datos de “y” correspondiente a target, ahora nos toca separar los datos en entrenamiento y prueba, para esto importamos de sklearn el modulo train_test_split y lo aplicamos para realizar la separación respectiva.

from sklearn.model_selection import train_test_split

#Separo los datos de "train" en entrenamiento y prueba para probar los algoritmos
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

Con esto ya estamos listo para empezar a desarrollar nuestro modelo. Por tal motivo importamos el algoritmo que se encuentra dentro de “skelarn.neighbors”, importamos KNeighborsClassifier.

#Defino el algoritmo a utilizar
from sklearn.neighbors import KNeighborsClassifier

algoritmo = KNeighborsClassifier(n_neighbors = 5, metric = 'minkowski', p = 2)

Realizado esto definamos nuestro algoritmo y lo configuramos acá le indicamos que “k” o el número de vecinos será igual a 5, la métrica será “minkowski” y “p” será igual a 2. Recuerda que la combinación de estos dos elementos le indica al algoritmo que utilizará la distancia Euclidiana para verificar la disntacia entre los vecinos, esto fue explicado anteriormente.

Si te fijas estos son los datos predeterminado con los que viene configurado el algoritmo si lo deseas puedes eliminar esta configuración y dejar el paréntesis vacío, pero lo hago así para que posteriormente tu puedas realizar cambios y ajustes para mejorar el modelo.

Definido el algoritmo ahora entrenamos el modelo utilizando los datos de entrenamiento.

#Entreno el modelo
algoritmo.fit(X_train, y_train)

Y realizamos una predicción utilizando los datos de prueba.

#Realizo una predicción
y_pred = algoritmo.predict(X_test)

Si comparamos los datos calculados con los datos reales podemos observar que la gran mayoría coincide mientras que algunos no, pero en su mayoría si coinciden, por lo que a simple vista se puede determinar que el modelo desarrolla es bueno.

Pero veamos si esto es cierto, para cualculemos la matriz de confusión, para esto importamos de metrics de sklean el método cofusion_matrix y lo implementamos junto con los datos predichos y los datos reales.

#Verifico la matriz de Confusión
from sklearn.metrics import confusion_matrix

matriz = confusion_matrix(y_test, y_pred)
print('Matriz de Confusión:')
print(matriz)

KNNPRACTICA1

Como podemos observar fueron muy pocos los datos que no fueron predichos correctamente, recuerda que los datos ubicados en la diagonal principal son los datos predichos correctamente mientras que en la diagonal secundaria son los errores.  Por lo que si sumamos estos elementos obtuvimos 109 datos correctos y tan solo 5 datos incorrectos.

Veamos ahora la precisión del modelo, para ello importamos “precision_score” de metrics y la implementamos junto con los datos predichos y los reales.

#Calculo la precisión del modelo
from sklearn.metrics import precision_score

precision = precision_score(y_test, y_pred)
print('Precisión del modelo:')
print(precision)

KNNPRACTICA12png

El resultado de este calculo es de 0,974, este es un valor bastante aceptable.

Con esto podemos concluir que con este algoritmo podemos obtener muy buenos resultados con este conjunto de datos. Ya queda de tu parte si deseas mejorarlo y ver si es posible obtener algo más preciso, para ello puedes modificar los datos de la configuración del algoritmo.

A continuación se encuentra el programa completo:

"""
K Vecinos más Cercanos

@author: ligdigonzalez
"""

########## LIBRERÍAS A UTILIZAR ##########

#Se importan la librerias a utilizar
from sklearn import datasets

########## PREPARAR LA DATA ##########

#Importamos los datos de la misma librería de scikit-learn
dataset = datasets.load_breast_cancer()
print(dataset)

########## ENTENDIMIENTO DE LA DATA ##########

#Verifico la información contenida en el dataset
print('Información en el dataset:')
print(dataset.keys())
print()

#Verifico las características del dataset
print('Características del dataset:')
print(dataset.DESCR)

#Seleccionamos todas las columnas
X = dataset.data

#Defino los datos correspondientes a las etiquetas
y = dataset.target

########## IMPLEMENTACIÓN DE K VECINOS MÁS CERCANOS ##########

from sklearn.model_selection import train_test_split

#Separo los datos de "train" en entrenamiento y prueba para probar los algoritmos
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

#Defino el algoritmo a utilizar
from sklearn.neighbors import KNeighborsClassifier

algoritmo = KNeighborsClassifier(n_neighbors = 5, metric = 'minkowski', p = 2)

#Entreno el modelo
algoritmo.fit(X_train, y_train)

#Realizo una predicción
y_pred = algoritmo.predict(X_test)

#Verifico la matriz de Confusión
from sklearn.metrics import confusion_matrix

matriz = confusion_matrix(y_test, y_pred)
print('Matriz de Confusión:')
print(matriz)

#Calculo la precisión del modelo
from sklearn.metrics import precision_score

precision = precision_score(y_test, y_pred)
print('Precisión del modelo:')
print(precision)

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *