Logo Studenta

TP7_IAC2016_

¡Estudia con miles de materiales!

Vista previa del material en texto

Práctica: 
 
Desarrollo 
 
 
1. Crear un dataset artificial balanceado a partir de datos generados aleatoriamente 
con distribución normal de dimensiones [100,3]. Generar los primeros 50 patrones 
(perteneciente a la clase 1) con una distribución normal con media=8 y SD=2. Generar 
los 50 patrones restantes (perteneciente a la clase 0) con una distribución normal con 
media=11 y SD=2. 
 
set.seed(11031880) 
X1<-c(rnorm(50,8,2),rnorm(50,11,2)) 
X2<-c(rnorm(50,8,2),rnorm(50,11,2)) 
clase<-c(rep(1,50),rep(0,50)) 
 
2. Aplicar al dataset el método Hold-Out con un 70% para entrenar y el resto para 
prueba. 
 
set.seed(11031880) 
indice.test1<-sample(1:50,15) 
indice.test0<-sample(51:100,15) 
X1tr<-X1[-c(indice.test1,indice.test0)] 
X2tr<-X2[-c(indice.test1,indice.test0)] 
X1test<-X1[c(indice.test1,indice.test0)] 
X2test<-X2[c(indice.test1,indice.test0)] 
clase_tr<-clase[-c(indice.test1,indice.test0)] 
clase_test<-clase[c(indice.test1,indice.test0)] 
dataset_train_RNA<-data.frame(X1tr,X2tr,clase_tr) 
dataset_train_SVM<-cbind(X1tr,X2tr,clase_tr) 
dataset_test<-cbind(X1test,X2test,clase_test) 
 
 
3. Graficar el dataset de test. Los patrones de la clase 1 con color rojo y los patrones 
de la clase 0 con azul. Colocar a la gráfica el título “Dataset Test”. Etiquetar los ejes 
de la gráfica con “X1” y “X2”. Guardar la gráfica en formato PDF con el nombre 
“Grafica_dataset_test.pdf”. 
 
pdf("Grafica_dataset_test.pdf") 
plot(1:20,1:20,type="n",main='Dataset Test', xlab='X1', ylab='X2') 
points(dataset_test[1:15,1],dataset_test[1:15,2],col="red") 
points(dataset_test[16:30,1],dataset_test[16:30,2],col="blue") 
dev.off() 
 
 
 
4. Entrenar 10 veces una red neuronal con el algoritmo Back Propagation, la red debe 
tener 10 neuronas en la capa oculta, además se debe usar la derivada de la función de 
error como criterio de parada (la suma de errores cuadráticos) con un umbral igual a 
0.01, función de activación logística (logistic) tanto para la capa oculta como para la 
capa de salida y learning rate =0.001. (En caso de no converger ajuste los parámetros 
necesarios para asegurar la convergencia). 
 
library('neuralnet') 
red<-neuralnet(clase_tr~X1tr+X2tr,dataset_train_RNA,hidden=10,linear.output = FALSE, 
act.fct ="logistic", algorithm="backprop",threshold=0.05,learningrate=0.005, rep=10) 
print(red) 
 
 
 
Luego de repetir el procedimiento 10 veces, pude observar que el resultado que se daba con 
mayor frecuencia fue que la red convergía 6 de las 10 veces. 
 
5. Graficar la red aprendida. 
 
plot(red,rep="best") 
 
 
 
Gráfico de la red aprendida 
 
 
6. Realizar las predicciones sobre el conjunto de prueba. Calcular el error de 
Clasificación de la red. 
 
pred<-compute(red,dataset_test[,-3]) 
predicciones_RNA<-round(pred$net.result) 
ErrorC_RNA<-sum(predicciones_RNA!=dataset_test[,3])/length(dataset_test[,3]) 
ErrorC_RNA 
 
 
 
 
7. Graficar las predicciones obtenidas. Los patrones de la clase 1 con color rojo y los 
patrones de la clase 0 con azul. Colocar a la gráfica el título “Predicciones RNA”. 
Etiquetar los ejes de la gráfica con “X1” y “X2”. Guardar la gráfica en formato PDF 
con el nombre “Grafica_predicciones_RNA.pdf”. 
 
pdf("Grafica_Predicciones_RNA.pdf") 
plot(1:20,1:20,type="n", main='Predicciones RNA', xlab='X1', ylab='X2') 
points(dataset_test[predicciones_RNA==1,1],dataset_test[predicciones_RNA==1,2],col="r
ed") 
points(dataset_test[predicciones_RNA==0,1],dataset_test[predicciones_RNA==0,2],col="b
lue") 
dev.off() 
 
 
 
8. Entrenar una SVM con los mismos patrones de entrenamiento usados para 
entrenar la RNA del punto 4. 
 
library(e1071) 
ModeloSVM<-svm(dataset_train_SVM[,-3],dataset_train_SVM[,3], type = "C", kernel = 
“linear”) 
 
9. Realizar las predicciones sobre el mismo conjunto de prueba usado en el punto 6. 
Calcular el error de clasificación de la SVM. 
 
prediccionesSVM<- predict(ModeloSVM,dataset_test[,-3]) 
ErrorSVM<-sum(prediccionesSVM!= dataset_test[,3])/length(prediccionesSVM) 
ErrorSVM 
 
 
 
 
10. Graficar las predicciones obtenidas. Los patrones de la clase 1 con color rojo y los 
patrones de la clase 0 con azul. Colocar a la gráfica el título “Predicciones SVM”. 
Etiquetar los ejes de la gráfica con “X1” y “X2”. Guardar la gráfica en formato PDF 
con el nombre “Grafica_predicciones_SVM.pdf”. 
 
pdf("Grafica_predicciones_SVM.pdf") 
plot(1:20,1:20,type="n", main='Predicciones SVM', xlab='X1', ylab='X2') 
points(dataset_test[prediccionesSVM==1,1],dataset_test[prediccionesSVM==1,2],col="red
") 
points(dataset_test[prediccionesSVM==0,1],dataset_test[prediccionesSVM==0,2],col="blu
e") 
dev.off() 
 
 
 
11. Compare las tres gráficas: “Grafica_predicciones_RNA.pdf”, 
“Grafica_predicciones_SVM.pdf” y “Grafica_dataset_test.pdf”. Escriba sus 
conclusiones. 
 
 
 
 
Observando las 3 graficas podemos concluir que SVM fue quién predijo de manera más 
eficiente, aunque en ambos casos, o sea tanto en SVM como Back Propagation necesitaron 
ajustes de parámetros para minimizar el error. En ambos casos se realizaron 10 
experimentos de cada algoritmo, y pudimos observar que SVM es estable, mientras que 
Back Propagation es altamente inestable, ya que el error variaba de 0.16 a 0.5, siendo 0.5 
un error bastante significativo por lo que nos estaría indicando que el algoritmo no aprendió 
correctamente, y eso nos puede llevar a pensar que este alcanzaba mínimos locales en vez 
de mínimos globales; en cambio SVM siempre encuentra un mínimo global. No podemos 
establecer como regla general que el SVM sea mejor que el ANN, ya que en cada problema 
particular uno será mejor que otro. Otro factor a tener en cuenta, es que SVM no se 
introduce en la complejidad computacional en la que si se introduce ANN, es por ello que 
uno demuestra ser estable y el otro inestable respectivamente. 
 SVM posee un tiempo de entrenamiento mucho menor que el de Back Propagation 
que suele tomar un tiempo demasiado extenso.

Continuar navegando