我有一个神经网络,它使用输入特征,一些输入层预测连续变量。个特征中的哪些特征或 2 个特征的组合对的变化贡献最大?
示例:假设我试图根据房间数量、房屋面积、门廊面积、长度、宽度来预测房价。
我可以识别导致房价变化最大
我正在考虑一种蛮力方法,通过改变一个特征并保持静止不变,并看到价格变化最大。如果有标准的方式,请分享一些资源来阅读。
我有一个神经网络,它使用输入特征,一些输入层预测连续变量。个特征中的哪些特征或 2 个特征的组合对的变化贡献最大?
示例:假设我试图根据房间数量、房屋面积、门廊面积、长度、宽度来预测房价。
我可以识别导致房价变化最大
我正在考虑一种蛮力方法,通过改变一个特征并保持静止不变,并看到价格变化最大。如果有标准的方式,请分享一些资源来阅读。
这更像是一个统计问题,而不是一个特定的编程问题。如果您一心想使用神经网络,这里有一个使用 Garson 算法的特征选择的示例。下面我提供了您可以尝试的代码。希望这可以给你一些开始。
但请注意,这只是一种可能的答案。人们采取了许多其他方法,因为这是一个活跃的研究领域(神经网络很复杂!)。很可能还有其他方法可能更合适,更高效等。你可能甚至不想使用神经网络(我不知道你的具体原因)。根据您的数据,最好在神经网络之前使用一些替代特征选择。一个简单的谷歌学者搜索“神经网络特征选择”将返回几篇关于这个问题的论文。关于神经网络的主题有很多非常强烈的意见,所以请注意,那里没有明确的答案。
# 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)
这是输出图。您可以看到有正值和负值。负值和正值反映了变量和响应变量之间的正负关系。 
caret包为神经网络模型和其他模型提供了可变的重要性。你可以参考这里说:
神经网络:这里使用的方法基于 Gevrey 等人 (2003),它使用权重绝对值的组合。对于分类模型,特定类别的重要性将是相同的。
它还包括递归特征的特征选择:
递归特征消除:使用用于特征选择的排序方法计算变量重要性。对于最终的子集大小,对所有重新采样的模型的重要性进行平均以计算总体值。
这是您可以执行的操作:
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"))