R 中的神经网络公式
Neuralnet formula in R
我是 R 的初学者。
我正在尝试学习如何在 R 中制作神经网络并使用它们来预测输出。
我在网上找到了一个使用波士顿数据集的示例,并对其进行了调整以测试我的代码。它有效(我的 MSE 为 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 强制变量类型为 "formula" 类型。其中一般形式为Response~Variable_1+Variable_2。也就是说:使用变量 1 和变量 2 来预测响应值。
paste 是一个连接字符串片段的函数。所以
paste("Str","ing",sep="")
会给出 "String",用 sep="" 表示给我一个 "" 输入之间的分隔。什么都没有
在您拥有的代码中,它在第二个粘贴函数中使用了 collapse = " + ",它在值之间放置了一个加号。
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的公式
因此,使用另一个粘贴语句将 "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])
这是预测 "test_" 集合的值,使用 "nn" 并将它们存储在 "pr.nn"
中
我是 R 的初学者。
我正在尝试学习如何在 R 中制作神经网络并使用它们来预测输出。 我在网上找到了一个使用波士顿数据集的示例,并对其进行了调整以测试我的代码。它有效(我的 MSE 为 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 强制变量类型为 "formula" 类型。其中一般形式为Response~Variable_1+Variable_2。也就是说:使用变量 1 和变量 2 来预测响应值。
paste 是一个连接字符串片段的函数。所以
paste("Str","ing",sep="")
会给出 "String",用 sep="" 表示给我一个 "" 输入之间的分隔。什么都没有
在您拥有的代码中,它在第二个粘贴函数中使用了 collapse = " + ",它在值之间放置了一个加号。
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的公式
因此,使用另一个粘贴语句将 "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])
这是预测 "test_" 集合的值,使用 "nn" 并将它们存储在 "pr.nn"
中