K Vecino más cercano | Algoritmo KNN

Share on facebook
Share on twitter
Share on linkedin
Share on telegram
Share on whatsapp

Contenidos

Nota: Este artículo se publicó originalmente el 10 de octubre de 2014 y se actualizó el 27 de marzo de 2018.

Visión general

  • Comprender k vecino más cercano (KNN): uno de los algoritmos de aprendizaje automático más populares
  • Aprenda el funcionamiento de kNN en python
  • Elija el valor correcto de k en lenguaje sencillo

Introducción

En los cuatro años de mi carrera de ciencia de datos, He construido más del 80% de modelos de clasificación y solo un 15-20% de modelos de regresión. Estas proporciones pueden generalizarse más o menos en toda la industria. La razón detrás de este sesgo hacia modelos de clasificación es que la mayoría de los problemas analíticos implican tomar una decisión.

Por ejemplo, si un cliente se desgastará o no, si nos dirigimos al cliente X para campañas digitales, si el cliente tiene un alto potencial o no, etc. Estos análisis son más perspicaces y están directamente vinculados a una hoja de ruta de implementación.

knn3-8559996

En este artículo, hablaremos sobre otro aprendizaje automático ampliamente utilizado. técnica de clasificaciónmi llamados vecinos K-más cercanos (KNN). Nuestro enfoque estará principalmente en cómo funciona el algoritmo y cómo el parámetro de entrada afecta la salida / predicción.

Nota: Las personas que prefieren aprender a través de videos pueden aprender lo mismo a través de nuestro curso gratuito – Algoritmo K-Vecinos más cercanos (KNN) en Python y R. Y si es un principiante absoluto en la ciencia de datos y el aprendizaje automático, consulte nuestro programa Certified BlackBelt:

Tabla de contenido

  • ¿Cuándo usamos el algoritmo KNN?
  • ¿Cómo funciona el algoritmo KNN?
  • ¿Cómo elegimos el factor K?
  • Breaking it Down – Pseudo código de KNN
  • Implementación en Python desde cero
  • Comparando nuestro modelo con scikit-learn

¿Cuándo usamos el algoritmo KNN?

KNN se puede utilizar para problemas predictivos de clasificación y regresión. Sin embargo, se usa más ampliamente en problemas de clasificación en la industria. Para evaluar cualquier técnica, generalmente nos fijamos en 3 aspectos importantes:

1. Facilidad para interpretar la salida

2. Tiempo de cálculo

3. Poder predictivo

Tomemos algunos ejemplos para colocar KNN en la escala:

model-comparison-1354057Ferias de algoritmos KNN a través de todos los parámetros de consideraciones. Se utiliza comúnmente por su fácil interpretación y bajo tiempo de cálculo.

¿Cómo funciona el algoritmo KNN?

Tomemos un caso sencillo para entender este algoritmo. A continuación se muestra una extensión de círculos rojos (RC) y cuadrados verdes (GS):

scenario1-2967997Tiene la intención de averiguar la clase de la estrella azul (BS). BS puede ser RC o GS y nada más. El algoritmo «K» es KNN es el vecino más cercano al que deseamos votar. Digamos que K = 3. Por lo tanto, ahora haremos un círculo con BS como centro tan grande como para encerrar solo tres puntos de datos en el plano. Consulte el siguiente diagrama para obtener más detalles:

scenario2-2483947 Los tres puntos más cercanos a BS son todos RC. Por tanto, con un buen nivel de confianza, podemos decir que el BS debería pertenecer a la clase RC. Aquí, la elección se hizo muy obvia ya que los tres votos del vecino más cercano fueron para RC. La elección del parámetro K es muy importante en este algoritmo. A continuación, entenderemos cuáles son los factores a considerar para concluir el mejor K.

¿Cómo elegimos el factor K?

Primero intentemos comprender qué es exactamente lo que influye K en el algoritmo. Si vemos el último ejemplo, dado que las 6 observaciones de entrenamiento permanecen constantes, con un valor de K dado podemos establecer límites para cada clase. Estos límites separarán RC de GS. De la misma manera, intentemos ver el efecto del valor «K» en los límites de la clase. Los siguientes son los diferentes límites que separan las dos clases con diferentes valores de K.

k-judgement-4044801

k-judgement2-3183925

Si observa con atención, puede ver que el límite se vuelve más suave al aumentar el valor de K. Con K aumentando hasta el infinito, finalmente se vuelve todo azul o todo rojo, dependiendo de la mayoría total. La tasa de error de entrenamiento y la tasa de error de validación son dos parámetros que necesitamos para acceder a diferentes valores K. A continuación se muestra la curva para la tasa de error de entrenamiento con un valor variable de K:

training-error-6116377Como puede ver, la tasa de error en K = 1 siempre es cero para la muestra de entrenamiento. Esto se debe a que el punto más cercano a cualquier punto de datos de entrenamiento es él mismo, por lo que la predicción siempre es precisa con K = 1. Si la curva de error de validación hubiera sido similar, nuestra elección de K habría sido 1. A continuación se muestra la curva de error de validación con un valor variable de K:

training-error_11-9737814Esto aclara la historia. En K = 1, estábamos sobreajustando los límites. Por tanto, la tasa de error inicialmente disminuye y alcanza un mínimo. Después del punto mínimo, aumenta al aumentar K. Para obtener el valor óptimo de K, puede segregar el entrenamiento y la validación del conjunto de datos inicial. Ahora trace la curva de error de validación para obtener el valor óptimo de K. Este valor de K debe usarse para todas las predicciones.

El contenido anterior se puede entender de forma más intuitiva utilizando nuestro curso gratuito: Algoritmo de vecinos más cercanos (KNN) en Python y R

Breaking it Down – Pseudo código de KNN

Podemos implementar un modelo KNN siguiendo los pasos a continuación:

  1. Cargar los datos
  2. Inicializar el valor de k
  3. Para obtener la clase predicha, repita desde 1 hasta el número total de puntos de datos de entrenamiento
    1. Calcule la distancia entre los datos de prueba y cada fila de datos de entrenamiento. Aquí usaremos la distancia euclidiana como nuestra métrica de distancia, ya que es el método más popular. Las otras métricas que se pueden utilizar son Chebyshev, coseno, etc.
    2. Ordene las distancias calculadas en orden ascendente según los valores de distancia
    3. Obtenga las primeras k filas de la matriz ordenada
    4. Obtenga la clase más frecuente de estas filas
    5. Devuelve la clase predicha

Implementación en Python desde cero

Usaremos el popular conjunto de datos Iris para construir nuestro modelo KNN. Puedes descargarlo desde aquí.

Comparando nuestro modelo con scikit-learn

from sklearn.neighbors import KNeighborsClassifier
neigh = KNeighborsClassifier(n_neighbors=3)
neigh.fit(data.iloc[:,0:4], data['Name'])

# Predicted class
print(neigh.predict(test))

-> ['Iris-virginica']

# 3 nearest neighbors
print(neigh.kneighbors(test)[1])
-> [[141 139 120]]

Podemos ver que ambos modelos predijeron la misma clase (‘Iris-virginica’) y los mismos vecinos más cercanos ( [141 139 120] ). Por lo tanto, podemos concluir que nuestro modelo funciona como se esperaba.

Implementación de kNN en R

Paso 1: importar los datos

Paso 2: verificar los datos y calcular el resumen de datos

Producción

#Top observations present in the data
SepalLength SepalWidth PetalLength PetalWidth Name
1 5.1 3.5 1.4 0.2 Iris-setosa
2 4.9 3.0 1.4 0.2 Iris-setosa
3 4.7 3.2 1.3 0.2 Iris-setosa
4 4.6 3.1 1.5 0.2 Iris-setosa
5 5.0 3.6 1.4 0.2 Iris-setosa
6 5.4 3.9 1.7 0.4 Iris-setosa

#Check the dimensions of the data
[1] 150 5

#Summarise the data
SepalLength SepalWidth PetalLength PetalWidth Name 
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100 Iris-setosa :50 
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300 Iris-versicolor:50 
Median :5.800 Median :3.000 Median :4.350 Median :1.300 Iris-virginica :50 
Mean :5.843 Mean :3.054 Mean :3.759 Mean :1.199 
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800 
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500 

Paso 3: dividir los datos

Paso 4: Calcular la distancia euclidiana

Paso 5: escribir la función para predecir kNN

Paso 6: Cálculo de la etiqueta (Nombre) para K = 1

Producción

For K=1
[1] "Iris-virginica"

De la misma manera, puede calcular otros valores de K.

Comparación de nuestra función de predicción kNN con la biblioteca «Clase»

Producción

For K=1
[1] "Iris-virginica"

Podemos ver que ambos modelos predijeron la misma clase (‘Iris-virginica’).

Notas finales

El algoritmo KNN es uno de los algoritmos de clasificación más simples. Incluso con tanta simplicidad, puede dar resultados altamente competitivos. El algoritmo KNN también se puede utilizar para problemas de regresión. La única diferencia con la metodología discutida será el uso de promedios de los vecinos más cercanos en lugar de votar por los vecinos más cercanos. KNN se puede codificar en una sola línea en R. Todavía tengo que explorar cómo podemos usar el algoritmo KNN en SAS.

¿Le resultó útil el artículo? ¿Ha utilizado alguna otra herramienta de aprendizaje automático recientemente? ¿Planea utilizar KNN en alguno de sus problemas comerciales? Si es así, cuéntenos cómo planea hacerlo.

Si le gusta lo que acaba de leer y desea continuar su aprendizaje analítico, suscríbete a nuestros correos electrónicos, Síguenos en Twitter o como nuestro Facebook página.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.