library(ISLR) #voy a usar los datos de baseball library(rpart) #trees library(rpart.plot) library(ipred) # para bagging data("Hitters") help("Hitters") Hitters<-na.omit(Hitters) # en el ejemplo de la teoría arbol<-rpart(Salary~Years+Hits, data=Hitters, method = "anova",maxdepth = 2) #anova para regresion, class para clasificacion rpart.plot(arbol)### lindo Hitters$Reg<-ifelse(Hitters$Years<5,1,ifelse(Hitters$Hits<118,2,3)) ggplot(Hitters, aes(x=Years,y=Hits,color=factor(Reg))) + geom_point()+ scale_color_manual(values = colores[3:5])+ labs(x = " ", y=" ",color="Region")+ theme_light() # Ejemplo: Usemos el set completo. #armamos un arbol para predecir el sueldo en funcion de las otras variables set.seed(27) train<-sample(1:nrow(Hitters),0.7*nrow(Hitters)) arbol<-rpart(Salary~., data=Hitters,subset = train, method = "anova") # anova para arbol de regresion, class para clasificacion summary(arbol) rpart.plot(arbol)### lindo plotcp(arbol) #grafica los alfa #gráfico menos lindo pero mas rapido plot(arbol, uniform=TRUE,main="Classification Tree") text(arbol, cex=.9) arbol$cptable #si lo quiero mas pequeño arbol2<-rpart(Salary~., data=Hitters,subset = train, method = "anova",maxdepth = 1) summary(arbol2) rpart.plot(arbol2) arbol$cptable #miramos el cp, elegimos el que de menor error, y lo usamos para podar # en este caso se da con cp=0.01629807 #podamos el arbol arbol$cptable which.min(arbol$cptable[,4]) #¿cual dice que es el mejor? cp<-arbol$cptable[which.min(arbol$cptable[,"xerror"]),"CP"] poda<-prune(arbol,cp=cp) rpart.plot(poda) #predecimos el test set y calculamos la estimacion del ECM predicho<-predict(arbol, newdata = Hitters[-train,]) ECM1<-mean(na.omit((predicho-Hitters$Salary[-train])^2)) predicho2<-predict(poda, newdata = Hitters[-train,]) ECM2<-mean(na.omit((predicho2-Hitters$Salary[-train])^2)) ECM1 ECM2 #bagging bag <- bagging(Salary~., data=Hitters,subset = train, nbagg = 150, control = rpart.control(minsplit = 2, cp = 0)) help("bagging") predicho3<-predict(bag,newdata = Hitters[-train,]) ECM3<-mean(na.omit((predicho3-Hitters$Salary[-train])^2)) ECM3 ################### #ahora lo mismo con random forest library(randomForest) bolsa<- randomForest(Salary~., data= Hitters,subset = train, mtry=4, importance=TRUE) #help("randomForest") predicho4<-predict(bolsa,newdata = Hitters[-train,]) ECM4<-mean(na.omit((predicho4-Hitters$Salary[-train])^2)) ECM4 importance(bolsa) varImpPlot(bolsa) #boosting library(gbm) boost<-gbm(Salary~., data=Hitters[train,], distribution = "gaussian", n.trees = 5000, interaction.depth = 2) #interaction.depth es el parametro de tuneo en este caso, con el que se a penalizando a medida que se elijen los arboles #para regresion usamos gausiana y para clasificacion usamos bernoulli summary(boost) #tira el relative influence plot predicho5<-predict(boost,newdata = Hitters[-train,], n.trees = 5000) ECM5<-mean(na.omit((predicho5-Hitters$Salary[-train])^2)) ECM5