【问题标题】:Formula parameter in neuralnet function神经网络函数中的公式参数
【发布时间】:2025-12-25 23:35:12
【问题描述】:

DNN 是使用神经网络函数执行的。但是,如果我输入medv ~.,在如下的神经网络函数中的公式参数中,就会出现如下错误。

library("MASS")
data("Boston", package="MASS")
data<-Boston
keeps<-c("crim","indus","nox","rm","age","dis","tax","ptratio","lstat","medv")
data<-data[,keeps]

set.seed(2016)
train<-sample(1:nrow(data),400,FALSE)

fit<-neuralnet(medv~.,data=data[train,],hidden=c(10,12,20),algorithm="rprop+",err.fct="sse",
               act.fct="logistic",threshold=0.1,linear.output = TRUE)
Error in terms.formula(formula) : 
  formula 안에  '.'가 사용되었는데 'data' 인자가 없습니다

但是,如果我输入以下解释变量,则没有问题。

fit<-neuralnet(medv~crim+indus+nox+rm+age+dis+tax+ptratio+lstat, data=data[train,],hidden=c(10,12,20),algorithm="rprop+",err.fct="sse",
               act.fct="logistic",threshold=0.1,linear.output = TRUE)

如果解释变量很多,不可能一一写出来。有什么问题?我该怎么做才能将所有变量视为像 medv~ 这样的短代码。 .

【问题讨论】:

标签: r neural-network deep-learning formula


【解决方案1】:

你可以试试这个。

f = as.formula(paste('medv~', paste(names(Boston.scaled)[!names(Boston.scaled) %in% c('medv')], collapse='+')))

它对我有用。这是我的例子。

Boston.scaled <- as.data.frame(scale(Boston))
min.medv <- min(Boston$medv)

max.medv <- max(Boston$medv)
Boston.scaled$medv <- scale(Boston$medv
                            , center = min.medv
                            , scale = max.medv - min.medv)
f = as.formula(paste('medv~', paste(names(Boston.scaled)[!names(Boston.scaled) %in% c('medv')], collapse='+')))
Boston.nn.5.3 <- neuralnet(f
                           , data=Boston.scaled
                           , hidden=c(5,3), rep=3
                           , linear.output=TRUE)

error.v = which.min(Boston.nn.5.3$result.matrix[1, ])
nn.5.3.predY = compute(Boston.nn.5.3, Boston.scaled[, -14], rep=error.v)$net.result
nn.5.3.predY.scaled = nn.5.3.predY*(max.medv - min.medv) + min.medv
nn.5.3.MSE = mean((nn.5.3.predY.scaled-Boston$medv)^2)
plot(Boston$medv,nn.5.3.predY.scaled,col='red',main='Real vs predicted NN with linear.output',pch=18,cex=0.7)
abline(0,1,lwd=2)
legend('bottomright',legend=c('with'),pch=18,col='red', bty='n')

nn, neuralnet, neuralnetwork

【讨论】: