2017-03-14 3 views
0

ウェブ上で見る私はまだリニアブースターgblinearが正確に何であるかについて混乱しており、私はaloneではない。xgboost:どのパラメータがリニアブースターで使用されていますか?

lambda、λ_biasalphaの3つのパラメータがあります。「追加パラメータ」と言うべきでしょうか。

私がこれを正しく理解すれば、リニアブースターは線形ブースティング(正規化)を行います。 この文脈では、上記の3つのパラメータとeta(昇圧率)の意味しか理解できません。 それはまた、githubに記載されている方法です。

しかし、ツリーのパラメータgammamax_depthおよびmin_child_weightもアルゴリズムに影響します。

これはどのようにすることができますか?リニアブースターについては、Web上のどこにでも明確に記述されていますか?

私の例を参照してください:

library(xgboost) 

data(agaricus.train, package='xgboost') 
data(agaricus.test, package='xgboost') 
train <- agaricus.train 
test <- agaricus.test 

次にセットアップ

set.seed(100) 
model <- xgboost(data = train$data, label = train$label, nrounds = 5, 
       objective = "binary:logistic", 
       params = list(booster = "gblinear", eta = 0.5, lambda = 1, lambda_bias = 1,gamma = 2, 
           early_stopping_rounds = 3)) 

gamma=1

set.seed(100) 
model <- xgboost(data = train$data, label = train$label, nrounds = 5, 
       objective = "binary:logistic", 
       params = list(booster = "gblinear", eta = 0.5, lambda = 1, lambda_bias = 1,gamma = 1, 
           early_stopping_rounds = 3)) 
ながら

> [1] train-error:0.018271 [2] train-error:0.003071 
> [3] train-error:0.001075 [4] train-error:0.001075 
> [5] train-error:0.000614 

を与えます

は別の "パス" である

> [1] train-error:0.013051 [2] train-error:0.001842 
> [3] train-error:0.001075 [4] train-error:0.001075 
> [5] train-error:0.001075 

につながります。 max_depthための同様

set.seed(100) 
model <- xgboost(data = train$data, label = train$label, nrounds = 5, 
       objective = "binary:logistic", 
       params = list(booster = "gblinear", eta = 0.5, lambda = 1, lambda_bias = 1, max_depth = 3, 
           early_stopping_rounds = 3)) 

> [1] train-error:0.016122 [2] train-error:0.002764 
> [3] train-error:0.001075 [4] train-error:0.001075 
> [5] train-error:0.000768 

set.seed(100) 
model <- xgboost(data = train$data, label = train$label, nrounds = 10, 
       objective = "binary:logistic", 
       params = list(booster = "gblinear", eta = 0.5, lambda = 1, lambda_bias = 1, max_depth = 4, 
           early_stopping_rounds = 3)) 

> [1] train-error:0.014740 [2] train-error:0.004453 
> [3] train-error:0.001228 [4] train-error:0.000921 
> [5] train-error:0.000614 

答えて

1

私も、gblinearを実行している間にいくつかのスクワットを行う結果は、ほぼすべての時間を変更観察し、スクワットをやってすることは持っていることを請求することができますアルゴリズムへの影響:

gblinearが現在使用しているアルゴリズムはすべて、あなたの「むしろ標準的な線形ブースティング」ではありません。確率論を担当するのは、各反復中に勾配を更新しながら、ロックフリーの並列化( 'hogwild')を使用することです。シードを設定しても何も影響しません。シングルスレッド(nthread=1)を実行している間は、一貫して再現性のある結果しか得られません。また、多くのシステムでスレッド輻輳のために非常に遅いスピードになるように、可能な限り多くのOpenMPスレッドを使用するデフォルトのnthread設定で実行することをお勧めします。 nthreadは、物理コアの数以下である必要があります。

このフリー確率は、状況によっては予測パフォーマンスを向上させる可能性があります。しかし、プロは頻繁に短所を上回らない。ある時点で、私は決定論的な並列化のオプション付きのプルリクエストと、各ブースティングラウンドでの機能選択に対するいくつかの追加コントロールのオプションを提出する予定です。

ブースタートレーニングに固有の利用可能なすべてのパラメーターについては、gblinearの場合はstruct GBLinearTrainParamのソースを、gbtreeの場合はstruct TrainParamのソースを参照してください。

+0

申し訳ありませんが、私はスレッドロジックについて知りませんでした。 – Richard

関連する問題