Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Machine Learning
Juan Sebastián Rodríguez Garzón
Taller final
Gráfico
El gráfico nos muestra que la variable X50, X10, X30 y X20 son las más
determinantes al momento de realizar la clasificación. Al ser estas la ubicación de
un punto en el plano cartesiano la gráfica nos muestra que cada 10 trazos se
genera una variable de importancia que le da al modelo la información suficiente
para realizar una clasificación.
Matriz de confusión.
bat 158 19
bird 42 195
Universidad Externado de Colombia
Machine Learning
Juan Sebastián Rodríguez Garzón
El error del modelo fue del 14,73%. El conceto mejor clasificado fue bat con un
error del 10,73% mientras que el de bird fue del 17,72%
2) Pruebe ahora un modelo Random Forests (RF) con la misma separación de datos
Training/Testing del punto anterior. Evalúe los resultados obtenidos. Encuentra
evidencia para pasar al modelo RF o se queda con Bagging, recuerde que RF se
aplica cuando m=p
En este caso observamos un ligero aumento del error que paso a ser del 14,97%.
Esto nos arroja evidencia suficiente para quedarnos con el modelo de bagging ya
que tiene un error más pequeño que el Random Forest.
Lo que nos dice este modelo es que al ser las variables de mayor importancia X40
y X80, el último punto del dibujo es quien nos da el mayor indicio de clasificación
entre bat y bird.
boost.class
bat bird
bat 176 24
bird 39 175
El concepto mejor clasificado fue bat con un error del 12% contra un error del
15,99% de bird. El error general del modelo fue del 15,91%
Tunning.
bat bird
bat 172 28
bird 26 188
El error del modelo fue de 13,04%, una disminución con respecto a sus
parámetros originales y además un mejor que modelo que el random forest y el
bagging.
KernelLpredict
bat bird
bat 168 32
bird 74 140
El concepto mejor clasificado fue bat con un error del 16%, diferente de bird que
tuvo un error alto del 34%
El tunning del kernel lineal nos arrojo que el costo óptimo era:
Parameters:
SVM-Type: C-classification
SVM-Kernel: linear
cost: 5
KernelLpredict
bat bird
bat 54 146
bird 118 96
Sin embargo, el modelo que nos sugirió el tunning aumentó el error al 68%.
Universidad Externado de Colombia
Machine Learning
Juan Sebastián Rodríguez Garzón
Kernel polinómico.
En este caso primero haremos el tunnning que nos arroje los mejores parámetros
para correr el modelo:
- best parameters:
cost degree
3 3
svmpoli.predict
bat bird
bat 181 19
bird 72 142
El concepto mejor calificado fue bat y el error del modelo fue del 24%. Con este
resultado nos seguimos quedando con el modelo boosting,
Kernel radial.
svmRadial.predict
bat bird
bat 200 0
bird 214 0
Redes neuronales
Predicted
truth bat bird
bat 162 38
bird 102 112
En este caso vemos que el error fue de 33% y tuvo problemas en clasificar el
concepto bird, al aumentar a 4 capas observamos el siguiente resultado:
Predicted
truth bat bird
bat 81 119
bird 56 158
Obsevamos que al aumentar las capas el error aumenta con ellas para este
modelo.
Con 5 capas, aunque disminuye el error, sigue siendo mayor a las 3 capas
originales:
Predicted
truth bat bird
bat 173 27
bird 124 90
6. Repita los pasos 1-5 agregando 3 conceptos simples adicionales de tal forma que
repita los pasos descritos con 5 conceptos, obtiene los mismos resultados?
comparando con los resultados del taller anterior que modelo elegiría, su elección
es en función del desempeño o de la interpretabilidad? (20 puntos).
El concepto mejor clasificado fue la hamburguesa con un error del 10%. En cuanto
al error general del modelo se obtuvo un 21,10%
Random forest:
Boosting
El concepto mejor calificado fue hamburguesa con un error del 20%, mientras que
el error general del modelo fue cercano al 30%, no hubo una mejoría con respecto
a el modelo de boosting
svmRadial.predict
axe baseballbat bat bird hamburger
axe 0 0 0 207 0
baseballbat 0 1 0 205 0
bat 0 0 36 174 0
bird 0 0 1 196 0
hamburger 0 0 0 211 0
Redes neuronales
Con las redes neuronales el modelo tuvo problemas ya que presentó un error
bastante alto, del 74% respectivamente. Los resultados fueron los siguientes:
Predicted
truth axe bat bird hamburger
axe 57 145 1 4
baseballbat 15 191 0 0
bat 9 201 0 0
bird 9 187 0 1
hamburger 16 195 0 0
Universidad Externado de Colombia
Machine Learning
Juan Sebastián Rodríguez Garzón
El modelo no fue capaz de incluir uno de los conceptos de predicción lo que hace
que sea descartado.
En conclusión el mejor modelo tanto para los 2 conceptos como para los 5 conceptos fue
el modelo de boosting. Esto nos demuestra que este modelo de ensamble vertical es
bueno para realizar clasificaciones ya que va aprendiendo de los errores anteriores de
clasificación y asi puede ir realizando una mejor clasificación a medida que va avanzando
el modelo.
Código:
library(MASS)
library(splines)
library(neuralnet)
library(ISLR)
library(nnet)
library(e1071)
library(ggplot2)
library(dplyr)
library(reshape2)
library(Matrix)
library(RColorBrewer)
library(GGally)
install.packages("GGally")
library(ggplot2)
library(caret)
install.packages("glmnet")
library(glmnet)
library(boot)
install.packages("verification")
library(verification)
library(lattice)
install.packages("randomForest")
library(randomForest)
install.packages('gbm')
library(gbm)
install.packages('e1071')
library(e1071)
maxNumSketch=1000
numPoints=10
numTrazos=4
Universidad Externado de Colombia
Machine Learning
Juan Sebastián Rodríguez Garzón
listData=dataImportada(con,maxNumSketch)
dataFrame=data.frame(listData$data)
dataFrame$class=as.factor(listData$clases)
#Bagging
training_sample = sample(c(TRUE,FALSE),nrow(dataFrame),
replace = T,prob = c(0.8,0.2))
train=dataFrame[training_sample,]
test=dataFrame[!training_sample,]
set.seed(100)
bag.data=randomForest(class~.,data=train,mtry=80,importance=TRUE,ntree=5000
)
varImpPlot(bag.data)
bag.data
bag.classOut=predict(bag.data,newdata=test)
bag.classOut
bag.prob=predict(bag.data,newdata=test,type='prob')
table(bag.classOut,test$class)
errorBag=mean(test$class!=bag.classOut)
errorBag
#Random Forest
training_sample = sample(c(TRUE,FALSE),nrow(dataFrame),
replace = T,prob = c(0.8,0.2))
train=dataFrame[training_sample,]
test=dataFrame[!training_sample,]
set.seed(100)
sqrt(80)
RF.data=randomForest(class~.,data=train,mtry=8.94,importance=TRUE,ntree=500
0)
varImpPlot(RF.data)
RF.data
Universidad Externado de Colombia
Machine Learning
Juan Sebastián Rodríguez Garzón
RF.classOut=predict(RF.data,newdata=test)
RF.prob=predict(RF.data,newdata=test,type='prob')
table(RF.classOut,test$class)
errorRF=mean(test$class!=RF.classOut)
errorRF
#Boosting
boost.Data=gbm(class~.,
data=train,
n.trees=5000,
distribution = 'multinomial',
interaction.depth = 3,
verbose=TRUE)
summary(boost.Data)
boost.prob=predict(boost.Data,newdata=test,n.trees=500,type='response')
boost.class=levels(dataFrame$class)[apply(boost.prob,1,which.max)]
tableBoosting=table(test$class,boost.class)
tableBoosting
errorBoost=mean(test$class!=boost.class)
errorBoost
tableBoosting
tune.out$performances
errorSMV=mean(test$class!=KernelLpredict)
errorSMV
32/(168+32)
74/(74+140)
#Kernel polinomico
svmPoly.fit=svm(class~.,data=train,kernel='polynomial',degree=3,cost=3)
Universidad Externado de Colombia
Machine Learning
Juan Sebastián Rodríguez Garzón
svmPoly.fit
svmpoli.predict=predict(svmPoly.fit,newdata= test, decision.values = FALSE)
matrixConfusion=table(test$class,svmpoli.predict)
matrixConfusion
svmpoli.predict
#tuning
tune.out=tune(svm,class~.,data=train,kernel='polynomial',
ranges=list(cost=c(0.01,0.1,1,2,3,4,5,6,7),
degree=c(2,3,4)))
summary(tune.out)
#Kernel Radial
svmRadial.fit=svm(class~.,data=train,kernel='radial',gamma=1,cost=1)
svmRadial.predict=predict(svmRadial.fit,newdata= test)
matrixConfusion=table(test$class,svmRadial.predict)
matrixConfusion
#Redes neuronales