install.packages("rpart")
install.packages("rpart.plot")
library(rpart)
## Warning: package 'rpart' was built under R version 4.0.3
library(rpart.plot)
## Warning: package 'rpart.plot' was built under R version 4.0.3
library(data.table)
library(caret)
## Warning: package 'caret' was built under R version 4.0.3
## Loading required package: lattice
## Loading required package: ggplot2
iris que pertenecen a una base del set de datos de R.datos<-iris
r.part.arb1 <- rpart(Species~., data = datos,method="class") #~. quiere decir que incluye a todas las variables después de Species
rpart.plot(arb1)
Ahora evaluamos la precisión del modelo fuera de muestra
set.seed(12345)
ind<-createDataPartition(datos$Species,times = 1,p = 0.8,list = F) # dividimos la muestra en dos partes
train<-datos[ind,] # datos de entrenamiento
test<-datos[-ind,] # datos de prueba
arb2 <- rpart(Species~., data = train,method="class")
rpart.plot(arb2)
pred<-predict(arb2,newdata = test,type="class")
matconf<-table(test$Species,pred)
matconf
## pred
## setosa versicolor virginica
## setosa 10 0 0
## versicolor 0 10 0
## virginica 0 2 8
precis<-sum(diag(matconf))/sum(matconf)
precis
## [1] 0.9333333
Todos los pasos anteriormente descritos (3-4-5) se pueden condensar en una función:
prec<-function(x,y,z) {
pred <- predict(x, y, type = "class")
matconf <- table(y[,z], pred)
test<- sum(diag(matconf)) / sum(matconf)
test
}
prec(arb2,test,"Species")
## [1] 0.9333333
¿Qué sucede si cambiamos el mínimo de separaciones de nuestro modelo?
prcr<-rpart.control(minsplit = 6) # número mínimo de observaciones que deben existir en un nodo para que se intente una división
arb3 <- rpart(Species~., data = train,method="class",control=prcr)
rpart.plot(arb3)
prec(arb3,test,"Species")
## [1] 0.9333333