Aprendizaje automático supervisado y no supervisado

Redes neuronales

Una red neuronal, como su nombre indica, toma su forma computacional del mismo modo que funcionan las neuronas en un sistema biológico. En esencia, para una lista de entradas dada, una red neuronal realiza una serie de pasos de procesamiento antes de devolver una salida. La complejidad de las redes neuronales radica en el número de pasos de procesamiento y en la complejidad de cada uno de ellos.

Ejemplo de red neuronal

TRUE & TRUE
## [1] TRUE
TRUE & FALSE
## [1] FALSE
FALSE & FALSE
## [1] FALSE

¿Qué esta pasando dentro de esta red?

\(x_1\) \(x_2\) \(-20+15x_1+17x_2\) \(\frac{1}{e^{-(-20+15x_1+17x_2)}}\)
1 1 -20+15+17 1
1 0 -20+15 0
0 1 -20+17 0
0 0 -20 0

Funciones de activación

La función de activación es un nodo que define la salida de un nodo dada una entrada o un conjunto de entradas.

Redes neuronales en R

Vamos a trabajar con un conjunto de datos muy conocido en el análisis de datos llamado iris. Este conjunto de datos se compone de 150 observaciones sobre la planta iris.

Existen tres tipos de flores iris: virginica, setosa y versicolor, y hay unas 50 observaciones de cada una

Las variables o atributos que se miden de cada flor son: El tipo de flor como variable categorica, el largo y ancho del pétalo en cm como variables numéricas. el largo y el ancho del sépalo en cm como variables numéricas.

Iris

head(iris)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa

set.seed(123)
library(nnet)
iris.nn <- nnet(Species ~ ., data = iris, size = 2)
## # weights:  19
## initial  value 209.022391 
## iter  10 value 96.222855
## iter  20 value 14.106580
## iter  30 value 6.033138
## iter  40 value 5.981137
## iter  50 value 5.978256
## iter  60 value 5.971562
## iter  70 value 5.967520
## iter  80 value 5.965048
## iter  90 value 5.962782
## iter 100 value 5.960028
## final  value 5.960028 
## stopped after 100 iterations

knitr::kable(table(iris$Species, predict(iris.nn, iris, type = "class")))
setosa versicolor virginica
setosa 50 0 0
versicolor 0 49 1
virginica 0 1 49

set.seed(123)
library(nnet)
iris.nn <- nnet(Species ~ ., data = iris, size = 5)
## # weights:  43
## initial  value 230.587672 
## iter  10 value 34.485964
## iter  20 value 6.324708
## iter  30 value 6.076374
## iter  40 value 5.974267
## iter  50 value 5.960364
## iter  60 value 5.951942
## iter  70 value 5.949829
## iter  80 value 5.933602
## iter  90 value 5.626766
## iter 100 value 0.859872
## final  value 0.859872 
## stopped after 100 iterations

knitr::kable(table(iris$Species, predict(iris.nn, iris, type = "class")))
setosa versicolor virginica
setosa 50 0 0
versicolor 0 50 0
virginica 0 0 50

¡GRACIAS!