Árboles de Clasificación en R

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