Árboles de Clasificación en R

por | Oct 3, 2016 | R | 3 Comentarios

Uso: Clasificador mediante arboles de decisión

Descripción: Los árboles de clasificación tienen como objetivo crear un modelo que predice el valor de una variable de destino en función de diversas variables de entrada y son una de las técnicas más eficaces de la clasificación supervisada.

El árbol de decisión o de clasificación es una representación visual de la manera en que se estructuran las decisiones que dan lugar a la clasificación. El árbol de clasificación lo componen una serie de nodos internos y externos así como arcos que unen los nodos. Los nodos externos se les conocen como hojas del árbol y se marcan con una clase o una distribución de probabilidad sobre las clases.

Existen diferentes algoritmos que implementan este método entre los más conocidos se encuentran: ID3, C4.5, C5.0, CHAID, MARS o Árboles de Inferencia Condicional.

Variable dependiente: no métricas.

Variables independientes: métricas.

Ejemplo en R: Clasificar tipo de flor atendiendo a sus características físicas como pueden ser el ancho y alto de los pétalos y sépalos. (Usando el algoritmo C5.0)

# Carga el paquete específico del Árbol de clasificación C5.0
#install.packages("C50", dependencies = TRUE)
library(C50)

# Carga de datos inicial, tipos de flores con diferentes caracteristicas 
data(iris)
datos <- iris
View(datos)

# Selección de una submuestra del 70% de los datos
set.seed(101)
tamano.total <- nrow(datos)
tamano.entreno <- round(tamano.total*0.7)
datos.indices <- sample(1:tamano.total , size=tamano.entreno)
datos.entreno <- datos[datos.indices,]
datos.test <- datos[-datos.indices,]


# Acortamiento de nombres de setosa, versicolor y virginica
especie <- vector(length = dim(datos)[1])
especie[datos$Species=="setosa"] <-"se"
especie[datos$Species=="virginica"] <-"vi"
especie[datos$Species=="versicolor"] <-"ve"
datos$Species <- factor(especie)

# Ejecución del modelo de clasificación C5.0
modelo <- C5.0(Species ~ .,data = datos.entreno)
summary(modelo) # Información sobre el modelo
## 
## Call:
## C5.0.formula(formula = Species ~ ., data = datos.entreno)
## 
## 
## C5.0 [Release 2.07 GPL Edition]      Tue Feb 28 10:55:25 2017
## -------------------------------
## 
## Class specified by attribute `outcome'
## 
## Read 105 cases (5 attributes) from undefined.data
## 
## Decision tree:
## 
## Petal.Length <= 1.9: setosa (35)
## Petal.Length > 1.9:
## :...Petal.Width > 1.6: virginica (30/1)
##     Petal.Width <= 1.6:
##     :...Petal.Length <= 4.9: versicolor (36)
##         Petal.Length > 4.9: virginica (4/1)
## 
## 
## Evaluation on training data (105 cases):
## 
##      Decision Tree   
##    ----------------  
##    Size      Errors  
## 
##       4    2( 1.9%)   <<
## 
## 
##     (a)   (b)   (c)    <-classified as
##    ----  ----  ----
##      35                (a): class setosa
##            36     2    (b): class versicolor
##                  32    (c): class virginica
## 
## 
##  Attribute usage:
## 
##  100.00% Petal.Length
##   66.67% Petal.Width
## 
## 
## Time: 0.0 secs
plot(modelo) # Gráfico

# Para detallar un nodo en particular se usaria la siguiente función
plot(modelo, subtree=3)  #Muestra un nodo en particular

# predicción
prediccion <- predict(modelo,newdata=datos.test)

# Matriz de confusión
tabla <- table(prediccion, datos.test$Species)
tabla
##             
## prediccion   setosa versicolor virginica
##   setosa         15          0         0
##   versicolor      0         11         0
##   virginica       0          1        18
# % correctamente clasificados
100 * sum(diag(tabla)) / sum(tabla)
## [1] 97.77778
# Sepal no interviene, por lo tanto no necesita un valor
nuevo <- data.frame(Sepal.Length=NA,Sepal.Width=NA,Petal.Length=5,Petal.Width=1)
a <-predict(modelo,nuevo, type = "prob")
predict(modelo,nuevo)
## [1] virginica
## Levels: setosa versicolor virginica

3 Comentarios

  1. Gerardo

    Gracias por ejemplo, me ha sido de mucha utilidad. Saludos.

    Responder
  2. Oscar

    Hola muchas gracias, muy claro tu ejemplo

    Responder
  3. Carlos

    Intente replicar el modelo para un conjunto de datos y obtengo el siguiente error Error: C5.0 models require a factor outcome a pesar de que ya le di a la variable objetivo ( CHaracter con tres posibles resultados la funcion Factor, sabes que puede estar ocurriendo

    Responder

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *