Un problema clásico de clasificación: UCI Iris mediante K-NN
Se analiza el Dataset Iris de UCI para aplicar K Nearest Neighbours.
Dentro de las técnicas para clasificación en problemas no lineales, existe un grupo que utiliza la distancia entre predictores como elemento central. Esto parte de la idea de que los ejemplos que pertenecen a una misma clase, serán ciertamente más similares en cuanto a valores de los distintos predictores.
K-nearest Neighbours o simplemente K-NN, es un algoritmo para problemas de clasificación que se basa en almacenar la información del dataset y evaluar nuevos ejemplos a partir de un cálculo simple de distancia. La clase predicha de un elemento estará dada por los K elementos (previamente clasificados) más cercanos.
Contexto
Para este ejercicio se utilizará como base el Dataset Iris de UCI, el mismo es de acceso totalmente público y gratuito. En Rapidminer generaré un flujo que entrene un modelo a partir de los datos de Iris, en este caso bajo la proporción 70/30, para luego testearlo, revisar los resultados y las distintas opciones de configuración que el modelo ofrece.
Datos
El Dataset Iris es bastante reducido, cuenta solamente con 150 ejemplos. Además de la variable objetivo, existen 4 predictores distintos relacionados con medidas de las flores observadas en la realidad.
El dataset está completamente etiquetado y ningún predictor tiene valores faltantes. La siguiente tabla resume las variables disponibles en el Dataset:
Variable | Tipo de dato |
---|---|
Largo Sépalo | Numérico |
Ancho del Sépalo | Numérico |
Largo del Pétalo | Numérico |
Ancho del Pétalo | Numérico |
La variables objetivo es del tipo Polinomial y tiene 3 valores posibles: Iris Setosa, Iris Versi-color e Iris Virginica.
Examinando los gráficos de tipo plot entre los predictores, resulta interesante la agrupación generada en el espacio de las clases para las variables “Largo Pétalo” y “Ancho Pétalo”. Además, estos dos predictores son los que tienen mayor correlación con la variable objetivo.
Modelo
En Rapidminer, se importa el Dataset de Iris. En primer lugar, es necesario eliminar los predictores que no vamos a utilizar para el ejercicio. Luego, se realiza la separación de los datos mediante muestreo aleatorio en 70% para Entrenamiento y 30% para Test, esto se puede realizar mediante el operador “Split Data”.
Agregamos el operador de K-NN con la configuración que viene por defecto, seguido de un “Apply Model” para predecir los valores de la clase objetivo para el 30% reservado para Test.
El flujo debería verse así:
Evaluación
Al ejecutar el modelo, vemos que los resultados obtenidos son muy positivos. Esto quiere decir que nuestro modelo aprovechó bien la correlación entre predictores y la separación en el hyperespacio de las clases objetivo.
Aquí la matriz de confusión para esta ejecución inicial:
Vale destacar que el operador de K-NN ofrece distintos métodos para el cálculo de la distincia, los cuales podrían ser interesantes para otras situaciones donde la separación no sea tan clara o el resultado obtenido no sea tan bueno.
- Distancia de Chebychev
- Distancia Euclideana
- Similitud Coseno
- Distancia de Manhattan
También, Rapidminer ofrece la posibilidad de ponderar el voto en la selección de la clase objetivo. Esto se puede establecer mediante un switch el cual determina si la distancia importa en la decisión. Es decir, aquellos vecinos cercanos tendrán una mayor incidencia en la clase escogida.