我是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])
能有人解释一下这是如何工作的吗?谢谢!
回答:
我想你是指这段代码
f <- as.formula(paste("pred_con ~", paste(n[!n %in% "pred_con"], collapse = " + ")))
那么让我们逐步解析一下。
f 是变量名。
as.formula 函数将变量类型强制转换为“公式”类型。它的通用形式是 Response~Variable_1+Variable_2。这表示:使用变量1和变量2来预测响应值。
paste 是一个拼接字符串片段的函数。所以
paste("Str","ing",sep="")
会得到 “String”,其中 sep=”” 表示在输入之间不添加任何分隔符。
在你的代码中,它使用了 collapse = ” + “,这是在第二个 paste 函数中将值之间添加加号。
paste(n[!n %in% "pred_con"], collapse = " + ")
n 是 train_ 数据集中的列名
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” 中