7 votos

En las redes neuronales, ¿cómo saber cuál es la característica que más contribuye al valor de salida?

Tengo una red neuronal que utiliza características de entrada $N$ algunas capas de entrada $L$ que predicen una variable continua $X$ . ¿Podemos decir qué características o combinación de 2 características de la inicial $N$ características son las que más contribuyen al cambio de $X$ ?

Ejemplo: Supongamos que intento predecir el precio de la vivienda en función del número de habitaciones, la superficie de la casa, la superficie del porche, la longitud y la anchura.

¿Puedo identificar la característica $x$ o la combinación de 2 características que provoca el mayor cambio en los precios de la vivienda?

Estaba pensando en una aproximación de fuerza bruta variando una característica y manteniendo el resto constante y ver varía más los precios. Si hay una manera estándar, por favor compartir algunos recursos para leer.

3voto

llg179 Puntos 1

Se trata más de una cuestión estadística que de programación específica. Si usted tiene su corazón puesto en el uso de redes neuronales un ejemplo utilizando la selección de características con el algoritmo de Garson es aquí . A continuación he proporcionado el código que puede probar. Espero que esto le puede dar algo para empezar.

Pero tenga en cuenta que ésta es sólo una respuesta posible. Hay muchos otros enfoques, ya que se trata de un campo de investigación muy activo (¡las redes neuronales son complejas!). Es muy probable que haya otros métodos más adecuados, más eficaces, etc. Es posible que ni siquiera quiera utilizar redes neuronales (desconozco sus motivos concretos). Dependiendo de sus datos, puede ser mejor utilizar algún método alternativo de selección de características antes de utilizar la red neuronal. Una simple búsqueda en google scholar de 'neural network feature selection' te devolverá varios artículos sobre el tema. Hay muchas opiniones muy firmes sobre el tema de las redes neuronales, así que ten en cuenta que no existe una respuesta definitiva.

# code from link noted above (slightly updated)
require(clusterGeneration)
require(nnet)

#define number of variables and observations
set.seed(2)
num.vars<-8
num.obs<-10000

#define correlation matrix for explanatory variables
#define actual parameter values
cov.mat<-genPositiveDefMat(num.vars,covMethod=c("unifcorrmat"))$Sigma
rand.vars<-mvrnorm(num.obs,rep(0,num.vars),Sigma=cov.mat)
parms<-runif(num.vars,-10,10)
y<-rand.vars %*% matrix(parms) + rnorm(num.obs,sd=20)

#prep data and create neural network
y<-data.frame((y-min(y))/(max(y)-min(y)))
names(y)<-'y'
rand.vars<-data.frame(rand.vars)
mod1<-nnet(rand.vars,y,size=8,linout=T)

require(devtools)

#import 'gar.fun' from beckmw's Github - this is Garson's algorithm
source_gist('6206737')

#use the function on the model created above
gar.fun('y',mod1)

Este es el gráfico de salida. Puedes ver que hay valores positivos y negativos. Los valores negativos y positivos reflejan relaciones negativas y positivas entre la variable y la variable de respuesta. nnet variable importance plot

0voto

megadarkfriend Puntos 3

caret ofrece importancia variable para modelos de redes neuronales junto con otros. Puede consultar este aquí que dice:

Redes neuronales: El método utilizado aquí se basa en el de Gevrey et al (2003), que utiliza combinaciones de los valores absolutos de las ponderaciones. Para los modelos de clasificación, las importancias específicas de cada clase serán las mismas.

También incluye la selección de características mediante características recursivas:

Eliminación recursiva de características: La importancia de las variables se calcula mediante el método de clasificación utilizado para la selección de características. Para el tamaño final del subconjunto, se promedian las importancias de los modelos de todas las remuestreos para calcular un valor global.

Esto es lo que puedes hacer:

library(caret)

# varimp
control <- trainControl(method="repeatedcv", number=10, repeats=3)
model <- train(y~., data=train, method="nnet",trControl=control)
imp<-varImp(model)
plot(imp)

# rfe
control <- rfeControl(functions=rfFuncs, method="cv", number=10)
results <- rfe(train[,!colnames %in% c("y")],train$y, sizes=c(1:(ncol(train)-1), rfeControl=control)
 print(results)
# features selected 
predictors(results)
plot(results, type=c("g", "o"))

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X