Está en la página 1de 4

empresa=read.csv("https://raw.githubusercontent.

com/VictorGuevaraP/ME-Machine-
Learning/master/Desafiliado.csv", sep = ";")
head(empresa)
empresa$Desafiliado=as.factor(empresa$Desafiliado)
str(empresa$Desafiliado)
plot(empresa, col=empresa$Desafiliado,pch=19)

library(caret)
particion <- createDataPartition(y = empresa$Desafiliado, p = 0.70, list = FALSE,
times = 1)
train <- empresa[particion, ]
test <- empresa[-particion, ]
dim(train)
dim(test)
#Estimar el árbol
library(rpart)
arbol1=rpart(Desafiliado~.,data=train,method="class")
arbol1

# Graficando el arbol
plot(arbol1,margin=.25)
text(arbol1,use.n=T)

#Mejorando los Gráficos


#installed.packages('partykit')
library(partykit)
plot(as.party(arbol1), tp_args = list(id = FALSE))

#installed.packages('rattle')
library(rattle)
drawTreeNodes(arbol1)

library(rpart.plot)
prp(arbol1, type=1, extra = 101, box.palette = "auto")
rpart.plot(arbol1)
rpart.plot(arbol1,
extra = 104,
box.palette = "GnBu",
branch.lty = 4,
shadow.col = "gray",
nn = TRUE)

#Realizando el modelo con un minsplit=5


arbol2=rpart(Desafiliado~.,data=train,method="class", minsplit=5)
arbol2
plot(as.party(arbol2), tp_args = list(id = FALSE))
rpart.plot(arbol2, extra = 101)

#considerando minbucket=50 (minsplit=150)


#Estimar el árbol
arbol3=rpart(Desafiliado~.,data=train,method="class",
minbucket=50)
arbol3
rpart.plot(arbol3, extra = 101)

#Controlando el crecimiento del árbol


#con el parámetro de complejidad (cp=0.05)
arbol4=rpart(Desafiliado~.,data=train,method="class", cp=0.05)
arbol4
plot(as.party(arbol4), tp_args = list(id = FALSE))

#Utilizando cp=0.001 para obtener un árbol con más ramas


arbol5=rpart(Desafiliado~.,data=train,method="class",
cp=0.001)
arbol5
plot(as.party(arbol5), tp_args = list(id = FALSE))

#Controlando el crecimiento del árbol


#por número máximo de niveles (maxdepth=3)
arbol6=rpart(Desafiliado~.,data=train,method="class",
maxdepth=3)
plot(as.party(arbol6), tp_args = list(id = FALSE))

###############################
#Podar el árbol
arbol5
arbol7=prune(arbol5,cp=.1)
plot(as.party(arbol7), tp_args = list(id = FALSE))
printcp(arbol7)
plotcp(arbol7)
arbol8=prune(arbol5,cp=.017)
plot(as.party(arbol8), tp_args = list(id = FALSE))
printcp(arbol8)
plotcp(arbol8)

#Valor óptimo de CP
arbol.completo <- rpart(Desafiliado~.,data=train,method="class",
cp=0, minbucket=0)
arbol.completo
xerr <- arbol.completo$cptable[,"xerror"]
minxerr <- which.min(xerr)
mincp <- arbol.completo$cptable[minxerr, "CP"]
arbol.prune <- prune(arbol.completo,cp=mincp)
plot(as.party(arbol.prune), tp_args = list(id = FALSE))

#PREDICHOS
#Calculamos los valores predichos utilizando el ultimo arbol costruido
pred=predict(arbol.prune,test,type="class")
#Calcular el error de mala clasificación
error=mean(pred!=test$Desafiliado)
error

#Calcular la matriz de confusión


table(pred,test$Desafiliado)

# Matriz de perdidas
library(gmodels)
CrossTable(pred, test$Desafiliado)

#Indicadores
library(caret)
indicadores=confusionMatrix(pred, test$Desafiliado)
indicadores

##################################
#curva roc
pred_prob<-predict(arbol.prune, test, type = "prob")[,2]
library(ROCR)
predR1 <- prediction(pred_prob, test$Desafiliado)
predR2<-performance(predR1, "tpr", "fpr")
plot(predR2, colorize = T)
lines(x=c(0, 1), y=c(0, 1), col=" blue", lwd=1, lty=3);
lines(x=c(1, 0), y=c(0, 1), col="red", lwd=1, lty=4)

#Indice GINI
ROCRN <- round(performance(predR1, measure = "auc")@y.values[[1]]*100, 2)
giniRN <- (2*ROCRN - 100)
giniRN

############################################
#overfitting o sobreajuste
arbol.completo
pred1=predict(arbol.completo, train, type="class")
table(pred1, train$Desafiliado)
pred2=predict(arbol.completo, test, type="class")
table(pred2, test$Desafiliado)
indicadores1=confusionMatrix(pred1, train$Desafiliado)
indicadores2=confusionMatrix(pred2, test$Desafiliado)
indicadores1
indicadores2
#############################################

##################################################
# Random Forests
##################################################
library(randomForest)
library(ISLR)
library(tree)

set.seed(111)
res1 <- randomForest( Desafiliado ~ ., data = train,
mtry = 2, importance = TRUE,
do.trace = 10)
print(res1)
importance(res1)
varImpPlot(res1)
predichos<-predict(res1, test, type="response")
table(pred,test$Desafiliado)
mean(pred!=test$Desafiliado)

##################################################
#Boosting
##################################################
library(gbm)
library(adabag)

# Boosting
data("iris")
view(iris)

modelo_boo<- boosting(Species ~ ., data = iris, mfinal = 10,control =


rpart.control(maxdepth = 1))
modelo_boo
barplot(modelo_boo$imp[order(modelo_boo$imp, decreasing = TRUE)],
ylim = c(0, 100), main = "Importancia relativa de las variables",
col = "lightblue")

#############################

También podría gustarte