sábado, 23 de mayo de 2020

Clasificador Multi-clase en Python

Clasificador de flores Iris

Clasificador Multi-clase de flores Iris

Descripcion

En aprendizaje automático y estadística, la clasificación es el problema de identificar a cuál de un conjunto de categorías (subpoblaciones) pertenece una nueva observación, sobre la base de un conjunto de datos de formación que contiene observaciones (o instancias) cuya categoría de miembros es conocida (Definicion tomada de Wikipedia.). El siguiente es un ejemplo de Clasificación multi-clase. El dataset usado es el que provee la libreria de Scikit-Learn. Se ha entrenado los datos usando el algoritmo de K- vecinos más cercanos. El resultado es una clasificación con un 97.36% de precisión.

Importar las librerias

Lo primero que se debe realizar es importar las librerias necesarias para construir el clasificador.

In [2]:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris

Luego se cargan los datos a un objeto con nombre iris

In [7]:
iris=load_iris()

Este objeto iris esta compuesto por las claves 'data', 'target', entre otras:

In [8]:
iris.keys()
Out[8]:
dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names', 'filename'])
In [18]:
iris["target_names"]
Out[18]:
array(['setosa', 'versicolor', 'virginica'], dtype='<U10')

Echemos un vistazo a las 10 primeras muestras de este dataset.

In [14]:
iris["data"][0:10]
Out[14]:
array([[5.1, 3.5, 1.4, 0.2],
       [4.9, 3. , 1.4, 0.2],
       [4.7, 3.2, 1.3, 0.2],
       [4.6, 3.1, 1.5, 0.2],
       [5. , 3.6, 1.4, 0.2],
       [5.4, 3.9, 1.7, 0.4],
       [4.6, 3.4, 1.4, 0.3],
       [5. , 3.4, 1.5, 0.2],
       [4.4, 2.9, 1.4, 0.2],
       [4.9, 3.1, 1.5, 0.1]])

Para estas 10 muestras, tenemos que pertenecen a la clase setosa representada por el valor 0

In [15]:
iris["target"][0:10]
Out[15]:
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])

Ahora se divide el conjunto de datos entre un 75% datos de entrenamiento y un 25% datos de prueba:

In [19]:
from sklearn.model_selection import train_test_split
In [20]:
X_train, X_test, y_train, y_test=train_test_split(iris["data"],iris["target"], test_size=0.25)
In [21]:
X_train.shape
Out[21]:
(112, 4)
In [22]:
y_train.shape
Out[22]:
(112,)

Luego se entrena el algoritmo K-vecinos más cercanos con los datos de entrenamiento, usando el valor de 5 vecinos:

In [29]:
from sklearn.neighbors import KNeighborsClassifier
In [30]:
knn=KNeighborsClassifier(n_neighbors=5)
In [31]:
knn.fit(X_train, y_train)
Out[31]:
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
                     metric_params=None, n_jobs=None, n_neighbors=5, p=2,
                     weights='uniform')

Posteriormente, se prueba la exactitud del modelo sobre los datos de prueba:

In [32]:
knn.score(X_test,y_test)
Out[32]:
0.9736842105263158

Finalmente, predecimos a qué clase pertenecería un flor con las medidas 2.3, 2.5, 1.4 y 4.3:

In [36]:
knn.predict([[2.3,2.5,1.4,4.3]])
Out[36]:
array([0])

Lo cual nos indica que la flor pertenecería a la clase Setosa.

In [ ]: