2016-07-24 10 views
1

私はこのようになりますPythonとセットでXGBoost XGBRegressorを実行している:XGboost - 増加訓練誤差 "メイ"

click_id | manufacturer | category | delivery_time | price | revenue
1 |10 | 100 | 24 | 100 | 0
2 |10 | 100 | 24 | 100 | 0
3 |10 | 100 | 24 | 100 | 0
4 |10 | 100 | 24 | 100 | 120
5 |20 | 200 | 48 | 200 | 0

収益は、残りの変数はフィーチャです。私はXGBRegressorを実行し、「メイ」(絶対平均誤差)としてeval_metricを設定すると

トレーニングおよびバリデーションエラーが絶えず増加しています。どのようにして訓練のエラーが増えますxgboostトレーニングのエラーを増加させる原因となるケース(モデルパラメータや奇妙なデータポイントの組み合わせ)はありますか?

model = XGBRegressor(
    learning_rate=0.1, 
    n_estimators=200, 
    max_depth=5, 
    min_child_weight=1, 
    gamma=0, 
    subsample=0.9, 
    colsample_bytree=0.9, 
    reg_alpha=10, 
    nthread=4) 

model.fit(X_train, y_train, 
      eval_set=[(X_train, y_train), (X_test, y_test)], eval_metric='mae') 

eval_metricが期待される "RMSE" 訓練誤差が減少するように設定されている:

これはコードです。

答えて

3

objectiveの最小化と評価セットのエラー(eval_metricで計算されます)を区別する必要があります。これらの2つは異なる可能性があります。これが評価セットのエラーの増加要因です。

XGBoostは、objective="reg:linear"を引数として使用するため(デフォルトの引数XGBRegressor)、二乗平均平方根誤差(RMSE)を最小化しようとしています。実際には、XGBoostは平均絶対誤差(MAE)をサポートしていません(objective)。詳細はXGBoost objective parameterをご覧ください。 MAEが目的として実装されていない理由は、XGBoostがアルゴリズムで非ゼロの2階微分を必要とすることである(MAEではそうではない)。 XGRegressors train -functionを使用して

hereを参照)を使用すると、エラー関数と勾配とヘッセ行列をcalulatingする機能(第1、第2次微分)を定義することにより、objective独自に定義することができます。詳細はthis exampleをご覧ください。

ヘッセ行列を一定で小さい値に設定して、MAEを自分で実装しようとしました。残念ながら、それは非常にゆっくり収束しました。それでもあなたのデータではうまくいくかもしれません。

関連する問題