2016-07-24 17 views
1

Ich bin mit XGBoost XGBRegressor mit Python und Datenmenge, die wie folgt aussieht:XGboost - Erhöhung der Trainingsfehler "mae"

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

Umsatz ist abhängig vari fähig und der Rest der Variablen sind Features.

Wenn ich XGBRegressor laufen und setze eval_metric als „mae“ (mittleren absoluten Fehler) die Ausbildung und Validierungsfehler werden immer höher. Wie kann der Trainingsfehler zunehmen? Gibt es einen Fall (irgendeine Kombination von Modellparametern oder seltsamen Datenpunkten), der dazu führen könnte, dass sich der xgboost-Trainingsfehler erhöht?

Dies ist der Code:

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') 

Wenn eval_metric wird als "rmse" Trainingsfehler wie erwartet abnimmt.

Antwort

3

Sie müssen unterscheiden zwischen objective und dem Fehler in den Auswertungssätzen (berechnet durch eval_metric). Diese beiden können unterschiedlich sein - und das ist der Grund für den zunehmenden Fehler in Ihrem Bewertungsset.

XGBoost in Ihrer Einstellung versucht, den quadratischen Fehler (RMSE) zu minimieren, weil Sie objective="reg:linear" als Argument verwenden (Standardargument von XGBRegressor). Tatsächlich unterstützt XGBoost nicht einmal den mittleren absoluten Fehler (MAE) als objective Funktion. Werfen Sie einen Blick auf die XGBoost objective parameter für Details. Ein Grund, warum MAE als Ziel nicht implementiert wird, könnte sein, dass XGBoost Nicht-Null-Ableitung zweiter Ordnung in dem Algorithmus benötigt (was bei MAE nicht der Fall ist).

XGRegressors train -Funktion (siehe here) können Sie Ihre eigenen objective durch die Definition der Fehlerfunktion und die Funktion für die Gradienten und calulating Hessian (erste und zweite Ableitung) definieren. Sehen Sie sich this example für Details an.

Ich versuchte, MAE selbst zu implementieren, indem ich den Hessian auf einen konstanten aber kleinen Wert setzte. Leider konvergierte es sehr langsam. Es kann immer noch mit Ihren Daten arbeiten.