CLASIFICACIÓN
Práctica 3.3. Árboles de Decisión_IRIS.
El aprendizaje automático trata de ajustar modelos a los datos; por esta razón, empezaremos discutiendo como los datos pueden ser representados para ser accesibles por el ordenador. Además de esto, nos basaremos en los ejemplos de matplotlib de la sección anterior para usarlos para representar datos.
Datos en scikit-learn
Los datos en scikit-learn, salvo algunas excepciones, suelen estar almacenados en arrays de 2 dimensiones, con forma [n_samples, n_features]. Muchos algoritmos aceptan también matrices scipy.sparse con la misma forma.
n_samples: este es el número de ejemplos. Cada ejemplo es un item a procesar (por ejemplo, clasificar). Un ejemplo puede ser un documento, una imagen, un sonido, un vídeo, un objeto astronómico, una fila de una base de datos o de un fichero CSV, o cualquier cosa que se pueda describir usando un conjunto prefijado de trazas cuantitativas.
n_features: este es el número de características descriptoras que se utilizan para describir cada item de forma cuantitativa. Las características son, generalmente, valores reales, aunque pueden ser categóricas o valores discretos.
El número de características debe ser fijado de antemano. Sin embargo, puede ser extremadamente alto (por ejemplo, millones de características), siendo cero en la mayoría de casos. En este tipo de datos, es buena idea usar matrices scipy.sparse (plataforma de cálculo) que manejan mucho mejor la memoria.
Como ya comentamos en la sección anterior, representamos los ejemplos (puntos o instancias) como filas en el array de datos y almacenamos las características correspondientes, las "dimensiones", como columnas.
Vamos a realizar otro ejemplo de sistema de clasificación usando el Iris dataset que ya está integrado dentro de la librería Scikit Learn. Este dataset contiene ejemplos con cuatro atributos numéricos:
Longitud del sépalo en centímetros.
Anchura del sépalo en centímetros.
Longitud del pétalo en centímetros.
Anchura del pétalo en centímetros.
Cada uno de los ejemplos se clasifica en tres posibles tipos de Iris: Iris-Setosa, Iris-Versicolor e Iris-Virgínica.
Nuestro objetivo es crear un modelo que nos clasifique la flor por la relación entre los tamaños (longitud y anchura) de los sépalos y pétalos.
Esta práctica es semiguiada, habrá partes que se conozca la solución y otras que tendremos que deducir con aprendizajes previos.
Iris Setosa
Iris Versicolor
Iris Virgínica
Importamos en Colab las librerías necesarias:
Cargamos el DataSet. Imprimimos el resultado de las 5 primeras filas:
Borramos la primera columna (Id) ya que no nos hace falta. Imprimimos, de nuevo, las cinco primeras filas.
Mostramos las estadísticas de los datos. Quedará como sigue:
Mostramos la información básica sobre los tipos de datos:
Mostramos el número de datos disponibles para cada tipo de flor:
Empezamos a procesar los datos. En primer lugar vamos a ver si hay datos nulos en el DataFrame. El resultado que debemos obtener es:
Hacemos un análisis gráfico exploratorio de datos. Creamos distintos histogramas para los valores de las columnas correspondientes a las longitudes y anchuras de sépalos y pétalos. El resultado será como se muestra en la imagen inferior.
Como los datos están un poco apelotonados crea el código para que se representen de forma individual. Si ponemos el resultado de todos esos bloques de código en una imagen (tú lo verás en Colab en vertical) quedará:
Generamos ahora distintos gráficos de dispersión que relacionen los distintos datos entre sí. Así deberemos realizar los gráficos de las relaciones siguientes:
Anchura del Sépalo frente a la Longitud del Sépalo en cada especie de forma individual y conjunta.
Anchura del Pétalo frente a la Longitud del Pétalo en cada especie de forma individual y conjunta.
Longitud del Pétalo frente a la Longitud del Sépalo en cada especie de forma individual y conjunta.
Anchura del Pétalo frente a la Anchura del Sépalo en cada especie de forma individual y conjunta
Vamos con el primer caso:
Del DataFrame (iris.csv) extraemos listas con los datos de longitud y anchura del sépalo de la especie Iris Virgínica y representamos el diagrama de dispersión con la etiquetas que se muestran en la imagen.
Las imágenes de los resultados correspondientes a las tres especies se muestran a continuación:
Los gráficos mostrados de forma independiente no muestran de forma fácil las relaciones de tamaño (longitud y anchura) de las distintas especies. Podemos haciendo uso del código mostrado a continuación representar en una única imagen todos estos gráficos individuales.
A continuación debemos replicar lo hecho para la relación entre la longitud y anchura del sépalo a las otras tres relaciones que se comentaron anteriormente. Las relaciones que faltan son:
Anchura del Pétalo frente a la Longitud del Pétalo en cada especie de forma individual y conjunta.
Longitud del Pétalo frente a la Longitud del Sépalo en cada especie de forma individual y conjunta.
Anchura del Pétalo frente a la Anchura del Sépalo en cada especie de forma individual y conjunta
Una matriz de correlación es una tabla que muestra los coeficientes de correlación entre variables. Cada celda de la tabla muestra la correlación entre dos variables. El valor está en el rango de -1 a 1. Si dos variables tienen una correlación alta, podemos ignorar una variable de esas dos. Vemos código y resultado:
Gráficamente:
Gráficamente:
En el aprendizaje automático, generalmente tratamos con conjuntos de datos que contienen múltiples etiquetas en una o más de una columna. Estas etiquetas pueden tener la forma de palabras o números. La codificación de etiquetas se refiere a convertir las etiquetas en forma numérica para convertirlas en una forma legible por la máquina.
¿Qué quiere decir esto?
Estamos intentando categorizar o clasificar mediante las dimensiones de los sépalo y pétalos de las flores si pertenecen a la especie Iris Virgínica, Iris Versicolor o Iris Setosa, pero debemos codificar estos nombres en valores numéricos. Mediante código realizaremos la siguiente codificación:
Iris Virgínica --> 0
Iris Versicolor --> 1
Iris Setosa --> 2
El código será:
Importamos de Scikit Learn el módelo de Árbol de Decisión. Lo entrenamos y verificamos el rendimiento del modelo que como se ve está en torno al 91.11%, muy satisfactorio.