簡體   English   中英

R 和 H2O 中的參數優化

[英]Parameter optimization in R and H2O

我需要在 RH2o 上對 gbm 模型進行參數優化。 我對 H2o 比較陌生,我認為我需要在執行以下操作之前將 ntrees 和 learn_rate(below) 轉換為 H2o 向量。 如何執行此操作? 謝謝!

ntrees <- c(100,200,300,400)
learn_rate <- c(1,0.5,0.1)
for (i in ntrees){
  for j in learn_rate{
    n = ntrees[i]
    l= learn_rate[j]
    gbm_model <- h2o.gbm(features, label, training_frame = train, validation_frame = valid, ntrees=ntrees[[i]],max_depth = 5,learn_rate=learn_rate[j])
    print(c(ntrees[i],learn_rate[j],h2o.mse(h2o.performance(gbm_model, valid = TRUE))))

  }
}

您可以使用h2o.grid()進行網格搜索

# specify your hyper parameters
hyper_params = list( ntrees = c(100,200,300,400), learn_rate =  c(1,0.5,0.1) )

# then build your grid
grid <- h2o.grid(
## hyper parameters
hyper_params = hyper_params,

## which algorithm to run
algorithm = "gbm",

## identifier for the grid, to later retrieve it
grid_id = "my_grid", 

## standard model parameters
x = features, 
y = label, 
training_frame = train, 
validation_frame = valid,

## set a seed for reproducibility
seed = 1234)

您可以在 R 文檔http://docs.h2o.ai/h2o/latest-stable/h2o-r/h2o_package.pdf 中閱讀有關 h2o.grid() 如何工作的更多信息

勞倫的答案,使用網格,是這里最好的答案 我將很快指出,您所寫的是一種可用的方法,並且當網格不做您需要的事情時,您可以依靠這種方法。

您的示例不包含任何數據(請參閱https://stackoverflow.com/help/mcve )所以我無法運行它,但我糾正了我注意到的幾個語法問題(R 的 for-in 循環直接為您提供值,而不是索引和第二個 for 循環周圍的括號):

ntrees <- c(100,200,300,400)
learn_rate <- c(1,0.5,0.1)
for (n in ntrees){
  for (l in learn_rate){
    gbm_model <- h2o.gbm(
      features, label, training_frame = train, validation_frame = valid,
      ntrees = n,max_depth = 5,learn_rate = l
      )
    print(c(n,l,h2o.mse(h2o.performance(gbm_model, valid = TRUE))))
  }
}

像這樣使用嵌套循環的一個例子是,當您想跳過某些組合時。 例如,您可能決定僅以 0.1 的學習率測試 100 個 ntree,這將如下所示:

ntrees <- c(100,200,300,400)
learn_rate <- c(1,0.5,0.1)
for (n in ntrees){
  for (l in learn_rate){
    if(l == 0.1 && n > 100)next  #Skip when n is 200,300,400
    gbm_model <- h2o.gbm(
      features, label, training_frame = train, validation_frame = valid,
      ntrees = n,max_depth = 5,learn_rate = l
      )
    print(c(n,l,h2o.mse(h2o.performance(gbm_model, valid = TRUE))))
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM