Aprender Clasificación con Árboles de Decisión en R

Robert Wood

Seguir

Jul 30, 2019 · 4 min read

Cuando se trata de la clasificación, utilizando un árbol de decisión clasificador es uno de los más fáciles de usar.

Por qué usar un árbol de decisión

  • Increíblemente fácil de interpretar
  • Maneja muy bien los datos faltantes & valores atípicos y, como tal, requiere mucho menos limpieza inicial
  • Puede renunciar a la codificación de variables categóricas ya que los árboles de decisión manejan bien las categorías.
  • Sin profundizar en los detalles de la partición recursiva, los árboles de decisión son capaces de modelar relaciones no lineales.

¿Por qué no usar un árbol de decisiones

Con todo lo bueno que dice que no siempre son la opción perfecta?

  • De la misma manera que pueden ser simples, también pueden ser demasiado complicados, por lo que es casi imposible conceptualizarlos o interpretarlos.
  • Para llevar esta idea un poco más lejos, con un árbol que es excesivamente sesgado o complicado, puede estar atendiendo demasiado bien a sus datos de entrenamiento y, como resultado, es un sobreajuste.

Model Training

Dicho esto, vamos a saltar a él. No hablaré mucho de validación cruzada o entrenamiento, prueba dividida, pero publicaré el código a continuación. Asegúrate de comentar si hay algo sobre lo que te gustaría tener más explicaciones.

Primero dividiremos los datos en conjuntos de pruebas de entrenamiento &.

También tenga en cuenta que usaremos el conjunto de datos clásico de titanic que se incluye en base R.

Ahora entrenaremos el modelo utilizando la función rpart del paquete rpart. Las cosas clave a tener en cuenta aquí es que la variable que queremos predecir es Sobrevivida, por lo que queremos entender la probabilidad de que cualquier individuo haya sobrevivido de acuerdo con algunos datos. ~ puede ser interpretado como por; en otras palabras, permite entender sobrevivido por algunas variables. Si después de la ~ hay una. eso significa que queremos usar todas las demás variables del conjunto de datos para predecir sobrevivientes. Alternativamente, como se muestra a continuación, podemos llamar a las variables que queremos usar explícitamente.

Otra cosa a tener en cuenta es que method es class. Esto se debe a que queremos crear un árbol de clasificación que predice resultados categóricos, en lugar de un árbol de regresión que se usaría para resultados numéricos. Y finalmente los datos que estamos usando para entrenar el modelo son train.

model <- rpart(formula = Survived ~ Pclass + Sex + Age + SibSp + Parch + Fare + Embarked,
data = titanic_train,
method = "class")

Interpretabilidad

Como se mencionó anteriormente, una de las cosas que hace que un árbol de decisiones sea tan fácil de usar es que es increíblemente fácil de interpretar. Puedes seguir las diferentes ramas del árbol a diferentes resultados.

rpart.plot(model)

Es un poco difícil de leer, pero si te acercas un poco, verás que el primer criterio de si es probable que alguien vivió o murió en el titanic era si era hombre. Si usted era un hombre, se mueve a la rama izquierda y trabaja dos nodos, ya sea que sea un adulto y su hermano/cónyuge cuenten a bordo. Así que si fueras un hombre soltero, las probabilidades de supervivencia eran bastante escasas.

Evaluación del rendimiento

Antes de desglosar las métricas, permite predecir los valores de su conjunto de pruebas. De forma similar a la llamada a entrenar, se seleccionan los datos y el tipo de predicción. La diferencia principal es la especificación del modelo.

test$pred <- predict(object = model, 
newdata = test,
type = "class")

Hay una variedad de métricas de evaluación de rendimiento que serán muy útiles para comprender la eficacia de su árbol de decisiones.

Precisión

Esta métrica es muy simple, qué porcentaje de sus predicciones fueron correctas. La función de matriz de confusión de caret incluye esto.

Matriz de confusión

La función confusionMatrix del paquete caret es increíblemente útil. Para evaluar el rendimiento del modelo de clasificación. Cargue el paquete y pásele sus predicciones & las actuales.

library(caret)
confusionMatrix(data = test$pred,
reference = test$Survived)

La primera cosa que esta función se muestra es lo que se llama una matriz de confusión. Esto le muestra una tabla de cómo se alinearon las predicciones y los datos reales. Así que las celdas diagonales donde la predicción y la referencia son las mismas representan lo que tenemos correcto. Contando esos 149 (106 + 43) y dividiéndolos por el número total de registros, 178; llegamos a nuestro número de precisión de 83.4%.

Verdadero positivo: La celda en el cuadrante donde tanto la referencia como la predicción son 1. Esto indica que ustedes predijeron la supervivencia y de hecho sobrevivieron.

Falso positivo: Aquí predijiste positivo, pero te equivocaste.

Negativo verdadero: Cuando predice negativo y está en lo correcto.

Falso negativo: Cuando predice negativo y es incorrecto.

Un par de métricas clave más a tener en cuenta son la sensibilidad y la especificidad. La sensibilidad es el porcentaje de registros verdaderos que predijo correctamente.

Por otro lado, la especificidad consiste en medir qué parte de los registros falsos reales predijo correctamente.

La especificidad se debe tener en cuenta al predecir un conjunto de datos desequilibrado. Un ejemplo muy común de esto es para clasificar el spam de correo electrónico. el 99% de las veces no es spam, por lo que si predijeras que nada era spam, tendrías un 99% de precisión, pero tu especificidad sería 0, lo que llevaría a que se aceptara todo el spam.

Conclusión

Espero que hayan disfrutado de esta rápida lección en árboles de decisión. Déjeme saber si hay algo que quería más información o si hay algo que te gustaría que yo para cubrir en otro post.

¡Feliz Ciencia de datos! Si te ha gustado esto, ven a ver otras publicaciones como esta en datasciencelessons.com!

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Previous post WordPress.org
Next post Plantación De Habas – Cómo Cultivar Habas En El Jardín