Árboles de decisión en acción
Ya conocemos que, para determinar el mejor test de atributo en cada paso de construcción del árbol, podemos utilizar métricas que nos permitan medir la pureza de una partición.
Veamos en acción estas métricas, en este caso la entropía, para la generación del árbol de decisión a partir del conjunto de datos de lentes de contacto, el cual se muestra a continuación:
Podemos ver que la partición inicial es el conjunto de datos el cual se caracteriza por una distribución de clases
Datos = {𝟏, 𝟐, 𝟑, 𝟒, 𝟓, 𝟔, 𝟕, 𝟖, 𝟗, 𝟏𝟎, 𝟏𝟏, 𝟏𝟐, 𝟏𝟑, 𝟏𝟒, 𝟏𝟓, 𝟏𝟔, 𝟏𝟕, 𝟏𝟖, 𝟏𝟗, 𝟐𝟎, 𝟐𝟏, 𝟐𝟐, 𝟐𝟑, 𝟐𝟒}
Clases: ninguno (azul) duros (roja) blandos (verde)
¿ ?
Nodo raíz
Tenemos que determinar cuál variable del conjunto de datos utilizaremos como test de atributo en el nodo raíz ¿Cómo podemos hacerlo?
Para determinar el rendimiento de un test de atributo, se compara el grado de impureza del nodo padre (antes de la división), con el grado de impureza de los nodos hijos (después de la división). A más grande la diferencia, mejor será el test.
La ganancia de información (Δ), es un criterio que podemos utilizar para determinar la bondad de una división:
I = medida de impureza del nodo
N = número de registros en el nodo padre
k = número de valores del atributo (divisiones)
N = número de registros asociados al nodo hijo
Donde:
Así, para saber “cuánto ganamos de pureza” al utilizar una determinada variable como test de atributo debemos calcular la entropía del nodo padre y la entropía de la partición que resultaría si utilizamos este test en particular.
Recuerda que la entropía se calcula como:
donde p ( i │t) = fracción de registros pertenecientes a la clase i en el nodo t
Entonces, primero calculamos la entropía del nodo raíz:
Datos = {𝟏, 𝟐, 𝟑, 𝟒, 𝟓, 𝟔, 𝟕, 𝟖, 𝟗, 𝟏𝟎, 𝟏𝟏, 𝟏𝟐, 𝟏𝟑, 𝟏𝟒, 𝟏𝟓, 𝟏𝟔, 𝟏𝟕, 𝟏𝟖, 𝟏𝟗, 𝟐𝟎, 𝟐𝟏, 𝟐𝟐, 𝟐𝟑, 𝟐𝟒}
Clases: ninguno (azul) duros (roja) blandos (verde)
¿ ?
Nodo raíz
Ahora veamos qué pasa si utilizamos la variable edad como test de atributo ¿Cuál será la ganancia de información?
Edad
{𝟏, 𝟐, 𝟑, 𝟒, 𝟓, 𝟔, 𝟕, 𝟖, 𝟗, 𝟏𝟎, 𝟏𝟏, 𝟏𝟐, 𝟏𝟑, 𝟏𝟒, 𝟏𝟓, 𝟏𝟔, 𝟏𝟕, 𝟏𝟖, 𝟏𝟗, 𝟐𝟎, 𝟐𝟏, 𝟐𝟐, 𝟐𝟑, 𝟐𝟒}
joven
t1
{𝟏, 𝟐, 𝟑, 𝟒, 𝟓, 𝟔, 𝟕, 𝟖}
présbita
t3
{𝟏𝟕, 𝟏𝟖, 𝟏𝟗, 𝟐𝟎, 𝟐𝟏, 𝟐𝟐, 𝟐𝟑, 𝟐𝟒}
Pre-présbita
t2
{𝟗, 𝟏𝟎, 𝟏𝟏, 𝟏𝟐, 𝟏𝟑, 𝟏𝟒, 𝟏𝟓, 𝟏𝟔}
En los nodos hijos se genera una partición disjunta, donde se han agrupado los datos según su valor en la variable “edad”. Se calcula entonces la entropía en cada uno de estos nodos.
Ahora, hay que calcular el segundo término en la ecuación de ganancia de información con base en la entropía en cada nodo hijo y el número de datos que llegan a cada uno de ellos.
Entonces, si utilizamos la variable “edad” como test de atributos obtendríamos una ganancia de 0.534.
¿Qué pasaría si partimos de la variable "producción_de_lágrimas"?
producción de lágrimas
{𝟏, 𝟐, 𝟑, 𝟒, 𝟓, 𝟔, 𝟕, 𝟖, 𝟗, 𝟏𝟎, 𝟏𝟏, 𝟏𝟐, 𝟏𝟑, 𝟏𝟒, 𝟏𝟓, 𝟏𝟔, 𝟏𝟕, 𝟏𝟖, 𝟏𝟗, 𝟐𝟎, 𝟐𝟏, 𝟐𝟐, 𝟐𝟑, 𝟐𝟒}
reducida
normal
t1
t2
{𝟐, 𝟒, 𝟔, 𝟖, 𝟏𝟎, 𝟏𝟐, 𝟏𝟒, 𝟏𝟔, 𝟏𝟖, 𝟐𝟎, 𝟐𝟐, 𝟐𝟒}
{𝟏, 𝟑, 𝟓, 𝟕, 𝟗, 𝟏𝟏, 𝟏𝟑, 𝟏𝟓, 𝟏𝟕, 𝟏𝟗, 𝟐𝟏, 𝟐𝟑}
Entonces, si utilizamos la variable “producción de lágrimas” como test de atributos obtendríamos una ganancia de 0.685.
Si repetimos este proceso para las variables “astigmatismo” y “prescripción”, obtendríamos lo siguiente:
Se selecciona esta variable como test de atributo en el nodo raíz ya que proporciona la mayor ganancia de información (genera particiones más puras).
producción de lágrimas
producción de lágrimas
A continuación, se distribuyen los datos según su valor en la variables “producción_de_lágrimas”.
reducida
normal
normal
reducida
t2
t1
t2
t1
{𝟏, 𝟑, 𝟓, 𝟕, 𝟗, 𝟏𝟏, 𝟏𝟑, 𝟏𝟓, 𝟏𝟕, 𝟏𝟗, 𝟐𝟏, 𝟐𝟑}
{𝟐, 𝟒, 𝟔, 𝟖, 𝟏𝟎, 𝟏𝟐, 𝟏𝟒, 𝟏𝟔, 𝟏𝟖, 𝟐𝟎, 𝟐𝟐, 𝟐𝟒}
Como todos los datos de esta partición pertenecen a la misma clase (es una partición pura) este nodo se convierten en un nodo hoja con la etiqueta de clases “ninguno”.
Como la partición no es pura (hay datos de diferentes clases) se repite el proceso de buscar el mejor test de atributo, pero ahora solo utilizando los datos de esta partición.
Una vez alcanzada la condición de parada, el árbol resultante es:
¿Condición de parada?
Datos = {𝟏, 𝟐, 𝟑, 𝟒, 𝟓, 𝟔, 𝟕, 𝟖, 𝟗, 𝟏𝟎, 𝟏𝟏, 𝟏𝟐, 𝟏𝟑, 𝟏𝟒, 𝟏𝟓, 𝟏𝟔, 𝟏𝟕, 𝟏𝟖, 𝟏𝟗, 𝟐𝟎, 𝟐𝟏, 𝟐𝟐, 𝟐𝟑, 𝟐𝟒}
- Parar la expansión de un nodo cuando todos los registros pertenezcan a la misma clase.
- Parar la expansión de un nodo cuando todos los registros presenten valores similares.
- Establecer un número máximo de iteraciones.
- Establecer un número máximo de niveles o de hojas.
Además, es posible aplicar técnicas de poda para control de la complejidad. Por ejemplo, parar la expansión del árbol cuando se observa que la medida de impureza o la capacidad de predicción caen por debajo de un cierto umbral.
En general, estas técnicas de poda son implementadas por el algoritmo.
Una vez obtenido el árbol ¿Cómo podemos interpretarlo?
Es posible trasladar el árbol a un conjunto de reglas de clasificación. Por ejemplo, para la clase “ninguno” serían:
Por otra parte, vemos que algunos nodos hojas no son “puros”. Igual podemos hacer una predicción utilizando la clase mayoritaria con la que se ha etiquetado este e indicar la probabilidad de que un dato pertenezca a la clase.
Si “producción_de_lágrimas” es “reducida” entonces “lentes recomendados” es “ninguno”.
Regla 1:
Si “producción_de_lágrimas” es “normal”
y “astigmatismo” es “si”
y prescripción es “miope”
entonces “lentes recomendados” es “ninguno”.
Regla 2:
Mas adelante, veremos cómo podemos derivar la importancia de las variables a partir del árbol utilizando scikit-learn.
Además, podemos deducir cuáles son las variables más importantes para hacer las predicciones: serán las que se encuentran en los primeros niveles del árbol.
Por ejemplo, en este caso, la “producción_de_lágrimas” parece ser un factor determinante en la recomendación de lentes de contacto.
Referencias
Decision Trees. En: Andreas C. Müller, Sarah Guido (2016). Introduction to Machine Learning with Python. A Guide for Data Scientists. O’Reilly Media. Capítulo 2, páginas: 70 – 83.
Créditos
Profesora: Haydemar María Núñez CastroMonitor: Julián Camilo Montoya Rodriguez
Infografía 13. Árboles de decisión en acción
Modelos predictivos
Created on July 11, 2021
Start designing with a free template
Discover more than 1500 professional designs like these:
View
Gear Diagram
View
Square Timeline Diagram
View
Timeline Diagram
View
Timeline Diagram 3
View
Timeline Diagram 4
View
Timeline Diagram 2
View
Triangle Diagram 3
Explore all templates
Transcript
Árboles de decisión en acción
Ya conocemos que, para determinar el mejor test de atributo en cada paso de construcción del árbol, podemos utilizar métricas que nos permitan medir la pureza de una partición.
Veamos en acción estas métricas, en este caso la entropía, para la generación del árbol de decisión a partir del conjunto de datos de lentes de contacto, el cual se muestra a continuación:
Podemos ver que la partición inicial es el conjunto de datos el cual se caracteriza por una distribución de clases
Datos = {𝟏, 𝟐, 𝟑, 𝟒, 𝟓, 𝟔, 𝟕, 𝟖, 𝟗, 𝟏𝟎, 𝟏𝟏, 𝟏𝟐, 𝟏𝟑, 𝟏𝟒, 𝟏𝟓, 𝟏𝟔, 𝟏𝟕, 𝟏𝟖, 𝟏𝟗, 𝟐𝟎, 𝟐𝟏, 𝟐𝟐, 𝟐𝟑, 𝟐𝟒}
Clases: ninguno (azul) duros (roja) blandos (verde)
¿ ?
Nodo raíz
Tenemos que determinar cuál variable del conjunto de datos utilizaremos como test de atributo en el nodo raíz ¿Cómo podemos hacerlo?
Para determinar el rendimiento de un test de atributo, se compara el grado de impureza del nodo padre (antes de la división), con el grado de impureza de los nodos hijos (después de la división). A más grande la diferencia, mejor será el test.
La ganancia de información (Δ), es un criterio que podemos utilizar para determinar la bondad de una división:
I = medida de impureza del nodo N = número de registros en el nodo padre k = número de valores del atributo (divisiones) N = número de registros asociados al nodo hijo
Donde:
Así, para saber “cuánto ganamos de pureza” al utilizar una determinada variable como test de atributo debemos calcular la entropía del nodo padre y la entropía de la partición que resultaría si utilizamos este test en particular.
Recuerda que la entropía se calcula como:
donde p ( i │t) = fracción de registros pertenecientes a la clase i en el nodo t
Entonces, primero calculamos la entropía del nodo raíz:
Datos = {𝟏, 𝟐, 𝟑, 𝟒, 𝟓, 𝟔, 𝟕, 𝟖, 𝟗, 𝟏𝟎, 𝟏𝟏, 𝟏𝟐, 𝟏𝟑, 𝟏𝟒, 𝟏𝟓, 𝟏𝟔, 𝟏𝟕, 𝟏𝟖, 𝟏𝟗, 𝟐𝟎, 𝟐𝟏, 𝟐𝟐, 𝟐𝟑, 𝟐𝟒}
Clases: ninguno (azul) duros (roja) blandos (verde)
¿ ?
Nodo raíz
Ahora veamos qué pasa si utilizamos la variable edad como test de atributo ¿Cuál será la ganancia de información?
Edad
{𝟏, 𝟐, 𝟑, 𝟒, 𝟓, 𝟔, 𝟕, 𝟖, 𝟗, 𝟏𝟎, 𝟏𝟏, 𝟏𝟐, 𝟏𝟑, 𝟏𝟒, 𝟏𝟓, 𝟏𝟔, 𝟏𝟕, 𝟏𝟖, 𝟏𝟗, 𝟐𝟎, 𝟐𝟏, 𝟐𝟐, 𝟐𝟑, 𝟐𝟒}
joven
t1
{𝟏, 𝟐, 𝟑, 𝟒, 𝟓, 𝟔, 𝟕, 𝟖}
présbita
t3
{𝟏𝟕, 𝟏𝟖, 𝟏𝟗, 𝟐𝟎, 𝟐𝟏, 𝟐𝟐, 𝟐𝟑, 𝟐𝟒}
Pre-présbita
t2
{𝟗, 𝟏𝟎, 𝟏𝟏, 𝟏𝟐, 𝟏𝟑, 𝟏𝟒, 𝟏𝟓, 𝟏𝟔}
En los nodos hijos se genera una partición disjunta, donde se han agrupado los datos según su valor en la variable “edad”. Se calcula entonces la entropía en cada uno de estos nodos.
Ahora, hay que calcular el segundo término en la ecuación de ganancia de información con base en la entropía en cada nodo hijo y el número de datos que llegan a cada uno de ellos.
Entonces, si utilizamos la variable “edad” como test de atributos obtendríamos una ganancia de 0.534.
¿Qué pasaría si partimos de la variable "producción_de_lágrimas"?
producción de lágrimas
{𝟏, 𝟐, 𝟑, 𝟒, 𝟓, 𝟔, 𝟕, 𝟖, 𝟗, 𝟏𝟎, 𝟏𝟏, 𝟏𝟐, 𝟏𝟑, 𝟏𝟒, 𝟏𝟓, 𝟏𝟔, 𝟏𝟕, 𝟏𝟖, 𝟏𝟗, 𝟐𝟎, 𝟐𝟏, 𝟐𝟐, 𝟐𝟑, 𝟐𝟒}
reducida
normal
t1
t2
{𝟐, 𝟒, 𝟔, 𝟖, 𝟏𝟎, 𝟏𝟐, 𝟏𝟒, 𝟏𝟔, 𝟏𝟖, 𝟐𝟎, 𝟐𝟐, 𝟐𝟒}
{𝟏, 𝟑, 𝟓, 𝟕, 𝟗, 𝟏𝟏, 𝟏𝟑, 𝟏𝟓, 𝟏𝟕, 𝟏𝟗, 𝟐𝟏, 𝟐𝟑}
Entonces, si utilizamos la variable “producción de lágrimas” como test de atributos obtendríamos una ganancia de 0.685.
Si repetimos este proceso para las variables “astigmatismo” y “prescripción”, obtendríamos lo siguiente:
Se selecciona esta variable como test de atributo en el nodo raíz ya que proporciona la mayor ganancia de información (genera particiones más puras).
producción de lágrimas
producción de lágrimas
A continuación, se distribuyen los datos según su valor en la variables “producción_de_lágrimas”.
reducida
normal
normal
reducida
t2
t1
t2
t1
{𝟏, 𝟑, 𝟓, 𝟕, 𝟗, 𝟏𝟏, 𝟏𝟑, 𝟏𝟓, 𝟏𝟕, 𝟏𝟗, 𝟐𝟏, 𝟐𝟑}
{𝟐, 𝟒, 𝟔, 𝟖, 𝟏𝟎, 𝟏𝟐, 𝟏𝟒, 𝟏𝟔, 𝟏𝟖, 𝟐𝟎, 𝟐𝟐, 𝟐𝟒}
Como todos los datos de esta partición pertenecen a la misma clase (es una partición pura) este nodo se convierten en un nodo hoja con la etiqueta de clases “ninguno”.
Como la partición no es pura (hay datos de diferentes clases) se repite el proceso de buscar el mejor test de atributo, pero ahora solo utilizando los datos de esta partición.
Una vez alcanzada la condición de parada, el árbol resultante es:
¿Condición de parada?
Datos = {𝟏, 𝟐, 𝟑, 𝟒, 𝟓, 𝟔, 𝟕, 𝟖, 𝟗, 𝟏𝟎, 𝟏𝟏, 𝟏𝟐, 𝟏𝟑, 𝟏𝟒, 𝟏𝟓, 𝟏𝟔, 𝟏𝟕, 𝟏𝟖, 𝟏𝟗, 𝟐𝟎, 𝟐𝟏, 𝟐𝟐, 𝟐𝟑, 𝟐𝟒}
Además, es posible aplicar técnicas de poda para control de la complejidad. Por ejemplo, parar la expansión del árbol cuando se observa que la medida de impureza o la capacidad de predicción caen por debajo de un cierto umbral. En general, estas técnicas de poda son implementadas por el algoritmo.
Una vez obtenido el árbol ¿Cómo podemos interpretarlo?
Es posible trasladar el árbol a un conjunto de reglas de clasificación. Por ejemplo, para la clase “ninguno” serían:
Por otra parte, vemos que algunos nodos hojas no son “puros”. Igual podemos hacer una predicción utilizando la clase mayoritaria con la que se ha etiquetado este e indicar la probabilidad de que un dato pertenezca a la clase.
Si “producción_de_lágrimas” es “reducida” entonces “lentes recomendados” es “ninguno”.
Regla 1:
Si “producción_de_lágrimas” es “normal” y “astigmatismo” es “si” y prescripción es “miope” entonces “lentes recomendados” es “ninguno”.
Regla 2:
Mas adelante, veremos cómo podemos derivar la importancia de las variables a partir del árbol utilizando scikit-learn.
Además, podemos deducir cuáles son las variables más importantes para hacer las predicciones: serán las que se encuentran en los primeros niveles del árbol. Por ejemplo, en este caso, la “producción_de_lágrimas” parece ser un factor determinante en la recomendación de lentes de contacto.
Referencias
Decision Trees. En: Andreas C. Müller, Sarah Guido (2016). Introduction to Machine Learning with Python. A Guide for Data Scientists. O’Reilly Media. Capítulo 2, páginas: 70 – 83.
Créditos
Profesora: Haydemar María Núñez CastroMonitor: Julián Camilo Montoya Rodriguez