Logotipo de Zephyrnet

Algoritmo del árbol de decisión, explicado

Fecha:

Introducción

 
La clasificación es un proceso de dos pasos, un paso de aprendizaje y un paso de predicción, en el aprendizaje automático. En el paso de aprendizaje, el modelo se desarrolla en base a datos de entrenamiento dados. En el paso de predicción, el modelo se usa para predecir la respuesta para datos dados. Decision Tree es uno de los algoritmos de clasificación más fáciles y populares de entender e interpretar.

Algoritmo de árbol de decisión

 
El algoritmo Decision Tree pertenece a la familia de algoritmos de aprendizaje supervisado. A diferencia de otros algoritmos de aprendizaje supervisado, el algoritmo del árbol de decisión se puede utilizar para resolver problemas de regresión y clasificación 

El objetivo de usar un árbol de decisiones es crear un modelo de entrenamiento que pueda usarse para predecir la clase o el valor de la variable objetivo mediante aprender reglas de decisión simples inferido de datos previos (datos de entrenamiento).

En los árboles de decisión, para predecir una etiqueta de clase para un registro, comenzamos desde el raíz del árbol Comparamos los valores del atributo raíz con el atributo del registro. Sobre la base de la comparación, seguimos la rama correspondiente a ese valor y saltamos al siguiente nodo.

Tipos de árboles de decisión

 
Los tipos de árboles de decisión se basan en el tipo de variable objetivo que tenemos. Puede ser de dos tipos:

  1. Árbol de decisión de variables categóricas: Árbol de decisión que tiene una variable de destino categórica y luego se llama Árbol de decisión de variables categóricas.
  2. Árbol de decisión de variable continua: Decision Tree tiene una variable objetivo continua, entonces se llama Árbol de decisión de variable continua.

Ejemplo:- Digamos que tenemos un problema para predecir si un cliente pagará su prima de renovación con una compañía de seguros (sí/no). Aquí sabemos que los ingresos de los clientes son una variable importante pero la compañía de seguros no tiene detalles de ingresos para todos los clientes. Ahora, como sabemos que esta es una variable importante, podemos construir un árbol de decisiones para predecir los ingresos de los clientes en función de la ocupación, el producto y varias otras variables. En este caso, estamos pronosticando valores para las variables continuas.

Terminología importante relacionada con los árboles de decisión

  1. Nodo raíz: Representa a toda la población o muestra y esta se divide además en dos o más conjuntos homogéneos.
  2. Terrible: Es un proceso de dividir un nodo en dos o más sub-nodos.
  3. Nodo de decisión: Cuando un subnodo se divide en más subnodos, se denomina nodo de decisión.
  4. Nodo hoja/terminal: Los nodos que no se dividen se denominan nodos Hoja o Terminal.
  5. Poda: Cuando eliminamos subnodos de un nodo de decisión, este proceso se denomina poda. Puedes decir el proceso opuesto de dividir.
  6. Rama / Subárbol: Una subsección de todo el árbol se denomina rama o subárbol.
  7. Nodo padre e hijo: Un nodo, que se divide en subnodos, se denomina nodo principal de subnodos, mientras que los subnodos son hijos de un nodo principal.

Los árboles de decisión clasifican los ejemplos ordenándolos hacia abajo en el árbol desde la raíz hasta algún nodo de hoja/terminal, y el nodo de hoja/terminal proporciona la clasificación del ejemplo.

Cada nodo en el árbol actúa como un caso de prueba para algún atributo, y cada borde que desciende del nodo corresponde a las posibles respuestas al caso de prueba. Este proceso es de naturaleza recursiva y se repite para cada subárbol enraizado en el nuevo nodo.

Suposiciones al crear el árbol de decisión

 
A continuación se presentan algunas de las suposiciones que hacemos al usar el árbol de decisión:

  • Al principio, todo el conjunto de entrenamiento se considera como el raíz.
  • Se prefiere que los valores de característica sean categóricos. Si los valores son continuos, se discretizan antes de construir el modelo.
  • Los registros son distribuido recursivamente sobre la base de los valores de los atributos.
  • El orden para colocar atributos como raíz o nodo interno del árbol se realiza utilizando algún enfoque estadístico.

Siguen los árboles de decisión Suma del producto (SOP) rrepresentación La suma del producto (SOP) también se conoce como Forma normal disyuntiva. Para una clase, cada rama desde la raíz del árbol hasta un nodo hoja que tiene la misma clase es una conjunción (producto) de valores, las diferentes ramas que terminan en esa clase forman una disyunción (suma).

El desafío principal en la implementación del árbol de decisiones es identificar qué atributos debemos considerar como el nodo raíz y cada nivel. Manejar esto es saber como la selección de atributos. Tenemos diferentes medidas de selección de atributos para identificar el atributo que puede ser considerado como la nota raíz en cada nivel.

¿Cómo funcionan los árboles de decisión?

 
La decisión de hacer divisiones estratégicas afecta en gran medida la precisión de un árbol. Los criterios de decisión son diferentes para los árboles de clasificación y regresión.

Los árboles de decisión utilizan varios algoritmos para decidir dividir un nodo en dos o más subnodos. La creación de subnodos aumenta la homogeneidad de los subnodos resultantes. En otras palabras, podemos decir que la pureza del nodo aumenta con respecto a la variable objetivo. El árbol de decisión divide los nodos en todas las variables disponibles y luego selecciona la división que resulta en la mayoría de los subnodos homogéneos.

La selección del algoritmo también se basa en el tipo de variables objetivo. Veamos algunos algoritmos utilizados en los árboles de decisión:

ID3 → (extensión de D3)
C4.5 → (sucesor de ID3)
CARRITO → (Árbol de clasificación y regresión)
chaid → (Detección de interacción automática de chi-cuadrado Realiza divisiones de varios niveles al calcular árboles de clasificación)
MARS → (splines de regresión adaptativa multivariante)

El algoritmo ID3 construye árboles de decisión usando un top-down búsqueda codiciosa acercarse por el espacio de posibles bifurcaciones sin retroceder. Un algoritmo codicioso, como sugiere su nombre, siempre toma la decisión que parece ser la mejor en ese momento.

Pasos en el algoritmo ID3:

  1. Comienza con el conjunto original S como nodo raíz.
  2. En cada iteración del algoritmo, itera a través del atributo no utilizado del conjunto S y calcula Entropía (H) y Ganancia de información (IG) de este atributo.
  3. Luego selecciona el atributo que tiene la menor entropía o la mayor ganancia de información.
  4. Luego, el conjunto S se divide por el atributo seleccionado para producir un subconjunto de los datos.
  5. El algoritmo continúa repitiéndose en cada subconjunto, considerando solo los atributos nunca antes seleccionados.

Medidas de selección de atributos

 
Si el conjunto de datos consta de N Entonces, decidir qué atributo colocar en la raíz o en diferentes niveles del árbol como nodos internos es un paso complicado. Simplemente seleccionando aleatoriamente cualquier nodo para que sea la raíz no puede resolver el problema. Si seguimos un enfoque aleatorio, puede darnos malos resultados con poca precisión.

Para resolver este problema de selección de atributos, los investigadores trabajaron e idearon algunas soluciones. Ellos sugirieron usar algunos criterios como:

Entropía,
ganancia de información,
índice de gini,
Relación de ganancia,
Reducción de la varianza
Chi-cuadrado

Estos criterios calcularán valores para cada atributo. Los valores se ordenan y los atributos se colocan en el árbol siguiendo el orden, es decir, el atributo con un valor alto (en caso de ganancia de información) se coloca en la raíz.
Al utilizar la ganancia de información como criterio, asumimos que los atributos son categóricos y, para el índice de Gini, se supone que los atributos son continuos.

Entropía

 
La entropía es una medida de la aleatoriedad en la información que se procesa. Cuanto mayor sea la entropía, más difícil será sacar conclusiones de esa información. Tirar una moneda al aire es un ejemplo de una acción que proporciona información aleatoria.

Del gráfico anterior, es bastante evidente que la entropía H(X) es cero cuando la probabilidad es 0 o 1. La entropía es máxima cuando la probabilidad es 0.5 porque proyecta una aleatoriedad perfecta en los datos y no hay posibilidad si determinando perfectamente el resultado.

ID3 sigue la regla: una rama con una entropía de cero es un nodo hoja y una rama con una entropía mayor que cero necesita una división adicional.

Matemáticamente, la entropía para 1 atributo se representa como:

Cuando la S → Estado actual, y Pi → Probabilidad de un evento de estado S o Porcentaje de clase i en un nodo de estado S.

Matemáticamente, la entropía para múltiples atributos se representa como:

donde T→ Estado actual y X → Atributo seleccionado

Ganancia de información

 
ganancia de información o IG es una propiedad estadística que mide qué tan bien un atributo dado separa los ejemplos de entrenamiento según su clasificación objetivo. La construcción de un árbol de decisión consiste en encontrar un atributo que devuelva la mayor ganancia de información y la menor entropía.

Figura

La ganancia de información es una disminución de la entropía. Calcula la diferencia entre la entropía antes de la división y la entropía promedio después de la división del conjunto de datos en función de los valores de atributo dados. El algoritmo de árbol de decisión ID3 (dicotómico iterativo) utiliza la ganancia de información.

Matemáticamente, IG se representa como:

De una manera mucho más sencilla, podemos concluir que:

Ganancia de información

Donde "antes" es el conjunto de datos antes de la división, K es el número de subconjuntos generados por la división y (j, después) es el subconjunto j después de la división.

Índice de Gini

 
Puede entender el índice de Gini como una función de costo utilizada para evaluar divisiones en el conjunto de datos. Se calcula restando de uno la suma de las probabilidades al cuadrado de cada clase. Prefiere particiones más grandes y fáciles de implementar, mientras que la ganancia de información favorece particiones más pequeñas con valores distintos.

Figura

Índice de Gini

El Índice Gini trabaja con la variable objetivo categórica "Éxito" o "Fracaso". Solo realiza divisiones binarias.

Un valor más alto del índice de Gini implica una mayor desigualdad, una mayor heterogeneidad.

Pasos para calcular el índice de Gini para una división

  1. Calcule Gini para los subnodos, utilizando la fórmula anterior para el éxito (p) y el fracaso (q) (p²+q²).
  2. Calcule el índice de Gini para la división utilizando el puntaje de Gini ponderado de cada nodo de esa división.

CART (Árbol de clasificación y regresión) utiliza el método de índice de Gini para crear puntos de división.

relación de ganancia

 
La ganancia de información está sesgada hacia la elección de atributos con un gran número de valores como nodos raíz. Significa que prefiere el atributo con una gran cantidad de valores distintos.

C4.5, una mejora de ID3, utiliza la relación de ganancia, que es una modificación de la ganancia de información que reduce su sesgo y suele ser la mejor opción. El índice de ganancia resuelve el problema de la ganancia de información al tener en cuenta el número de ramas que resultarían antes de realizar la división. Corrige la ganancia de información teniendo en cuenta la información intrínseca de una división.

Consideremos si tenemos un conjunto de datos que tiene usuarios y sus preferencias de género de películas en función de variables como género, grupo de edad, calificación, bla, bla. Con la ayuda de la ganancia de información, se divide en 'Género' (asumiendo que tiene la mayor ganancia de información) y ahora las variables 'Grupo de edad' y 'Clasificación' podrían ser igualmente importantes y con la ayuda de la proporción de ganancia, penalizará una variable con valores más distintos que nos ayudarán a decidir la división en el siguiente nivel.

Figura

Donde "antes" es el conjunto de datos antes de la división, K es el número de subconjuntos generados por la división y (j, después) es el subconjunto j después de la división.

Reducción de la varianza

 
Reducción de la varianza es un algoritmo utilizado para variables objetivo continuas (problemas de regresión). Este algoritmo utiliza la fórmula estándar de varianza para elegir la mejor división. La división con menor varianza se selecciona como criterio para dividir la población:

Arriba de la barra X está la media de los valores, X es real y n es el número de valores.

Pasos para calcular la Varianza:

  1. Calcule la varianza para cada nodo.
  2. Calcule la varianza de cada división como el promedio ponderado de la varianza de cada nodo.

Chi-cuadrado

 
El acrónimo CHAID significa ¿Quién-Detector Automático de Interacción al cuadrado. Es uno de los métodos de clasificación de árboles más antiguos. Descubre la significación estadística entre las diferencias entre los subnodos y el nodo principal. Lo medimos por la suma de los cuadrados de las diferencias estandarizadas entre las frecuencias observadas y esperadas de la variable objetivo.

Funciona con la variable objetivo categórica "Éxito" o "Fracaso". Puede realizar dos o más splits. Cuanto mayor sea el valor de Chi-Cuadrado, mayor será la significación estadística de las diferencias entre el subnodo y el nodo principal.

Genera un árbol llamado CHAID (Chi-square Automatic Interaction Detector).

Matemáticamente, Chi-cuadrado se representa como:

Pasos para calcular Chi-cuadrado para una división:

  1. Calcule Chi-cuadrado para un nodo individual calculando la desviación para Éxito y Fracaso ambos
  2. Chi-cuadrado calculado de Split utilizando la suma de todos los Chi-cuadrado de éxito y fracaso de cada nodo de la división

¿Cómo evitar/contrarrestar el sobreajuste en los árboles de decisión?

 
El problema común con los árboles de decisión, especialmente tener una tabla llena de columnas, encajan mucho. A veces parece que el árbol memorizó el conjunto de datos de entrenamiento. Si no hay un límite establecido en un árbol de decisión, le dará una precisión del 100% en el conjunto de datos de entrenamiento porque, en el peor de los casos, terminará haciendo 1 hoja para cada observación. Por lo tanto, esto afecta la precisión al predecir muestras que no forman parte del conjunto de entrenamiento.

Aquí hay dos formas de eliminar el sobreajuste:

  1. Poda de árboles de decisión.
  2. Bosque al azar

Árboles de decisión de poda

El proceso de división da como resultado árboles completamente desarrollados hasta que se alcanzan los criterios de detención. Sin embargo, es probable que el árbol completamente desarrollado sobreajuste los datos, lo que conduce a una precisión deficiente en los datos no vistos.

Figura

In poda, se recortan las ramas del árbol, es decir, se eliminan los nodos de decisión a partir del nodo hoja de modo que no se altere la precisión general. Esto se hace segregando el conjunto de entrenamiento real en dos conjuntos: conjunto de datos de entrenamiento, D y conjunto de datos de validación, V. Prepare el árbol de decisión usando el conjunto de datos de entrenamiento segregado, D. Luego continúe recortando el árbol en consecuencia para optimizar la precisión del conjunto de datos de validación, V.

Figura

En el diagrama anterior, el atributo 'Edad' en el lado izquierdo del árbol se ha podado ya que tiene más importancia en el lado derecho del árbol, eliminando así el sobreajuste.

Bosque al azar

Random Forest es un ejemplo de aprendizaje conjunto, en el que combinamos varios algoritmos de aprendizaje automático para obtener un mejor rendimiento predictivo.

¿Por qué el nombre “Aleatorio”?

Dos conceptos clave que le dan el nombre aleatorio:

  1. Una muestra aleatoria del conjunto de datos de entrenamiento al construir árboles.
  2. Subconjuntos aleatorios de características consideradas al dividir nodos.

Se utiliza una técnica conocida como embolsado para crear un conjunto de árboles donde se generan múltiples conjuntos de entrenamiento con reemplazo.

En la técnica de embolsado, un conjunto de datos se divide en N muestras mediante muestreo aleatorio. Luego, utilizando un solo algoritmo de aprendizaje, se construye un modelo en todas las muestras. Posteriormente, las predicciones resultantes se combinan mediante votaciones o promedios en paralelo.

Figura

¿Cuál es mejor los modelos lineales o basados ​​en árboles?

 
Bueno, depende del tipo de problema que estés resolviendo.

  1. Si la relación entre las variables dependientes e independientes se aproxima bien mediante un modelo lineal, la regresión lineal superará al modelo basado en árboles.
  2. Si existe una alta no linealidad y una relación compleja entre las variables dependientes e independientes, un modelo de árbol superará a un método de regresión clásico.
  3. Si necesita construir un modelo que sea fácil de explicar a las personas, un modelo de árbol de decisión siempre funcionará mejor que un modelo lineal. ¡Los modelos de árboles de decisión son aún más simples de interpretar que la regresión lineal!

Construcción de clasificador de árboles de decisión en Scikit-learn

 
El conjunto de datos que tenemos es un dato de supermercado que se puede descargar de esta página.
Cargue todas las bibliotecas básicas.

importar numpy como np importar matplotlib.pyplot como plt importar pandas como pd

Cargue el conjunto de datos. Consta de 5 características, UserID, Gender, Age, EstimatedSalary y Purchased.

datos = pd.read_csv('/Users/ML/DecisionTree/Social.csv') datos.head()
Figura

Conjunto de datos

tomaremos solo Age y EstimatedSalary como nuestras variables independientes X debido a otras características como Gender y User ID son irrelevantes y no tienen efecto sobre la capacidad adquisitiva de una persona. Comprado es nuestra variable dependiente y.

feature_cols = ['Edad','Salario Estimado' ]X = data.iloc[:,[2,3]].valores y = data.iloc[:,4].valores

El siguiente paso es dividir el conjunto de datos en entrenamiento y prueba.

from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 0.25, random_state= 0)

Realizar escalado de características

#feature scaling from sklearn.preprocessing import StandardScaler sc_X = StandardScaler() X_train = sc_X.fit_transform(X_train) X_test = sc_X.transform(X_test)

Ajuste el modelo en el clasificador Árbol de decisión.

from sklearn.tree import Clasificador de árboles de decisión = clasificador de árboles de decisión () clasificador = clasificador.fit (tren_X, tren_y)

Haz predicciones y comprueba la precisión.

#predicción y_pred = classifier.predict(X_test)#Precisión de sklearn import metricsprint('Puntuación de precisión:', metrics.accuracy_score(y_test,y_pred))

El clasificador de árboles de decisión dio una precisión del 91%.

Matriz de confusión

de sklearn.metrics import confusion_matrix cm = confusion_matrix(y_test, y_pred)Salida: array([[64, 4], [ 2, 30]])

Significa que 6 observaciones han sido clasificadas como falsas.

Primero visualicemos los resultados de la predicción del modelo.

from matplotlib.colors import ListedColormap X_set, y_set = X_test, y_test X1, X2 = np.meshgrid(np.arange(start = X_set[:,0].min()-1, stop= X_set[:,0].max ()+1, paso = 0.01),np.arange(inicio = X_set[:,1].min()-1, stop= X_set[:,1].max()+1, paso = 0.01)) plt .contourf(X1,X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha=0.75, cmap = ListedColormap((" rojo","verde")))plt.xlim(X1.min(), X1.max()) plt.ylim(X2.min(), X2.max())for i,j in enumerate(np. único(y_set)): plt.scatter(X_set[y_set==j,0],X_set[y_set==j,1], c = ListedColormap(("rojo","verde"))(i),etiqueta = j) plt.title("Árbol de decisión(Conjunto de prueba)") plt.xlabel("Edad") plt.ylabel("Salario estimado") plt.legend() plt.show()

Visualicemos también el árbol:

Puedes usar Scikit-learn's export_graphviz función para mostrar el árbol dentro de un cuaderno Jupyter. Para trazar árboles, también necesita instalar Graphviz y pydotplus.

conda install python-graphviz
pip install pydotplus

export_graphviz La función convierte el clasificador del árbol de decisión en un archivo de puntos y pydotplus convierte este archivo de puntos en png o en una forma visualizable en Jupyter.

de sklearn.tree import export_graphviz de sklearn.externals.six import StringIO de IPython.display import Image import pydotplusdot_data = StringIO() export_graphviz(classifier, out_file=dot_data,filled=True, rounded=True, special_characters=True,feature_names = feature_cols, class_names=['0','1']) gráfico = pydotplus.graph_from_dot_data(dot_data.getvalue()) Imagen(graph.create_png())
Figura

Árbol de decisión.

En el gráfico de árbol de decisión, cada nodo interno tiene una regla de decisión que divide los datos. Gini se conoce como la relación de Gini, que mide la impureza del nodo. Puede decir que un nodo es puro cuando todos sus registros pertenecen a la misma clase, tales nodos se conocen como el nodo hoja.

Aquí, el árbol resultante no se poda. Este árbol sin podar es inexplicable y no es fácil de entender. En la siguiente sección, vamos a optimizarlo mediante la poda.

Optimización del clasificador del árbol de decisión

criterio: opcional (por defecto=”gini”) o Elegir medida de selección de atributo: Este parámetro nos permite utilizar la medida de selección de atributo diferente-diferente. Los criterios admitidos son "gini" para el índice de Gini y "entropía" para la ganancia de información.

disidente: string, opcional (default=”best”) o Split Strategy: Este parámetro nos permite elegir la estrategia de split. Las estrategias admitidas son "mejor" para elegir la mejor división y "aleatoria" para elegir la mejor división aleatoria.

máxima profundidad: int o Ninguno, opcional (predeterminado=Ninguno) o Profundidad máxima de un árbol: La profundidad máxima del árbol. Si es Ninguno, los nodos se expanden hasta que todas las hojas contienen menos de min_samples_split samples. El valor más alto de la profundidad máxima provoca un ajuste excesivo y un valor inferior provoca un ajuste insuficiente (Fuente).

En Scikit-learn, la optimización del clasificador del árbol de decisión se realiza solo con la poda previa. La profundidad máxima del árbol se puede utilizar como variable de control para la poda previa.

# Crear el clasificador de objetos del clasificador del árbol de decisiones = DecisionTreeClassifier(criterion="entropy", max_depth=3)# Entrenar el clasificador del árbol de decisiones del clasificador = classifier.fit(X_train,y_train)#Predecir la respuesta para el conjunto de datos de prueba y_pred = classifier.predict(X_test) # Precisión del modelo, ¿con qué frecuencia es correcto el clasificador? imprimir("Precisión:",metrics.accuracy_score(y_test, y_pred))

Bueno, la tasa de clasificación aumentó al 94%, que es una precisión mejor que el modelo anterior.

Ahora volvamos a visualizar el árbol de decisión podado después de la optimización.

dot_data = StringIO() export_graphviz(classifier, out_file=dot_data,filled=True, rounded=True, special_characters=True, feature_names = feature_cols,class_names=['0','1']) graph = pydotplus.graph_from_dot_data(dot_data.getvalue ()) Imagen(graph.create_png())
Figura

Árbol de decisión después de la poda

Este modelo recortado es menos complejo, explicable y fácil de entender que la gráfica del modelo de árbol de decisión anterior.

Conclusión

 
En este artículo, hemos cubierto muchos detalles sobre Decision Tree; Está funcionando, las medidas de selección de atributos como la ganancia de información, la relación de ganancia y el índice de Gini, la construcción del modelo de árbol de decisión, la visualización y la evaluación en el conjunto de datos del supermercado utilizando el paquete Python Scikit-learn y la optimización del rendimiento del árbol de decisión mediante el ajuste de parámetros.

Bueno, eso es todo por este artículo, espero que hayan disfrutado leyéndolo, siéntanse libres de compartir sus comentarios/pensamientos/retroalimentación en la sección de comentarios.

Figura

Gracias por leer !!!

 
 
Bio: Nagesh Singh Chauhan es un entusiasta de la ciencia de datos. Interesado en Big Data, Python, Machine Learning.

Original. Publicado de nuevo con permiso.

punto_img

Información más reciente

punto_img