2017-07-21 17 views
0

私はベイジアン最適化コードを持っており、値と選択されたパラメータで結果を出力します。私の質問は - どのように最良の組み合わせが選ばれたのですか?私のケースのRMSE分の値は、別のラウンドでより低かったのですか?r - 結果のベイジアン最適化

コード:

library(xgboost) 
library(rBayesianOptimization) 


data(agaricus.train, package='xgboost') 
dtrain <- xgb.DMatrix(agaricus.train$data, label = agaricus.train$label) 

cv_folds <- KFold(
        y 
        , nfolds = 5 
        , stratified = TRUE 
        , seed = 5000) 

xgb_cv_bayes <- function(eta, max.depth, min_child_weight, subsample,colsample_bytree) { 
    cv <- xgb.cv(params = list(booster = "gbtree" 
          # , eta = 0.01 
          , eta = eta 
          , max_depth = max.depth 
          , min_child_weight = min_child_weight 
          , colsample_bytree = colsample_bytree 
          , subsample = subsample 
          #, colsample_bytree = 0.3 
          , lambda = 1 
          , alpha = 0 
          , objective = "reg:linear" 
          , eval_metric = "rmse") 
       , data = dtrain 
       , nround = 1000 
       , folds = cv_folds 
       , prediction = TRUE 
       , showsd = TRUE 
       , early_stopping_rounds = 10 
       , maximize = TRUE 
       , verbose = 0 
       , finalize = TRUE) 
    list(Score = cv$evaluation_log[,min(test_rmse_mean)] 
     ,Pred = cv$pred 
     , cb.print.evaluation(period = 1)) 
} 

cat("Calculating Bayesian Optimum Parameters\n") 

OPT_Res <- BayesianOptimization(xgb_cv_bayes 
           , bounds = list(
            eta = c(0.001, 0.03) 
           , max.depth = c(3L, 10L) 
           , min_child_weight = c(3L, 10L) 
           , subsample = c(0.8, 1) 
           , colsample_bytree = c(0.5, 1)) 

           , init_grid_dt = NULL 
           , init_points = 10 
           , n_iter = 200 
           , acq = "ucb" 
           , kappa = 3 
           , eps = 1.5 
           , verbose = TRUE) 
+0

これはパッケージに依存しますが、コードやタイトルに使用しているパッケージを含めることはできますか? –

+0

代表的なもの - xgboostとrBayesianOptimization – Kalenji

答えて

1

help(BayesianOptimization)から、パラメータFUN

機能すべきを最大化。このファンクションは、2つのコンポーネントを持つ という名前のリストを返す必要があります。第1の構成要素「スコア」は、 となるべきであり、となるようにとなるべきであり、第2の構成要素「Pred」はアンサンブル/スタッキング用の 検証/交差検証予測でなければならない。

あなたの関数はScore = cv$evaluation_log[,min(test_rmse_mean)]を返します。最大化するのではなく、この値を最小限にする必要があります。負の値を返すと、返された値が最大になったときにRMSEが最小化されます。 Score = -cv$evaluation_log[,min(test_rmse_mean)]

+0

私の結果は次のようになりますように: '経過= 35.21 \tラウンド= 3 \tイータ= 0.0119 \t max.depth = 8.0000 \t min_child_weight = 5.0000 \tサブサンプル= 0.8389 \t colsample_bytree = 0.6173 \t値= - 0.3168。 **バリュー**をどのように読むべきですか? – Kalenji

+0

戻り値はリストです。 '$ History'は最適化中に' Value'がどのように変更されたかを示し、 '$ Best_Value'はあなたの' Score'出力の最適化された値を表示します。 –

+0

'Value'は単にあなたの関数から' Score'として返された値です。あなたの場合、RMSE。 –