私は、現在、それを取り巻く非常に厳しい機密保持契約のために私のデータを共有することができないと言って質問します。まもなく私は盲目的なデータをすぐに共有する許可を得ることができます。XGBoost(CV)CVテストとトレーニングエラー
私はガイドhereに従っており、nroundsパラメータをチューニングしてステップ1で立ち往生していますが、Rで適切に訓練されたXGBoostを取得するのに苦労しています。私が十字架の検証から得ている結果は、私が彼らがどこに行くべきかということで私を去らせることを期待していることをしていないということです。
私のデータには、連続的な応答変数(下のリンクの画像の左上の枠内のヒストグラム)と16095個の予測変数が含まれています。すべてのプレディクタは同じスケールにあり、それらのヒストグラムはすべて下のリンクの画像の右上に表示されます。予測変数は全くゼロであり、すべての値の62.82%が0である。
別のセットのテストデータとして、さらに48の観測値がある。両方のデータセットは、応答変数に非常に類似した範囲を持っています。
は、これまでのところ私は、PLSモデルとランダムフォレスト(Rライブラリレンジャーを使用して)をフィットすることができました。これら2つのモデルをテストデータセットに適用すると、PLSから19.133、レンジャーから15.312のRMSEを予測して取得することができました。レンジャーの場合、連続したモデルの適合は、2000個の木とそれぞれの分割された760個の変数を使用して非常に安定していることが証明されています。
XGBoostに戻って、以下のコードを使用して、nroundsを除くすべてのパラメータを修正し、Rパッケージxgboostのxgb.cv関数を使用してトレーニングとテストのエラーを計算しました。
data.train<-read.csv("../Data/Data_Train.csv")
data.test<-read.csv("../Data/Data_Test.csv")
dtrain <- xgb.DMatrix(data = as.matrix(data.train[,-c(1)]),
label=data.train[,1])
# dtest <- xgb.DMatrix(data = as.matrix(data.test[,-c(1)]), label=data.test[,1]) # Not used here
## Step 1 - tune number of trees using CV function
eta = 0.1; gamma = 0; max_depth = 15;
min_child_weight = 1; subsample = 0.8; colsample_bytree = 0.8
nround=2000
cv <- xgb.cv(
params = list(
## General Parameters
booster = "gbtree", # Default
silent = 0, # Default
## Tree Booster Parameters
eta = eta,
gamma = gamma,
max_depth = max_depth,
min_child_weight = min_child_weight,
subsample = subsample,
colsample_bytree = colsample_bytree,
num_parallel_tree = 1, # Default
## Linear Booster Parameters
lambda = 1, # Default
lambda_bias = 0, # Default
alpha = 0, # Default
## Task Parameters
objective = "reg:linear", # Default
base_score = 0.5, # Default
# eval_metric = , # Evaluation metric, set based on objective
nthread = 60
),
data = dtrain,
nround = nround,
nfold = 5,
stratified = TRUE,
prediction = TRUE,
showsd = TRUE,
# early_stopping_rounds = 20,
# maximize = FALSE,
verbose = 1
)
library(ggplot)
plot.df<-data.frame(NRound=as.matrix(cv$evaluation_log)[,1], Train=as.matrix(cv$evaluation_log)[,2], Test=as.matrix(cv$evaluation_log)[,4])
library(reshape2)
plot.df<-melt(plot.df, measure.vars=2:3)
ggplot(data=plot.df, aes(x=NRound, y=value, colour=variable)) + geom_line() + ylab("Mean RMSE")
この機能は、私はそれが私が高原に訓練誤差が減少し、その後減少モデルoverfitsとして再び増加し始めるためのテストエラーを見て期待していたんです信じるものない場合。しかし、私が得ている出力は下のコード(そして上のリンクの下の図)のようになります。
##### xgb.cv 5-folds
iter train_rmse_mean train_rmse_std test_rmse_mean test_rmse_std
1 94.4494006 1.158343e+00 94.55660 4.811360
2 85.5397674 1.066793e+00 85.87072 4.993996
3 77.6640230 1.123486e+00 78.21395 4.966525
4 70.3846390 1.118935e+00 71.18708 4.759893
5 63.7045868 9.555162e-01 64.75839 4.668103
---
1996 0.0002458 8.158431e-06 18.63128 2.014352
1997 0.0002458 8.158431e-06 18.63128 2.014352
1998 0.0002458 8.158431e-06 18.63128 2.014352
1999 0.0002458 8.158431e-06 18.63128 2.014352
2000 0.0002458 8.158431e-06 18.63128 2.014352
私は愚かな何かをやってXGBoostは苦労させてることを信じるように傾いているどれだけうまくレンジャー作品考慮!チューニングするに
おかげ
、感謝役に立てば幸い
?makeResampleDesc
を試してみてください。私はパラメータの最適化のためにガウスプロセス(ライブラリrBayesianOptimization)を使用することを計画しましたが、続行するかどうかはわかりませんでした。私のテスト/訓練の誤りが、あるラウンドの後に通常の過パターンのパターンを示すようには見えなかったという事実は、より深刻なものが間違っていたと私に思った。 –