En esta entrada vamos a explicar como poner en práctica el algoritmo de árboles de decisión clasificación.
En este punto ya hemos explicado la teoría y cómo implementar este algoritmo utilizando la librería de Python scikit learn, por lo que ahora ha llegado el momento de poner en práctica este algoritmo.
El proyecto que vamos a desarrollar es de cáncer de seno o BreastCancer, que se encuentra disponible en la librería scikit learn. Este es el mismo proyecto que hemos desarrollado a lo largo de las explicaciones de los algoritmos de clasificación por lo que la parte inicial del analicemos fueron explicada en su momento.
En caso de que quieras conocer cómo importar los datos, el análisis y procesamiento de los mismos, te recomiendo que busques la parte práctica del algoritmo de Regresión Logística, acá fue explicado muy bien esto.
Entonces empecemos el análisis para este algoritmo.
En este punto ya hemos separados los datos de “x” y “y”, por lo que procedemos hacer la separación de los datos de entrenamiento y prueba, utilizando la instrucción train_test_split.
from sklearn.model_selection import train_test_split #Separo los datos de "train" en entrenamiento y prueba para probar los algoritmos X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
Seguidamente definimos el algoritmo, entonces decimos desde skelarn.tree importamos DecisionTreeClasiffier. Acá lo que indicamos es que desde el modulo de árboles de skelearn, vamos a importar el algoritmo de árboles de decisión clasificación, recuerda que ese algoritmo tan funciona para problemas de regresión.
#Arboles de decisión from sklearn.tree import DecisionTreeClassifier algoritmo = DecisionTreeClassifier(criterion = 'entropy')
Ahora definimos el algoritmo y lo configuramos para crear el modelo y entrenarlo. En este caso el único parámetro que vamos a configurar es el referente a “criterion” que se refiere a la medida de selección. Por defecto este parámetro viene configurado con el índice Gini pero para nuestro ejercicio lo voy a cambiar por “entropy” o entropía en español. Para entender mejor esto te recomiendo que buques la información publicada sobre la librería scikit learn para este algoritmo.
Definido esto ahora entrenamos el algoritmo, utilizando la instrucción fit() junto con los datos de entrenamiento separados previamente.
#Entreno el modelo algoritmo.fit(X_train, y_train)
Seguidamente realizamos una predicción utilizando el modelo entrenado previamente y los datos de prueba.
#Realizo una predicción y_pred = algoritmo.predict(X_test)
A llegado el momento de verificar que tan preciso es el modelo desarrollado, para ello vamos a utilizar el modulo de métricas que proporciona la librería scikit learn.
Comencemos revisando la matriz de confusión, para esto importamos de metrics de sklean el método confusion_matrix y lo implementamos junto con los datos predichos y los datos reales.
#Verifico la matriz de Confusión from sklearn.metrics import confusion_matrix matriz = confusion_matrix(y_test, y_pred) print('Matriz de Confusión:') print(matriz)
Como podemos observar fueron muy pocos los datos que no fueron predichos correctamente, recuerda que los datos ubicados en la diagonal principal son los datos predichos correctamente mientras que en la diagonal secundaria son los errores. Por lo que si sumamos estos elementos obtuvimos 107 datos correctos y tan solo 7 datos incorrectos.
Veamos ahora la precisión del modelo, para ello importamos “precision_score” de metrics y la implementamos junto con los datos predichos y los reales.
#Calculo la precisión del modelo from sklearn.metrics import precision_score precision = precision_score(y_test, y_pred) print('Precisión del modelo:') print(precision)
El resultado de este calculo es de 0,956, este es un valor bastante aceptable.
Con esto podemos concluir que con este algoritmo también podemos obtener muy buenos resultados con este conjunto de datos. Ya queda de tu parte si deseas mejorarlo y ver si es posible obtener algo más preciso, para ello puedes modificar los datos de la configuración del algoritmo, por ejemplo cambiando la medida de selección.
A continuación se encuentra el código completo:
""" Árboles de Decisión Clasificación """ ########## LIBRERÍAS A UTILIZAR ########## #Se importan la librerias a utilizar from sklearn import datasets ########## PREPARAR LA DATA ########## #Importamos los datos de la misma librería de scikit-learn dataset = datasets.load_breast_cancer() print(dataset) ########## ENTENDIMIENTO DE LA DATA ########## #Verifico la información contenida en el dataset print('Información en el dataset:') print(dataset.keys()) print() #Verifico las características del dataset print('Características del dataset:') print(dataset.DESCR) #Seleccionamos todas las columnas X = dataset.data #Defino los datos correspondientes a las etiquetas y = dataset.target ########## IMPLEMENTACIÓN DE ÁRBOLES DE DECISIÓN CLASIFICACIÓN ########## from sklearn.model_selection import train_test_split #Separo los datos de "train" en entrenamiento y prueba para probar los algoritmos X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) #Defino el algoritmo a utilizar #Arboles de decisión from sklearn.tree import DecisionTreeClassifier algoritmo = DecisionTreeClassifier(criterion = 'entropy') #Entreno el modelo algoritmo.fit(X_train, y_train) #Realizo una predicción y_pred = algoritmo.predict(X_test) #Verifico la matriz de Confusión from sklearn.metrics import confusion_matrix matriz = confusion_matrix(y_test, y_pred) print('Matriz de Confusión:') print(matriz) #Calculo la precisión del modelo from sklearn.metrics import precision_score precision = precision_score(y_test, y_pred) print('Precisión del modelo:') print(precision)
¿Este es un algoritmo de aprendizaje supervisado o no supervisado?
Quisiera que me explicaras la diferencia que tienen y porqué este pertenece a uno de esas dos clasificaciones. Gracias
Excelente material
Hola Victor, este es un algoritmo de Aprendizaje Supervisado, en esta publicación explico la diferencia de Aprendizaje Supervisado y no Supervisado: https://bit.ly/3kzgU6p. De igual forma, en esta publicación explico la diferencia entre Regresión y Clasificación: https://bit.ly/2ZQAPWr. Saludos.