29

我正在尝试使用神经网络进行预测。

创建一些 X:

x <- cbind(seq(1, 50, 1), seq(51, 100, 1))

创建 Y:

y <- x[,1]*x[,2]

给他们起个名字

colnames(x) <- c('x1', 'x2')
names(y) <- 'y'

制作data.frame:

dt <- data.frame(x, y)

现在,我得到了错误

model <- neuralnet(y~., dt, hidden=10, threshold=0.01)

terms.formula(公式)中的错误:'。' 在公式中,没有“数据”参数

例如,在 lm(线性模型)中,这是可行的。

4

3 回答 3

50

正如我的评论所述,这看起来像是 non-exported function 中的错误neuralnet:::generate.initial.variables。作为一种解决方法,只需从 的名称构建一个长公式dt,不包括y,例如

n <- names(dt)
f <- as.formula(paste("y ~", paste(n[!n %in% "y"], collapse = " + ")))
f

## gives
> f
y ~ x1 + x2

## fit model using `f`
model <- neuralnet(f, data = dt, hidden=10, threshold=0.01)

> model
Call: neuralnet(formula = f, data = dt, hidden = 10, threshold = 0.01)

1 repetition was calculated.

        Error Reached Threshold Steps
1 53975276.25     0.00857558698  1967
于 2013-07-22T18:33:57.843 回答
10

dt提供一个比上一个答案更简单的替代方案,您可以从using的名称创建一个公式reformulate()

f <- reformulate(setdiff(colnames(dt), "y"), response="y")

reformulate()不需要使用paste()并自动将术语添加在一起。

于 2017-06-29T13:04:10.183 回答
0

扩展公式

f <- formula(terms(f, data= dt))

甚至更短

f <- formula(dt, f)

其中f是公式,dt是数据。


例如,原始公式可能是:

f <- as.formula("y ~ .")
于 2021-09-21T12:32:45.587 回答