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
Gracias por ejemplo, me ha sido de mucha utilidad. Saludos.
Hola muchas gracias, muy claro tu ejemplo
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