Teoría

Una Red Neuronal Artificial (ANN) modela la relación entre un connjunto de entradas y una salida, resolviendo un problema de aprendizaje.

Instalar paquetes y llamar librerías

# install.packages("neuralnet")
library(neuralnet) #Redes neuronales
library(caret) #Entrenamiento ML

Importar la base de datos

boston <- read.csv("C:\\Users\\USUARIO\\Downloads\\BostonHousing.csv")

Entender la base de datos

summary(boston)
##       crim                zn             indus            chas        
##  Min.   : 0.00632   Min.   :  0.00   Min.   : 0.46   Min.   :0.00000  
##  1st Qu.: 0.08205   1st Qu.:  0.00   1st Qu.: 5.19   1st Qu.:0.00000  
##  Median : 0.25651   Median :  0.00   Median : 9.69   Median :0.00000  
##  Mean   : 3.61352   Mean   : 11.36   Mean   :11.14   Mean   :0.06917  
##  3rd Qu.: 3.67708   3rd Qu.: 12.50   3rd Qu.:18.10   3rd Qu.:0.00000  
##  Max.   :88.97620   Max.   :100.00   Max.   :27.74   Max.   :1.00000  
##       nox               rm             age              dis        
##  Min.   :0.3850   Min.   :3.561   Min.   :  2.90   Min.   : 1.130  
##  1st Qu.:0.4490   1st Qu.:5.886   1st Qu.: 45.02   1st Qu.: 2.100  
##  Median :0.5380   Median :6.208   Median : 77.50   Median : 3.207  
##  Mean   :0.5547   Mean   :6.285   Mean   : 68.57   Mean   : 3.795  
##  3rd Qu.:0.6240   3rd Qu.:6.623   3rd Qu.: 94.08   3rd Qu.: 5.188  
##  Max.   :0.8710   Max.   :8.780   Max.   :100.00   Max.   :12.127  
##       rad              tax           ptratio            b         
##  Min.   : 1.000   Min.   :187.0   Min.   :12.60   Min.   :  0.32  
##  1st Qu.: 4.000   1st Qu.:279.0   1st Qu.:17.40   1st Qu.:375.38  
##  Median : 5.000   Median :330.0   Median :19.05   Median :391.44  
##  Mean   : 9.549   Mean   :408.2   Mean   :18.46   Mean   :356.67  
##  3rd Qu.:24.000   3rd Qu.:666.0   3rd Qu.:20.20   3rd Qu.:396.23  
##  Max.   :24.000   Max.   :711.0   Max.   :22.00   Max.   :396.90  
##      lstat            medv      
##  Min.   : 1.73   Min.   : 5.00  
##  1st Qu.: 6.95   1st Qu.:17.02  
##  Median :11.36   Median :21.20  
##  Mean   :12.65   Mean   :22.53  
##  3rd Qu.:16.95   3rd Qu.:25.00  
##  Max.   :37.97   Max.   :50.00
str(boston)
## 'data.frame':    506 obs. of  14 variables:
##  $ crim   : num  0.00632 0.02731 0.02729 0.03237 0.06905 ...
##  $ zn     : num  18 0 0 0 0 0 12.5 12.5 12.5 12.5 ...
##  $ indus  : num  2.31 7.07 7.07 2.18 2.18 2.18 7.87 7.87 7.87 7.87 ...
##  $ chas   : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ nox    : num  0.538 0.469 0.469 0.458 0.458 0.458 0.524 0.524 0.524 0.524 ...
##  $ rm     : num  6.58 6.42 7.18 7 7.15 ...
##  $ age    : num  65.2 78.9 61.1 45.8 54.2 58.7 66.6 96.1 100 85.9 ...
##  $ dis    : num  4.09 4.97 4.97 6.06 6.06 ...
##  $ rad    : int  1 2 2 3 3 3 5 5 5 5 ...
##  $ tax    : int  296 242 242 222 222 222 311 311 311 311 ...
##  $ ptratio: num  15.3 17.8 17.8 18.7 18.7 18.7 15.2 15.2 15.2 15.2 ...
##  $ b      : num  397 397 393 395 397 ...
##  $ lstat  : num  4.98 9.14 4.03 2.94 5.33 ...
##  $ medv   : num  24 21.6 34.7 33.4 36.2 28.7 22.9 27.1 16.5 18.9 ...
head(boston)
##      crim zn indus chas   nox    rm  age    dis rad tax ptratio      b lstat
## 1 0.00632 18  2.31    0 0.538 6.575 65.2 4.0900   1 296    15.3 396.90  4.98
## 2 0.02731  0  7.07    0 0.469 6.421 78.9 4.9671   2 242    17.8 396.90  9.14
## 3 0.02729  0  7.07    0 0.469 7.185 61.1 4.9671   2 242    17.8 392.83  4.03
## 4 0.03237  0  2.18    0 0.458 6.998 45.8 6.0622   3 222    18.7 394.63  2.94
## 5 0.06905  0  2.18    0 0.458 7.147 54.2 6.0622   3 222    18.7 396.90  5.33
## 6 0.02985  0  2.18    0 0.458 6.430 58.7 6.0622   3 222    18.7 394.12  5.21
##   medv
## 1 24.0
## 2 21.6
## 3 34.7
## 4 33.4
## 5 36.2
## 6 28.7

Partir la base de datos

set.seed(123)
renglones_entrenamiento_boston <- createDataPartition(boston$medv,p=0.7,list=FALSE)
entrenamiento_boston <- boston[renglones_entrenamiento_boston, ]
prueba_boston <- boston[-renglones_entrenamiento_boston, ]

Generar el modelo

modelo_boston <-neuralnet(medv~.,data=entrenamiento_boston)
summary(modelo_boston)
##                     Length Class      Mode    
## call                   3   -none-     call    
## response             356   -none-     numeric 
## covariate           4628   -none-     numeric 
## model.list             2   -none-     list    
## err.fct                1   -none-     function
## act.fct                1   -none-     function
## linear.output          1   -none-     logical 
## data                  14   data.frame list    
## exclude                0   -none-     NULL    
## net.result             1   -none-     list    
## weights                1   -none-     list    
## generalized.weights    1   -none-     list    
## startweights           1   -none-     list    
## result.matrix         19   -none-     numeric

Predecir con la red neuronal

prediccion <- compute(modelo_boston, prueba_boston[, -which(names(prueba_boston) == "medv")])$net.result
real <- prueba_boston$medv

boston_resultados <- data.frame(Real = real, Predicción = prediccion)
ggplot(boston_resultados, aes(x=Real, y= Predicción)) +
geom_point(color="blue") +
geom_abline(slope=1, intercept=0, color="red") +
theme_minimal() +
ggtitle("Predicción vs. Valores Reales")

LS0tDQp0aXRsZTogIlJlZGVzIE5ldXJvbmFsZXMgLSBCb3N0b24iDQphdXRob3I6ICJGYWJpYW5hIE1lZGluYWNlbGxpIC0gQTAwODM1ODk2Ig0KZGF0ZTogIjIwMjUtMDItMjYiDQpvdXRwdXQ6IA0KICBodG1sX2RvY3VtZW50Og0KICAgICAgdG9jOiBUUlVFDQogICAgICB0b2NfZmxvYXQ6IFRSVUUNCiAgICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUNCiAgICAgIHRoZW1lOiBzaW1wbGUNCiAgICAgIGhpZ2hsaWdodDogcHlnbWVudHMNCi0tLQ0KDQohW10oQzpcXFVzZXJzXFxVU1VBUklPXFxEZXNrdG9wXFxCbG9xdWUgLSBNb2R1bG8gMlxcYm9zdG9uY2l0eS5naWYpDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBHb2xkZW5yb2Q7Ij5UZW9yw61hPC9zcGFuPg0KVW5hICoqUmVkIE5ldXJvbmFsIEFydGlmaWNpYWwgKEFOTikqKiBtb2RlbGEgbGEgcmVsYWNpw7NuIGVudHJlIHVuIGNvbm5qdW50byBkZSBlbnRyYWRhcyB5IHVuYSBzYWxpZGEsIHJlc29sdmllbmRvIHVuIHByb2JsZW1hIGRlIGFwcmVuZGl6YWplLg0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjogR29sZGVucm9kOyI+SW5zdGFsYXIgcGFxdWV0ZXMgeSBsbGFtYXIgbGlicmVyw61hczwvc3Bhbj4NCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIGluc3RhbGwucGFja2FnZXMoIm5ldXJhbG5ldCIpDQpsaWJyYXJ5KG5ldXJhbG5ldCkgI1JlZGVzIG5ldXJvbmFsZXMNCmxpYnJhcnkoY2FyZXQpICNFbnRyZW5hbWllbnRvIE1MDQpgYGANCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBHb2xkZW5yb2Q7Ij5JbXBvcnRhciBsYSBiYXNlIGRlIGRhdG9zPC9zcGFuPg0KYGBge3J9DQpib3N0b24gPC0gcmVhZC5jc3YoIkM6XFxVc2Vyc1xcVVNVQVJJT1xcRG93bmxvYWRzXFxCb3N0b25Ib3VzaW5nLmNzdiIpDQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IEdvbGRlbnJvZDsiPkVudGVuZGVyIGxhIGJhc2UgZGUgZGF0b3M8L3NwYW4+DQpgYGB7cn0NCnN1bW1hcnkoYm9zdG9uKQ0Kc3RyKGJvc3RvbikNCmhlYWQoYm9zdG9uKQ0KYGBgDQojIDxzcGFuIHN0eWxlPSJjb2xvcjogR29sZGVucm9kOyI+UGFydGlyIGxhIGJhc2UgZGUgZGF0b3M8L3NwYW4+DQpgYGB7cn0NCnNldC5zZWVkKDEyMykNCnJlbmdsb25lc19lbnRyZW5hbWllbnRvX2Jvc3RvbiA8LSBjcmVhdGVEYXRhUGFydGl0aW9uKGJvc3RvbiRtZWR2LHA9MC43LGxpc3Q9RkFMU0UpDQplbnRyZW5hbWllbnRvX2Jvc3RvbiA8LSBib3N0b25bcmVuZ2xvbmVzX2VudHJlbmFtaWVudG9fYm9zdG9uLCBdDQpwcnVlYmFfYm9zdG9uIDwtIGJvc3RvblstcmVuZ2xvbmVzX2VudHJlbmFtaWVudG9fYm9zdG9uLCBdDQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IEdvbGRlbnJvZDsiPkdlbmVyYXIgZWwgbW9kZWxvPC9zcGFuPg0KYGBge3J9DQptb2RlbG9fYm9zdG9uIDwtbmV1cmFsbmV0KG1lZHZ+LixkYXRhPWVudHJlbmFtaWVudG9fYm9zdG9uKQ0Kc3VtbWFyeShtb2RlbG9fYm9zdG9uKQ0KYGBgDQojIDxzcGFuIHN0eWxlPSJjb2xvcjogR29sZGVucm9kOyI+UHJlZGVjaXIgY29uIGxhIHJlZCBuZXVyb25hbDwvc3Bhbj4NCmBgYHtyfQ0KcHJlZGljY2lvbiA8LSBjb21wdXRlKG1vZGVsb19ib3N0b24sIHBydWViYV9ib3N0b25bLCAtd2hpY2gobmFtZXMocHJ1ZWJhX2Jvc3RvbikgPT0gIm1lZHYiKV0pJG5ldC5yZXN1bHQNCnJlYWwgPC0gcHJ1ZWJhX2Jvc3RvbiRtZWR2DQoNCmJvc3Rvbl9yZXN1bHRhZG9zIDwtIGRhdGEuZnJhbWUoUmVhbCA9IHJlYWwsIFByZWRpY2Npw7NuID0gcHJlZGljY2lvbikNCmdncGxvdChib3N0b25fcmVzdWx0YWRvcywgYWVzKHg9UmVhbCwgeT0gUHJlZGljY2nDs24pKSArDQpnZW9tX3BvaW50KGNvbG9yPSJibHVlIikgKw0KZ2VvbV9hYmxpbmUoc2xvcGU9MSwgaW50ZXJjZXB0PTAsIGNvbG9yPSJyZWQiKSArDQp0aGVtZV9taW5pbWFsKCkgKw0KZ2d0aXRsZSgiUHJlZGljY2nDs24gdnMuIFZhbG9yZXPCoFJlYWxlcyIpDQpgYGANCg0KDQo=