Algoritmo KNN: búsqueda de vecinos más cercanos
Introducción
El algoritmo de vecinos más cercanos K (KNN) es un tipo de algoritmo ML supervisado que se puede utilizar tanto para la clasificación como para los problemas de predicción de regresión. Sin embargo, se utiliza principalmente para problemas de predicción de clasificación en la industria. Las siguientes dos propiedades definirían bien a KNN:
Lazy learning algorithm - KNN es un algoritmo de aprendizaje perezoso porque no tiene una fase de entrenamiento especializada y utiliza todos los datos para entrenar durante la clasificación.
Non-parametric learning algorithm - KNN también es un algoritmo de aprendizaje no paramétrico porque no asume nada sobre los datos subyacentes.
Funcionamiento del algoritmo KNN
El algoritmo de K-vecinos más cercanos (KNN) utiliza la 'similitud de características' para predecir los valores de nuevos puntos de datos, lo que significa además que al nuevo punto de datos se le asignará un valor en función de qué tan cerca coincida con los puntos del conjunto de entrenamiento. Podemos entender su funcionamiento con la ayuda de los siguientes pasos:
Step 1- Para implementar cualquier algoritmo, necesitamos un conjunto de datos. Entonces, durante el primer paso de KNN, debemos cargar el entrenamiento y los datos de prueba.
Step 2- A continuación, debemos elegir el valor de K, es decir, los puntos de datos más cercanos. K puede ser cualquier número entero.
Step 3 - Para cada punto de los datos de prueba, haga lo siguiente:
3.1- Calcule la distancia entre los datos de prueba y cada fila de datos de entrenamiento con la ayuda de cualquiera de los métodos, a saber: distancia euclidiana, Manhattan o Hamming. El método más utilizado para calcular la distancia es el euclidiano.
3.2 - Ahora, según el valor de la distancia, ordénelos en orden ascendente.
3.3 - A continuación, elegirá las K filas superiores de la matriz ordenada.
3.4 - Ahora, asignará una clase al punto de prueba según la clase más frecuente de estas filas.
Step 4 - Fin
Ejemplo
El siguiente es un ejemplo para comprender el concepto de K y el funcionamiento del algoritmo KNN:
Supongamos que tenemos un conjunto de datos que se puede trazar de la siguiente manera:
Ahora, necesitamos clasificar el nuevo punto de datos con un punto negro (en el punto 60, 60) en clase azul o roja. Suponemos K = 3, es decir, encontraría los tres puntos de datos más cercanos. Se muestra en el siguiente diagrama:
Podemos ver en el diagrama de arriba los tres vecinos más cercanos del punto de datos con un punto negro. Entre esos tres, dos de ellos se encuentran en la clase roja, por lo que el punto negro también se asignará en la clase roja.
Implementación en Python
Como sabemos, el algoritmo de K-vecinos más cercanos (KNN) se puede utilizar tanto para la clasificación como para la regresión. Las siguientes son las recetas en Python para usar KNN como clasificador y regresor:
KNN como clasificador
Primero, comience con la importación de los paquetes de Python necesarios:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
A continuación, descargue el conjunto de datos de iris de su enlace web de la siguiente manera:
path = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
A continuación, debemos asignar nombres de columna al conjunto de datos de la siguiente manera:
headernames = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'Class']
Ahora, necesitamos leer el conjunto de datos en el marco de datos de pandas de la siguiente manera:
dataset = pd.read_csv(path, names=headernames)
dataset.head()
Si. No. | longitud del sépalo | ancho del sépalo | largo de pétalo | ancho de pétalo | Clase |
---|---|---|---|---|---|
0 | 5.1 | 3,5 | 1.4 | 0,2 | Iris-setosa |
1 | 4.9 | 3,0 | 1.4 | 0,2 | Iris-setosa |
2 | 4.7 | 3.2 | 1.3 | 0,2 | Iris-setosa |
3 | 4.6 | 3.1 | 1,5 | 0,2 | Iris-setosa |
4 | 5,0 | 3.6 | 1.4 | 0,2 | Iris-setosa |
El preprocesamiento de datos se realizará con la ayuda de las siguientes líneas de script:
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 4].values
A continuación, dividiremos los datos en tren y prueba. El siguiente código dividirá el conjunto de datos en un 60% de datos de entrenamiento y un 40% de datos de prueba:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.40)
A continuación, el escalado de datos se realizará de la siguiente manera:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
A continuación, entrene el modelo con la ayuda de la clase KNeighborsClassifier de sklearn de la siguiente manera:
from sklearn.neighbors import KNeighborsClassifier
classifier = KNeighborsClassifier(n_neighbors=8)
classifier.fit(X_train, y_train)
Por fin necesitamos hacer predicciones. Se puede hacer con la ayuda del siguiente script:
y_pred = classifier.predict(X_test)
A continuación, imprima los resultados de la siguiente manera:
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
result = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:")
print(result)
result1 = classification_report(y_test, y_pred)
print("Classification Report:",)
print (result1)
result2 = accuracy_score(y_test,y_pred)
print("Accuracy:",result2)
Salida
Confusion Matrix:
[[21 0 0]
[ 0 16 0]
[ 0 7 16]]
Classification Report:
precision recall f1-score support
Iris-setosa 1.00 1.00 1.00 21
Iris-versicolor 0.70 1.00 0.82 16
Iris-virginica 1.00 0.70 0.82 23
micro avg 0.88 0.88 0.88 60
macro avg 0.90 0.90 0.88 60
weighted avg 0.92 0.88 0.88 60
Accuracy: 0.8833333333333333
KNN como regresor
Primero, comience con la importación de los paquetes de Python necesarios:
import numpy as np
import pandas as pd
A continuación, descargue el conjunto de datos de iris de su enlace web de la siguiente manera:
path = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
A continuación, debemos asignar nombres de columna al conjunto de datos de la siguiente manera:
headernames = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'Class']
Ahora, necesitamos leer el conjunto de datos en el marco de datos de pandas de la siguiente manera:
data = pd.read_csv(url, names=headernames)
array = data.values
X = array[:,:2]
Y = array[:,2]
data.shape
output:(150, 5)
A continuación, importe KNeighborsRegressor de sklearn para que se ajuste al modelo:
from sklearn.neighbors import KNeighborsRegressor
knnr = KNeighborsRegressor(n_neighbors=10)
knnr.fit(X, y)
Por fin, podemos encontrar el MSE de la siguiente manera:
print ("The MSE is:",format(np.power(y-knnr.predict(X),2).mean()))
Salida
The MSE is: 0.12226666666666669
Pros y contras de KNN
Pros
Es un algoritmo muy sencillo de entender e interpretar.
Es muy útil para datos no lineales porque no hay suposiciones sobre los datos en este algoritmo.
Es un algoritmo versátil, ya que podemos usarlo tanto para clasificación como para regresión.
Tiene una precisión relativamente alta, pero hay modelos de aprendizaje supervisado mucho mejores que KNN.
Contras
Es un algoritmo computacionalmente un poco caro porque almacena todos los datos de entrenamiento.
Se requiere un alto almacenamiento de memoria en comparación con otros algoritmos de aprendizaje supervisado.
La predicción es lenta en el caso de grandes N.
Es muy sensible a la escala de los datos y a las características irrelevantes.
Aplicaciones de KNN
Las siguientes son algunas de las áreas en las que KNN se puede aplicar con éxito:
Sistema bancario
KNN se puede utilizar en el sistema bancario para predecir si un individuo es apto para la aprobación de un préstamo. ¿Ese individuo tiene características similares al de los morosos?
Calcular calificaciones crediticias
Los algoritmos KNN se pueden utilizar para encontrar la calificación crediticia de un individuo comparándolo con personas que tienen rasgos similares.
Política
Con la ayuda de los algoritmos KNN, podemos clasificar a un votante potencial en varias clases como “Votará”, “No votará”, “Votará para el partido 'Congreso',“ Votará para el partido 'BJP'.
Otras áreas en las que se puede utilizar el algoritmo KNN son el reconocimiento de voz, la detección de escritura a mano, el reconocimiento de imágenes y el reconocimiento de video.