我认为你指的是这段代码。
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”中。