## SVM - B)
## 2.
library(e1071)
## Warning: package 'e1071' was built under R version 3.4.4
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 3.4.4
for(j in 1:5){
# SIMULACIÓN
print(paste( 'SIMULACIÓN CON i=',j))
set.seed(5)
n<- 500
l<-2
y<-as.factor(c(rep(-1,n),rep(1,n)))
m=(j-1)/3.25
x1<-c(runif(n,3+m,3+m+l),runif(n,6,6+l))
x2<-c(runif(n,3+m,3+m+l),runif(n,6,6+l))
datos<-cbind.data.frame(x1,x2)
# PLANO ÓPTIMO DE SEPARACIÓN
# Los datos son linealmente separables, y están en un espacio de dos
# dimensiones, por lo tanto, obtendremos una recta óptima de separación.
# Genero SVM.
svm_datos<- svm(y ~ .,
data = datos,
type = c("C"),
cost = 1,
kernel = c("linear"),
scale = F
)
beta=c(0,0)
for(i in 1:svm_datos$tot.nSV){
beta = beta + c(svm_datos$SV[i,]*svm_datos$coefs[i,])
}
print("beta")
print(beta)
margen = 1/sqrt(beta%*%beta)
print("Margen")
print(margen)
beta_0 = -(svm_datos$rho)
print("beta_0")
print(beta_0)
print("Vectores de soporte")
print(svm_datos$SV )
print("Número total de vectores de soporte")
print(svm_datos$tot.nSV)
print("Matriz de clasificación que genera el modelo (primeros y últimos registros)")
print(head(cbind.data.frame(x1,x2,svm_datos$fitted)))
print(tail(cbind.data.frame(x1,x2,svm_datos$fitted)))
# Gráfica de la clasificación obtenida
clase<-as.numeric(svm_datos$fitted)
grafica <- as.data.frame(cbind(x1,x2,clase))
print(ggplot(grafica, aes(x1,x2)) + geom_point(aes(colour = clase))+
ggtitle("Cuadrados separados por SVM lineal")+
geom_abline(slope = -beta[1]/beta[2], intercept = -beta_0/beta[2] )+
geom_abline(slope = -beta[1]/beta[2], intercept = (-beta_0+margen)/beta[2] )+
geom_abline(slope = -beta[1]/beta[2], intercept = (-beta_0-margen)/beta[2] )
)
}
## [1] "SIMULACIÓN CON i= 1"
## [1] "beta"
## x1 x2
## -0.9467024 -0.9047532
## [1] "Margen"
## [,1]
## [1,] 0.7636428
## [1] "beta_0"
## [1] 10.21692
## [1] "Vectores de soporte"
## x1 x2
## 122 4.963778 4.993294
## 692 6.067918 6.048508
## [1] "Número total de vectores de soporte"
## [1] 2
## [1] "Matriz de clasificación que genera el modelo (primeros y últimos registros)"
## x1 x2 svm_datos$fitted
## 1 3.400429 3.932487 -1
## 2 4.370437 3.753912 -1
## 3 4.833752 4.157784 -1
## 4 3.568799 4.232293 -1
## 5 3.209300 4.781238 -1
## 6 4.402115 3.655866 -1
## x1 x2 svm_datos$fitted
## 995 7.802758 7.870378 1
## 996 7.385917 7.346159 1
## 997 6.885569 6.312459 1
## 998 6.004111 6.743805 1
## 999 6.022137 7.724164 1
## 1000 6.711034 6.082837 1

## [1] "SIMULACIÓN CON i= 2"
## [1] "beta"
## x1 x2
## -1.252472 -1.105172
## [1] "Margen"
## [,1]
## [1,] 0.5986745
## [1] "beta_0"
## [1] 13.33492
## [1] "Vectores de soporte"
## x1 x2
## 45 5.165578 5.307023
## 122 5.271471 5.300986
## 537 6.109314 6.047175
## 692 6.067918 6.048508
## [1] "Número total de vectores de soporte"
## [1] 4
## [1] "Matriz de clasificación que genera el modelo (primeros y últimos registros)"
## x1 x2 svm_datos$fitted
## 1 3.708121 4.240179 -1
## 2 4.678129 4.061605 -1
## 3 5.141444 4.465476 -1
## 4 3.876491 4.539985 -1
## 5 3.516993 5.088930 -1
## 6 4.709807 3.963559 -1
## x1 x2 svm_datos$fitted
## 995 7.802758 7.870378 1
## 996 7.385917 7.346159 1
## 997 6.885569 6.312459 1
## 998 6.004111 6.743805 1
## 999 6.022137 7.724164 1
## 1000 6.711034 6.082837 1

## [1] "SIMULACIÓN CON i= 3"
## [1] "beta"
## x1 x2
## -1.767090 -1.671647
## [1] "Margen"
## [,1]
## [1,] 0.4111013
## [1] "beta_0"
## [1] 19.98073
## [1] "Vectores de soporte"
## x1 x2
## 45 5.473270 5.614715
## 122 5.579163 5.608678
## 223 5.510662 5.540994
## 472 5.583715 5.451991
## 506 6.006919 6.187344
## 537 6.109314 6.047175
## 692 6.067918 6.048508
## 854 6.152127 6.047548
## [1] "Número total de vectores de soporte"
## [1] 8
## [1] "Matriz de clasificación que genera el modelo (primeros y últimos registros)"
## x1 x2 svm_datos$fitted
## 1 4.015814 4.547871 -1
## 2 4.985822 4.369297 -1
## 3 5.449136 4.773169 -1
## 4 4.184184 4.847677 -1
## 5 3.824685 5.396622 -1
## 6 5.017500 4.271251 -1
## x1 x2 svm_datos$fitted
## 995 7.802758 7.870378 1
## 996 7.385917 7.346159 1
## 997 6.885569 6.312459 1
## 998 6.004111 6.743805 1
## 999 6.022137 7.724164 1
## 1000 6.711034 6.082837 1

## [1] "SIMULACIÓN CON i= 4"
## [1] "beta"
## x1 x2
## -2.272707 -2.606677
## [1] "Margen"
## [,1]
## [1,] 0.2891579
## [1] "beta_0"
## [1] 28.94036
## [1] "Vectores de soporte"
## x1 x2
## 8 5.538947 5.889442
## 45 5.780962 5.922408
## 64 5.901748 5.573214
## 122 5.886855 5.916371
## 223 5.818355 5.848686
## 394 5.546906 5.890068
## 452 5.807928 5.691745
## 472 5.891407 5.759683
## 498 5.840083 5.645394
## 506 6.006919 6.187344
## 537 6.109314 6.047175
## 692 6.067918 6.048508
## 695 6.204730 6.033055
## 791 6.006771 6.248818
## 844 6.078012 6.135979
## 854 6.152127 6.047548
## 935 6.122262 6.146116
## [1] "Número total de vectores de soporte"
## [1] 17
## [1] "Matriz de clasificación que genera el modelo (primeros y últimos registros)"
## x1 x2 svm_datos$fitted
## 1 4.323506 4.855563 -1
## 2 5.293514 4.676989 -1
## 3 5.756828 5.080861 -1
## 4 4.491876 5.155370 -1
## 5 4.132377 5.704315 -1
## 6 5.325192 4.578943 -1
## x1 x2 svm_datos$fitted
## 995 7.802758 7.870378 1
## 996 7.385917 7.346159 1
## 997 6.885569 6.312459 1
## 998 6.004111 6.743805 1
## 999 6.022137 7.724164 1
## 1000 6.711034 6.082837 1

## [1] "SIMULACIÓN CON i= 5"
## [1] "beta"
## x1 x2
## -3.281951 -2.461953
## [1] "Margen"
## [,1]
## [1,] 0.24374
## [1] "beta_0"
## [1] 35.21231
## [1] "Vectores de soporte"
## x1 x2
## 8 5.846640 6.197135
## 20 5.915128 6.072153
## 45 6.088655 6.230100
## 49 5.817988 6.146996
## 54 6.182524 5.654904
## 64 6.209441 5.880906
## 87 6.172765 5.845700
## 122 6.194548 6.224063
## 144 6.029521 5.891815
## 178 6.163266 5.830134
## 223 6.126047 6.156379
## 249 5.941283 6.036235
## 269 5.767194 6.208238
## 357 5.871253 6.166716
## 366 6.051842 6.006284
## 377 5.771826 6.221703
## 393 5.816394 6.212733
## 394 5.854599 6.197760
## 452 6.115620 5.999437
## 472 6.199100 6.067375
## 498 6.147775 5.953086
## 506 6.006919 6.187344
## 520 6.115223 6.215361
## 537 6.109314 6.047175
## 649 6.348367 6.240217
## 683 6.019560 6.464005
## 692 6.067918 6.048508
## 695 6.204730 6.033055
## 704 6.438991 6.037309
## 791 6.006771 6.248818
## 816 6.188202 6.092108
## 823 6.398200 6.149546
## 839 6.073562 6.544783
## 844 6.078012 6.135979
## 854 6.152127 6.047548
## 866 6.190480 6.445228
## 908 6.379169 6.204807
## 927 6.158306 6.439953
## 935 6.122262 6.146116
## 965 6.356596 6.033545
## 993 6.278631 6.119256
## [1] "Número total de vectores de soporte"
## [1] 41
## [1] "Matriz de clasificación que genera el modelo (primeros y últimos registros)"
## x1 x2 svm_datos$fitted
## 1 4.631198 5.163256 -1
## 2 5.601206 4.984682 -1
## 3 6.064521 5.388553 -1
## 4 4.799568 5.463062 -1
## 5 4.440069 6.012007 -1
## 6 5.632884 4.886636 -1
## x1 x2 svm_datos$fitted
## 995 7.802758 7.870378 1
## 996 7.385917 7.346159 1
## 997 6.885569 6.312459 1
## 998 6.004111 6.743805 1
## 999 6.022137 7.724164 1
## 1000 6.711034 6.082837 1
