混淆矩阵,R,

混淆矩阵,R,,r,loops,confusion-matrix,R,Loops,Confusion Matrix,我需要以下代码的帮助。我必须建立一个循环,每次从5开始,加上3,直到我达到20为止,在训练数据上以不同的历元数训练神经网络模型。然后我必须计算一个折线图,显示不同年代的准确度。我还必须保持所有参数如图所示。大部分代码都是我们的讲师给出的。我添加了epochs=c(5,8,11,14,17,20)来创建一个epochs列表和error.rate=vector(),我打算将每个循环的精度存储到一个向量中。我想要的准确度来自混淆矩阵,并从公式中找到 h2o.命中率表(,train=TRUE)[1,2]

我需要以下代码的帮助。我必须建立一个循环,每次从5开始,加上3,直到我达到20为止,在训练数据上以不同的历元数训练神经网络模型。然后我必须计算一个折线图,显示不同年代的准确度。我还必须保持所有参数如图所示。大部分代码都是我们的讲师给出的。我添加了
epochs=c(5,8,11,14,17,20)
来创建一个epochs列表和
error.rate=vector()
,我打算将每个循环的精度存储到一个向量中。我想要的准确度来自混淆矩阵,并从公式中找到

h2o.命中率表(,train=TRUE)[1,2]

我面临的问题是,我试图创建一个循环。我试图从每个循环中得到结果。我已将循环的第一部分标记为X,以尝试将其放入向量中,以确保每个循环的精度进入向量
error.rate=h2o.hit_ratio_table(X,train=TRUE)[1,2])

然而,它给出了一个错误

> Error in is(object, "H2OModelMetrics") : object 'X' not found In
> addition: Warning messages: 1: In 1:epochs : numerical expression has
> 6 elements: only the first used
此外,当我删除
error.rate=..
部分时,函数运行良好,但无法找到精度值

我是R的一个新手,所以我非常感谢你的帮助

s <- proc.time()
 epochs= c(5,8,11,14,17,20)
 error.rate = vector()

 for (epoch in 1:epochs){#set up loop to go around 6 times
 X=h2o.deeplearning(x = 2:785,  # column numbers for predictors
               y = 1,   # column number for label
               training_frame = train_h2o, # data in H2O format
               activation = "RectifierWithDropout", # mathematical   activation function
               input_dropout_ratio = 0.2, # % of inputs dropout, because some inputs might not matter.
               hidden_dropout_ratios = c(0.25,0.25,0.25,0.25), # % for nodes dropout, because maybe we don't need full connections. Improves generalisability
               balance_classes = T, # over/under samples so that all classes are similar size.
               hidden = c(50,50,50,50), # two layers of 100 nodes
               momentum_stable = 0.99,
               nesterov_accelerated_gradient = T,
               error.rate=h2o.hit_ratio_table(x,train=TRUE)[1,2])
proc.time() - s}
s您正在为(epoch in 1:epochs)执行
。这里的“历元”术语会改变每个循环(通常在循环中使用它,但我看不到它?)<代码>1:epochs
不会像您认为的那样工作。它取历元(5)的第一个元素,基本上说(1:5的历元)历元是1,然后是2。。。然后是5。您需要类似于(epoch in epoch)的
for
,如果您确实需要代码中的1:每个epoch的序列,您应该将其写入循环中

而且,
x
每次循环时都会被重写。您应该初始化它并将其子集保存到每个循环中:

epochs= c(5,8,11,14,17,20)
 x <- list() # save as list #option 1
 y <- list() # for an option 2
 for (epoch in epochs){ #set up loop to go around 6 times
   X[[epoch]] = h2o.deeplearning(... )
   # or NOW you can somehow use 1:epoch where each loop epoch changes
 }
epochs=c(5,8,11,14,17,20)

你正在做的是“为了(1:epochs中的epoch)”。在这里,“epoch”一词会改变每个循环(通常在循环中使用它,但我看不到它?)1:时代不会像你认为的那样起作用。它取了历代(5)的第一个元素,基本上说是“为了(1:5的历代)”,其中历代是1,然后是2。。。然后是5。您需要类似于“for(epoch in epoch)”的内容,如果您确实希望代码中的每个epoch都有一个从1开始的序列,那么您应该在循环中编写它。此外,“x”和error.rate结果在每次循环时都会被重写。您应该改为运行“error.rate[epoch]=”。谢谢Evan,这非常有用……这就是为什么我无法让循环运行的原因。请允许我将其复制到答案中,以便您可以将此线程标记为已完成。干杯。谢谢埃文,你真的帮了大忙!!!!!