在R中的神经网络公式

3

我是一个R语言的初学者。

我正在尝试学习如何在R中构建神经网络,并使用它们来预测输出结果。我在网上找到了一个使用波士顿数据集的例子并对其进行了修改以测试我的代码。虽然可以运行(但均方误差为250:( ),但我无法理解代码的这一部分。

   n <- names(train_)
   f <- as.formula(paste("pred_con ~", paste(n[!n %in% "pred_con"], collapse = " + ")))
   nn <- neuralnet(f,data=train_,hidden=c(5,3),linear.output=T)
   pr.nn <- compute(nn,test_[,1:5])

有人能解释一下这是如何运作的吗?谢谢!
1个回答

11
我认为你指的是这段代码。
   f <- as.formula(paste("pred_con ~", paste(n[!n %in% "pred_con"], collapse = " + ")))

让我们一步一步地解释这个内容。

f是变量名。

as.formula将变量类型强制转换为“formula”类型。它的一般形式为Response~Variable_1+Variable_2。这表示:使用变量1和变量2来预测响应值。

paste是一个将字符串片段连接起来的函数。因此,

paste("Str","ing",sep="") 

在这里,使用 sep="" 会给出 "String",表示不需要在输入值之间添加分隔符。

在代码中,第二个 paste 函数使用 collapse = " + ",这将在值之间添加加号。

paste(n[!n %in% "pred_con"], collapse = " + ")

n是train_set中列的名称

n <- names(train_)

所以使用paste(n, collapse=" + "),会在每个列名之间加上加号。

然而,我们不希望包含我们要预测的值“pred_con”。这在该行代码的早期部分处理。

因此,n[!n %in% "pred_con"]表示除了“pred_con”以外的每个名称。

因此,从...

paste(n[!n %in% "pred_con"], collapse = " + ")

我们获取除了“pred_con”之外的每个列名称,它们之间用加号相连。

我们想要Y~X1+X2的公式形式。

因此,使用另一个paste语句将“pred_con”粘贴到我们刚刚制作的列名称列表之前。得到如下结果:

paste("pred_con ~", paste(n[!n %in% "pred_con"], collapse = " + "))

最后,我们将其从字符串类型更改为公式类型,因此我们使用as.formula函数进行包装。

现在我们来看完整的代码行:

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

最后两行只是使用神经网络包的内容,所以我不会重点讲解。
 nn <- neuralnet(f,data=train_,hidden=c(5,3),linear.output=T)

这只是训练您的神经网络,并将其存储为“nn”。

   pr.nn <- compute(nn,test_[,1:5])

使用“nn”预测“test_”集的值,并将其存储在“pr.nn”中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接