Árboles de clasificación sobre ejemplo realista

| Última modificación: 1 de julio de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

¿Sabes qué son los árboles de clasificación? Los árboles de clasificación son un tipo de árboles de decisión. Existen tres tipos de árboles de decisión:

  • Árboles de clasificación sobre ejemplos sintéticos.
  • Árboles de clasificación sobre ejemplo realista.
  • Árboles de regresión.

En este artículo vamos a trabajar sobre un problema multiclase de clasificación de frutas a partir de sus propiedades. También abordaremos la visualización de un árbol de decisión.

Árboles de clasificación: ejemplo

fruits = pd.read_table ("./data/fruit_data_with_colors.txt')
print (fruits.shape)

fruits.head (10)
Árboles de clasificación
#esto se puede hacer con un label encoder

lookup_fruit_name = dict (zip (fruits.fruit_label.unique (), fruits.fruit_name.unique()))
lookup_fruit_name

{1: ‘apple’, 2: ‘mandarin’, 3: ‘orange’, 4: ‘lemon’}

Este resultado es un label encoder, un método de codificación de variables categóricas.

#Árboles de clasificación
from sklearn.model_selection import train_test_split

#preparamos los datos

X = fruits ['height', 'width', 'mass', 'color_score']].values

y = fruits ['fruit_label'].values

X_train, X_test, y_train, y_test = train_test_split (x, y, test_size = 0.2, random_state = 0)

print ('Datos train: ' X_train.shape) 
print('Datos test: ' X_test.shape)

Datos train: (47, 4)

Datos test: (12, 4)

Este es un alcance mínimo, demasiado pequeño como para poder hacer algo con eso.

Ahora lo que haremos es importar el DecisionTreeClassifier y, después de esto, importamos tree, que es un método de visualización del árbol.

Luego creamos el modelo y ajustamos.

#Árboles de clasificación
from sklearn.tree import DecisionTreeClassifier

from sklearn import tree

#creamos el modelo y ajustamos

treeModel = DecisionTreeClassifier ()

treeModel.fit (x_train, y_train)

y_test_predicted = treeModel.predict (x_test)
print (treeModel.score (X_test, y_test))

0.9166666666666666

Nos sale que el score es bastante bueno.

Vamos a visualizar el árbol, para lo que usaremos graphviz.

  • En Linux vale con pip install graphviz.
  • En Anaconda puedes buscar graphviz en la GUI e instalar los 4 paquetes que aparecen.
  • En Windows puede dar problemas con Anaconda, así que si falla puedes obtenerlo aquí:
  • http://graphviz.gitlab.io/_pages/Download/Download_windows.html. Luego añade la ruta del ejecutable a tu variable de entorno PATH (será algo similar a C:\Program Files (x86)\Graphviz2.38\bin).
#Árboles de clasificación
#Para esto hace falta graphviz. 

import graphviz

dot_data = tree.export_graphviz (treeModel, out_file = None,
feature_names = ['height', 'width', 'mass', 'color score'], class_names = ['apple', 'mandarin', 'orange', 'lemon'], filled = True, rounded = True, special_characters = True)
graph = graphviz.Source (dot_data)
graph

Esto es el árbol de decisión. A la vista de la figura, observamos que:

  1. Comenzamos con un Gini elevado. ¿Cuál es el máximo valor para este problema? A medida que aumentamos la profundidad, el valor Gini disminuye, hasta que en todas las hojas son 0.
  2. Es un árbol de profundidad 4.
  3. Todas las muestras de entrenamiento están bien clasificadas.

Hemos hablado antes sobre que la interpretabilidad de los árboles de decisión es uno de sus puntos fuertes. Centrémonos en esto un segundo: este tipo de diagramas perfectamente lo podemos imprimir y llevarlo a nuestro negocio, a alguna reunión o con nuestros clientes, para mostrarles de manera resumida lo que queremos expresar, algo que de otro modo nos llevaría muchísimas páginas, otro tipo de diagramas y complicaciones y tiempo.

Lo que nos quieren decir estos árboles de clasificación es, en todo momento, cuál es la variable sobre la que estamos partiendo el espacio, es decir, cuál es la variable que estamos usando como decisor; información sobre el gini y el espacio de características y, luego, tanto la clase mayoritaria en cada uno de los puntos como toda la información posible sobre la distribución de muestras en cada uno de esos puntos.

Por ejemplo, observemos el siguiente recuadro:

La clase mayoritaria son manzanas, que tiene 7, pero vemos que son 7/11, es decir, la probabilidad de que sea una manzana, la certeza, es de 7 en 11.

En cambio, observemos:

Vemos que la clase principal es limón y la probabilidad de que sea limón es un 100%.

#Árboles de clasificación
features = ["mass", "width", "height", "color_score"]
test_sample = 3

print ("La muestra de test con etiqueta "{8}" y atributos: ' .format (lookup_fruit_name [y_test [test_sample]])]
for i, f in enumerate (features):
print (' ',f , ' : ', X_test [test_sample, i])

print ("ha sido clasificada como: '{0}' ".format (lookup_fruit_name [y_test_predicted [test_sample]]))

La muestra de test con etiqueta “Arrange” y atributos:

height : 7.1

width: 6.7

mass : 140.0

color_score: 0.72

Ha sido clasificada como: ‘apple’

Ahora que hemos visto en qué consisten algunos de los árboles de decisión que existen, ¿qué te parece si damos el siguiente paso? Para eso tenemos el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, una formación intensiva e íntegra en la que adquirirás todas las herramientas teóricas y prácticas que te ayudarán en tu proceso de incursionar en el mundo laboral del Big Data en muy pocos meses. ¡Anímate a transformar tu futuro y solicita ya más información !

Sandra Navarro

Business Intelligence & Big Data Advisor & Coordinadora del Bootcamp en Data Science, Big Data & Machine Learning.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado