Una aplicación simple de Machine Learning | Python 3

Aprendizaje Supervisado: Clasificación de las especies de Iris con K-Nearest Neigbors

Vamos a trabajar con el clásico problema de la flor de iris. Se trata de poder distinguir las especies de algunas flores de iris a partir de un conjunto datos observados.

Se han recogido algunas medidas asociadas con cada iris: la longitud y el ancho de los pétalos y la longitud y el ancho de los sépalos, todos medidos en centímetros; a su vez cada iris pertenece a la especie setosa, versicolor o virginica.

Nuestro objetivo es construir un modelo de aprendizaje automático que pueda aprender a partir de las medidas de estas flores, cuya especie se conoce, de modo que podamos predecir la especie para un nuevo iris.

Datos de entrenamiento y prueba

Primero vamos a dividir nuestro conjunto de datos en dos, por un lado el conjunto de entrenamiento que vamos a utilizar para entrenar nuestro modelo y por otro lado el conjunto de prueba que nos servirá para evaluar posteriormente que tan bueno es dicho modelo.

En este caso vamos a tomar el 75% de los datos para entrenar, y el 25% para evaluar luego.

Tener en cuenta que antes de realizar la división, se debe mezclar el conjunto de datos, de otra forma nuestro modelo no servirá.

Keys of iris_dataset: 
dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names'])


['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']

(Se deja al lector investigar el resto de las claves del objeto iris_dataset)

Observemos nuestro conjunto de datos

Antes que nada vamos a echarle una mirada a nuestro conjunto de datos

Gráfico de pares del conjunto de datos Iris, coloreado por etiqueta (especie)

Podemos ver que las tres clases parecen estar relativamente bien separadas usando las mediciones de sépalos y pétalos. Esto significa que un modelo de aprendizaje automático probablemente sepa separarse.

Construyendo el modelo: k-Nearest Neighbors

Para construir nuestro modelo, vamos a usar k-Nearest Neighbors, k vecinos mas cercanos en español, este algoritmo calcula la distancia del elemento nuevo a cada uno de los existentes, toma los k vecinos mas cercanos, y elige la etiqueta que “domina” en ese grupo de k vecinos.

En este caso k=1

KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
metric_params=None, n_jobs=1, n_neighbors=1, p=2,
weights='uniform')

Realizamos una predicción

Vamos a realizar una predicción como ejemplo. Para esto creamos un “nuevo iris” y utilizamos nuestro modelo para predecir a que especie pertenece

Predicted target name: ['setosa']

Evaluando el modelo

Por ultimo para evaluar que tan bien funciona nuestro modelo, vamos a usar el conjunto de prueba que hemos separado anteriormente. Podemos hacer una predicción para cada iris en los datos de prueba y compararlo
contra su etiqueta (la especie conocida).

Test set score: 0.97

Para este modelo, la precisión del conjunto de prueba es de aproximadamente 0.97, lo que significa que hicimos la predicción correcta para el 97% de los iris en el conjunto de prueba.

Resumen

Y aquí un resumen de lo desarrollado anteriormente en solo unas pocas lineas.

Test set score: 0.97

Hasta aquí hemos llegado, ¡Gracias por leer!