2016-07-24 158 views
1

我跑XGBoost XGBRegressor Python和數據集,看起來像這樣: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計算)。這兩者可能不同 - 這就是您的評估集中錯誤增加的原因。

由於使用objective="reg:linear"作爲參數(缺省參數爲XGBRegressor),因此XGBoost在您的設置中試圖最小化均方根誤差(RMSE)。實際上,XGBoost甚至不支持平均絕對誤差(MAE)作爲objective函數。有關詳細信息,請參閱XGBoost objective parameter。 MAE作爲目標的原因未實現的原因可能是XGBoost在算法中需要非零二階導數(MAE不是這種情況)。

使用XGRegressors train - 功能(見here),您可以通過定義誤差函數和calulating梯度和海賽(第一和第二階導數)的函數定義自己的objective。詳情請看this example

我試圖通過設置hessian爲一個常數但是很小的值來實現MAE。不幸的是,它收斂得很慢。它仍然可以與你的數據一起工作。