lunes, 10 de enero de 2011

Redes Neuronales en R. Función de activación.

######## Minería de datos ########
##### Tema 1: Redes neuronales ###
# La función de activación se utiliza para limitar el rango de valores de la respuesta de la neurona.
# Existen diversas funciones de activación y la decisión entre una u otra dependerá de la aplicación o problema a resolver
# Sea una neurona cuyas entradas sean el vector de estímulos X, el vector de pesos sonápticos W y el sesgo b, calculamos la respuesta de la neurana según la función umbral seleccionada.
X<-c(0,1,-1,0)
W<-c(.8,1,1,.5)
b<--1
 
respuesta<-function(entrada=X,pesos=W,sesgo=b,metodo="umbral",alfa=1)
{
salida<-X%*%W+b
if (metodo=="umbral") {if(salida<0){fi<-0} else {fi<-1}}
else if (metodo=="signo")
{if(salida<0) {fi<--1}
else if(salida==0) {fi<-0}
else if(salida>0) {fi<-1}}
else if (metodo=="logistica") {fi<-as.numeric(1/(1+exp(alfa*salida)))}
else if (metodo=="tang_hiperb") {fi<-as.numeric((1-exp(alfa*salida))/(1+exp(alfa*salida)))}
else if (metodo=="lineal") {fi<-as.numeric(salida)}
else if (metodo=="lineal_acot")
{if(salida<=0) {fi<-0}
else if(salida>0 && salida<1) {fi<-as.numeric(salida)}
else if(salida>=1) {fi<-1} }
else if (metodo=="lineal_acot_sim")
{if(salida<=-1) {fi<--1}
else if(salida>-1 && salida<1) {fi<-as.numeric(salida)}
else if(salida>=1) {fi<-1} }
fi
}
 
### En particular... #####
func_umbral<-function(entrada=X,pesos=W,sesgo=b)
{
salida<-X%*%W+b
if(salida<0){fi<-0} else {fi<-1}
fi
}
 
func_signo<-function(entrada=X,pesos=W,sesgo=b)
{
salida<-X%*%W+sesgo
if(salida<0)
fi<--1
else if(salida==0)
fi<-0
else if(salida>0)
fi<-1
fi
}
 
func_logistica<-function(entrada=X,pesos=W,sesgo=b,alfa=1)
{
salida<-X%*%W+sesgo
fi<-1/(1+exp(alfa*salida))
fi
}
 
func_tang_hiperb<-function(entrada=X,pesos=W,sesgo=b,alfa=2)
{
salida<-X%*%W+sesgo
fi<-(1-exp(alfa*salida))/(1+exp(alfa*salida))
fi
}
 
func_lineal<-function(entrada=X,pesos=W,sesgo=b)
{
salida<-X%*%W+sesgo
fi<-as.numeric(salida)
fi
}
 
func_lineal_acot<-function(entrada=X,pesos=W,sesgo=b)
{
salida<-X%*%W+sesgo
if(salida<=0)
fi<-0
else if(salida>0 && salida<1)
fi<-as.numeric(salida)
else if(salida>=1)
fi<-1
fi
}
 
func_lineal_acotSim<-function(entrada=X,pesos=W,sesgo=b)
{
salida<-X%*%W+sesgo
if(salida<=-1)
fi<--1
else if(salida>-1 && salida<1)
fi<-as.numeric(salida)
else if(salida>=1)
fi<-1
fi
}

Created by Pretty R at inside-R.org