Entrenamiento y ajuste de modelos de árboles de decisión
Antes de empezar
Classification-Boston.ipynb está abierto en Jupyter Notebook.
Nota: Si cerró Jupyter Notebook desde que completó la actividad anterior, deberá reiniciar Jupyter Notebook y volver a abrir el archivo. Para asegurarse de que todos los objetos y la salida de Python están en el estado correcto para comenzar esta actividad:
1. Seleccione Kernel→Reiniciar & y Borrar salida.
2. Seleccione Reiniciar y borrar todas las salidas.
3. Desplácese hacia abajo y seleccione la celda con la etiqueta Crear un árbol de decisiones básico.
4. Seleccione Celda→ Ejecutar todo lo anterior.
Escenario
Finalizará el entrenamiento de los modelos de clasificación del Titanic creando un modelo de árbol de decisión solitario, así como un modelo de bosque aleatorio que agregue varios árboles. Los resultados de estos modelos pueden superar el rendimiento de los modelos de regresión logística y k
-NN que creó anteriormente.
-------------------------------------------------------------------------------------------------------------------------------------------------------------
1.Cree un modelo básico de árbol de decisión.
1. Desplácese hacia abajo y vea la celda titulada Crear un modelo básico de árbol de decisión y examine la lista de código que aparece debajo de ella.
La línea 3 crea la versión scikit-learn del algoritmo CART para un árbol de decisión. El único hiperparámetro especificado es random_state
, que simplemente garantiza que los resultados sean los mismos cada vez que se ejecuta el código. De lo contrario, dado que no se especifica ningún otro hiperparámetro, el algoritmo utilizará los valores predeterminados:
- criterion
se establece como gini
de forma predeterminada, que es el índice Gini utilizado por CART.
- max_depth
se establece como None
de forma predeterminada; el árbol seguirá dividiéndose hasta que el índice de Gini sea 0 o hasta que todas las hojas contengan menos que número de muestras especificado por min_samples_split
.
- min_samples_split
se establece como 2
de forma predeterminada.
- min_samples_leaf
se establece como 1
de forma predeterminada.
2. Ejecute la celda de código.
El modelo predeterminado tiene una precisión del 79 %.
4. En la siguiente celda de código, examine el código.
Este código utilizará el de árbol de decisiones para predecir la supervivencia de los pasajeros.
5. Ejecute la celda de código.
Como es de esperar, los resultados de este modelo son diferentes de los resultados de los demás modelos.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2. Ajuste un modelo básico de árbol de decisión.
1. Desplácese hacia abajo y vea la celda titulada Ajustar un modelo básico de árbol de decisión y examine la lista de código que aparece debajo de ella.
Este código volverá a crear el modelo de árbol de decisiones básico, con un cambio en los hiperparámetros:
- max_depth
ahora se define explícitamente como 6
. Por lo tanto, el árbol no seguirá dividiéndose más allá de una profundidad de 6 ramas.
2. Ejecute la celda de código.
3. Examine el resultado.
La puntuación de este modelo mejoró del 79 % al 83 % después del ajuste.
4. En la siguiente celda de código, examine el código.
Este código utilizará el modelo de árbol de decisiones ajustado para predecir la supervivencia de los pasajeros en el conjunto de validación.
5. Ejecute la celda de código.
6. Examine el resultado.
Una vez más, los resultados ajustados difieren del original.
-------------------------------------------------------------------------------------------------------------------------------------------------------------
3. Visualice el árbol de decisiones.
Desplácese hacia abajo y vea la celda titulada Visualizar el árbol de decisiones y examine la lista de código debajo de ella.
Este código creará una visualización del árbol de decisiones. La profundidad máxima se establece en 3 para limitar el tamaño de la visualización.
2. Ejecute la celda de código.
3. Examine el resultado.
Esta visualización trunca el árbol a una profundidad de tres. Cada nodo incluye información de división/decisión en ese nodo. Si hubiera impreso todo el árbol, podría continuar descendiendo por el árbol hasta llegar a la parte inferior, donde hay varias hojas, cada una con sus propias predicciones de clase basadas en la lógica de bifurcación de sus nodos primarios.
Este árbol comienza evaluando la característica SexEncoding
del usuario. Recuerde que las pasajeras están codificadas como 1 y los pasajeros masculinos como 2. Por lo tanto, el nodo raíz evalúa si el valor codificado del pasajero es menor o igual que 1,5. Si es así, entonces esto significa que el pasajero es femenino. Si no, entonces el pasajero es masculino. En este punto del árbol, la decisión es que el pasajero pereció, simplemente porque más personas perecieron que sobrevivieron.
Si el pasajero es mujer, continúa a lo largo del lado izquierdo del árbol hasta el siguiente nodo de decisión. Este nodo intenta determinar si la pasajera estaba o no en clase 2 o inferior. También predice la supervivencia. Las divisiones luego continúan para la edad y el tamaño de la familia del pasajero, cada uno de los cuales también predice la supervivencia. La división de edad termina en una predicción de supervivencia si la edad del pasajero era menor o igual a dos años, aunque continúa dividiéndose en función de la tarifa del boleto para cualquier pasajera que no fuera tan joven. El tamaño de la división familiar continúa por edad y tarifa de boleto.
En el lado derecho del árbol, se evalúa a los pasajeros masculinos. El nodo después del nodo raíz también comprueba la clase del pasajero, pero esta vez busca ver si el pasajero estaba en la clase 1. Los siguientes nodos de decisión comprueban la tarifa y la edad del pasajero. Las tarifas de boletos más bajas terminan en una predicción de "pereció", mientras que los valores más altos continúan dividiéndose en la tarifa. En cuanto a la rama de edad en el extremo derecho, la división continúa con el tamaño de la familia del pasajero para los pasajeros masculinos muy jóvenes, mientras que los pasajeros masculinos no tan jóvenes se continúan dividiendo según un valor de edad diferente.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
4. Cree un modelo de bosque aleatorio.
1. Desplácese hacia abajo y vea la celda titulada Crear un modelo de bosque aleatorio y examine la lista de código que aparece debajo de ella.
La implementación de bosque aleatorio en scikit-learn utiliza gran parte de los mismos hiperparámetros que un árbol de decisión solitario. Sin embargo, hay dos nuevos hiperparámetros:
- n_estimators
especifica cuántos árboles de decisión se crearán en el bosque. Tener más de unos pocos cientos de árboles por lo general solo hará que el proceso de entrenamiento sea más lento sin proporcionar ninguna ganancia significativa, por lo que 100 debería ser un número adecuado.
- bootstrap
especifica si se realizará o no el embolsado. True
, el valor predeterminado, significa que existirá. Si es False
, todo el conjunto de entrenamiento se utilizará para cada árbol.
2. Ejecute la celda de código.
3. Examine el resultado.
Este modelo de bosque aleatorio inicial tiene una precisión del 84 %.
4. En la siguiente celda de código, examine el código.
Este código utilizará el modelo de bosque aleatorio para predecir la supervivencia de los pasajeros.
5. Ejecute la celda de código.
6. Examine el resultado.
-------------------------------------------------------------------------------------------------------------------------------------------------------------
5. Ajuste un modelo de bosque aleatorio.
1. Desplácese hacia abajo y vea la celda titulada Ajustar un modelo de bosque aleatorio y examine la lista de código que aparece debajo de ella.
Este código volverá a crear el modelo de bosque aleatorio utilizando valores de hiperparámetro diferentes.
- El valor del hiperparámetro n_estimators
se cambió de 100
a 150
.
- El valor del hiperparámetro max_depth
se cambió de 6
a 10
.
- El valor del hiperparámetro min_samples_leaf
se cambió de 10
a 12
.
2. Ejecute la celda de código.
3. Examine el resultado.
La puntuación de este modelo tuvo una leve mejora del 84 % al 85 % después del ajuste.
4. En la siguiente celda de código, examine el código.
Este código utilizará el modelo de bosque aleatorio ajustado para predecir la supervivencia de los pasajeros en el conjunto de validación.
5. Ejecute la celda de código.
6. Examine el resultado.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
6. Visualice la estructura de un árbol de decisiones en el bosque.
1. Desplácese hacia abajo y vea la celda titulada Visualizar la estructura de un árbol de decisiones en el bosque y examine la lista de código debajo de ella.
Este código creará una visualización del primer árbol del bosque.
2. Ejecute la celda de código.
Este árbol comienza evaluando SexEncoding
como lo hizo con el árbol de decisión solitario anteriormente. Sin embargo, los nodos de decisión se dividen en diferentes características. Por ejemplo, el primer nodo de decisión para las pasajeras femeninas se divide en Parch
(número de padres más hijos que el pasajero tenía a bordo), mientras que el primer nodo de decisión para los pasajeros masculinos se divide en el título del pasajero.
Recuerde que hay otros 99 árboles en este bosque. Cada árbol entrena en un muestreo diferente de los datos generales, por lo que es probable que cada árbol tome diferentes decisiones de división.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
7. Observe otro árbol en el bosque.
1. Desplácese hacia abajo y vea la celda titulada Observar otro árbol en el bosque y examine la lista de código debajo de ella.
Este código creará una visualización del segundo árbol del bosque.
2. Ejecute la celda de código.
Este árbol es diferente al primero. Comienza a dividirse según la clase del pasajero en lugar de SexEncoding
. Cualquier persona en primera clase se mueve por el lado izquierdo del árbol en una decisión de división basada en su título. Cualquier persona que no esté en la primera clase viaja por el lado derecho del árbol, donde se evalúa como hombre o mujer. Como antes, el árbol continúa tomando decisiones de división después de esto.
Como se muestra aquí, no todos los árboles de un bosque seguirán la misma lógica de división. Esto es, en última instancia, algo bueno, ya que el propósito de un bosque aleatorio es construir consenso a partir de las predicciones de clase de cada árbol, en lugar de simplemente generar los mismos árboles una y otra vez.