我正在使用Garson算法通过R中的gar.fun()函数来提取输入到我的神经网络的每个变量的相对重要性,当我使用这个函数时,我得到了一个图作为结果(见下文),但我也想从这个函数中提取数值。如何做到这一点?
使用的数据可以在here中找到。
代码:
library(neuralnet)
library(devtools)
source_gist('6206737')
trainset <- data[1:300, ]
testset <- data[301:395, ]
nn <- neuralnet(Pass ~ ., data=trainset, hidden=c(16,14,10,5), stepmax = 13000, linear.output=FALSE, err.fct = "ce")
gar.fun('y', nn)
输出:
发布于 2020-03-18 05:23:38
我无法获得您的数据或复制您的图,但使用您获得代码的the website中的示例:
require(clusterGeneration)
require(nnet)
set.seed(2)
num.vars<-8
num.obs<-10000
cov.mat<-genPositiveDefMat(num.vars,covMethod=c("unifcorrmat"))$Sigma
rand.vars<-mvrnorm(num.obs,rep(0,num.vars),Sigma=cov.mat)
colnames(rand.vars) = paste0("col",1:ncol(rand.vars))
parms<-runif(num.vars,-10,10)
y<-rand.vars %*% matrix(parms) + rnorm(num.obs,sd=20)
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)
plotdata = gar.fun('y',mod1)
Y的值为:
plotdata$data
rel.imp x.names
col5 -1.0000000 col5
col4 -0.9699018 col4
col6 -0.8217886 col6
col1 0.0000000 col1
col7 0.3600374 col7
col8 0.4018898 col8
col3 0.6114887 col3
col2 0.9299521 col2
你可以在图中看到它们:
plotdata + geom_text(aes(label=round(rel.imp,3)),vjust=rep(c(2,-1.5),c(4,4)))
发布于 2020-03-28 18:01:42
本文描述了一种更精确的方法,该方法是由我开发的,这是R中的一个计算相对重要性的代码,但它使用了一个隐藏层
sqdif<-(nn$weights[[1]][[1]][-1,]-nn$startweights[[1]][[1]][-1,])^2
for(i in 1:(ncol(mydata)-1)){
tabl[1,i]<-sum(sqdif[i,])/sum(sqdif)
print(tabl[1,i])
}
https://stackoverflow.com/questions/60729679
复制相似问题