¿Qué es? Una red neuronal es un modelo computacional inspirado en la
estructura y el funcionamiento del cerebro humano. Está compuesta por
unidades llamadas neuronas artificiales o nodos, que están organizadas
en capas interconectadas. Estas capas incluyen una capa de entrada, una
o más capas ocultas y una capa de salida. Cada conexión entre nodos
tiene un peso asociado que modifica la información que se transmite a
través de la red.
La primera capa de la red neuronal (color verde) se conoce como capa
de entrada o input layer y recibe los datos en bruto, es decir, el valor
de los predictores. La capa intermedia (color azul), conocida como capa
oculta o hidden layer, recibe los valores de la capa de entrada,
ponderados por los pesos (flechas grises). La última capa, llamada
output layer, combina los valores que salen de la capa intermedia para
generar la predicción.
El funcionamiento de una red neuronal se basa en el aprendizaje a
partir de ejemplos. Durante la fase de entrenamiento, la red ajusta los
pesos de las conexiones para minimizar la diferencia entre las salidas
predichas y las salidas deseadas. Una vez entrenada, la red puede
generalizar y realizar predicciones o clasificaciones para datos no
vistos previamente.
La capa de entrada y salida son sencillas de establecer. La capa de entrada tiene tantas neuronas como predictores y la capa de salida tiene una neurona en problemas de regresión y tantas como clases en problemas de clasificación. En la mayoría de implementaciones, estos valores se establecen automáticamente en función del conjunto de entrenamiento. El usuario suele especificar únicamente el número de capas intermedias (ocultas) y el tamaño de las mismas.
Funcionamiento del Perceptrón
Función de activación
La función de activación determina la forma en que la neurona
procesa la información y cómo se propaga la información a través de la
red .
Las funciones de activación se utilizan para agregar no linealidad a
las redes neuronales. Las redes neuronales lineales son incapaces de
aprender funciones complejas, pero las funciones de activación no
lineales permiten a las redes neuronales aprender funciones más
complejas.
Función escalón: La función escalón es una función simple que
toma el valor de 1 si la entrada es mayor o igual a un umbral, y 0 si la
entrada es menor que el umbral.
Función sigmoide: La función sigmoide es una función en forma
de S que toma valores entre 0 y 1.
Función tangente hiperbólica: La función tangente hiperbólica
es una función en forma de S que toma valores entre -1 y 1.
Función ReLU: La función ReLU es una función que toma el valor
de la entrada si la entrada es positiva, y 0 si la entrada es
negativa.
Ventajas de las Redes Neuronales:
- Aprendizaje: Capacidad para aprender a través de una etapa de
aprendizaje.
- Autoorganización: Creación propia de representaciones de
información.
- Tolerancia a fallos: Almacena información de forma redundante para
responder incluso con daños parciales.
- Flexibilidad: Puede manejar cambios no importantes en la información
de entrada.
- Tiempo real: Estructura paralela permite respuestas en tiempo
real.
Uso y Futuro:
- Ideales como clasificadores y reconocedores de patrones.
- Capacidad para manejar excepciones y datos anormales.
- Potencial para avanzar según progresen en la neurociencia.
Desventajas de las Redes Neuronales:
- Complejidad de aprendizaje: Aumenta para tareas más grandes.
- Tiempo de aprendizaje elevado: Dependiente de la cantidad de patrones
y flexibilidad requerida.
- Falta de interpretación automática: La red no interpreta por sí misma
la salida.
- Elevada cantidad de datos para entrenamiento: Requiere más información
para flexibilidad.
- Falta de reglas definitorias: Problemas en la definición de redes para
ciertos problemas.
EJEMPLO
#install.packages("neuralnet")
#install.packages("caTools")
#install.packages("NeuralNetTools")
#install.packages("pROC")
library(neuralnet)
## Warning: package 'neuralnet' was built under R version 4.3.2
library(caTools)
library(NeuralNetTools)
## Warning: package 'NeuralNetTools' was built under R version 4.3.2
library(pROC)
## Warning: package 'pROC' was built under R version 4.3.2
## Type 'citation("pROC")' for a citation.
##
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
##
## cov, smooth, var
dataset <- datasets::mtcars
dataset_sc <- as.data.frame(cbind(dataset$am, scale(dataset[ ,c(1:8,10,11)])))
names(dataset_sc)[1] = "am"
set.seed(6)
sample <- sample.split(dataset_sc$am, SplitRatio = 0.70)
train <- subset(dataset_sc, sample == TRUE)
test <- subset(dataset_sc, sample == FALSE)
model.net = neuralnet(
formula = am ~ .,
data = train,
hidden = c(5,5),
stepmax = 1e+5,
linear.output = TRUE,
act.fct = "logistic",
)
data_pred = compute(model.net, test)$net.result
test_df = as.data.frame(cbind(round(data_pred), test$am))
plotnet(model.net)
#MATRIZ DE CONFUSIÓN
confusion_matrix <- table(test_df$V1, test_df$V2)
print(confusion_matrix)
##
## 0 1
## 0 6 0
## 1 0 4
sensibilidad <- confusion_matrix[2, 2] / sum(confusion_matrix[2, ])
especificidad <- confusion_matrix[1, 1] / sum(confusion_matrix[1, ])
print(paste("Sensibilidad = ",sensibilidad*100,"%"))
## [1] "Sensibilidad = 100 %"
print(paste("Especificidad = ", especificidad*100,"%"))
## [1] "Especificidad = 100 %"
curva_roc <- roc(test_df$V2, test_df$V1)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
plot(curva_roc)