2017-03-28 77 views
2

我使用scikit-learn構建了一個XGBoost模型,我對此非常滿意。作爲微調,以避免過度配合,我想確保一些功能的單調性,但在那裏我開始面臨一些困難...如何使用ScikitLearn在XGBoost中實施單調約束?

據我瞭解,在scikit-learn中沒有關於xgboost的文檔(其中I承認我真的很驚訝 - 知道這種情況持續數月)。我發現的唯一文檔是直接在http://xgboost.readthedocs.io

在這個網站上,我發現單調性可以使用「monotone_constraints」選項強制執行。 我試着在Scikit,瞭解如何使用它,但我得到一個錯誤信息「類型錯誤:初始化()得到了一個意想不到的關鍵字參數‘monotone_constraints’」

你知道一個辦法做到這一點?

這裏是(使用Spyder的)我在Python寫的代碼:

grid = {'learning_rate' : 0.01, 'subsample' : 0.5, 'colsample_bytree' : 0.5, 
    'max_depth' : 6, 'min_child_weight' : 10, 'gamma' : 1, 
    'monotone_constraints' : monotonic_indexes} 
#'monotone_constraints' ~ = "(1,-1)" 
m07_xgm06 = xgb.XGBClassifier(n_estimators=2000, **grid) 
m07_xgm06.fit(X_train_v01_oe, Label_train, early_stopping_rounds=10, eval_metric="logloss", 
    eval_set=[(X_test1_v01_oe, Label_test1)]) 

回答

0

XGBoost目前Scikit-瞭解API(0.6a2)不支持monotone_constraints。您可以改用Python API。看看example

此代碼的例子可以去除:

params_constr['updater'] = "grow_monotone_colmaker,prune" 
+0

但似乎單調約束現在不起作用。我問了這個問題[這裏](https://github.com/dmlc/xgboost/issues/1514#issuecomment-307567705)。 @chapelon是否適合你? –

0

你如何指望單調限制爲一般的分類問題,其中響應可能有2個以上級別的工作?我見過的與這個功能有關的所有例子都是針對迴歸問題的。如果您的分類響應只有2個級別,請嘗試切換到指標變量的迴歸,然後選擇合適的分數閾值進行分類。

如果您使用XGBregressor而不是XGBclassifier並通過kwargs設置monotone_constraints,此功能看起來可以像最新的xgboost/scikit-learn一樣工作。

的語法是這樣的:

params = { 
    'monotone_constraints':'(-1,0,1)' 
} 

normalised_weighted_poisson_model = XGBRegressor(**params) 

在這個例子中,有在訓練數據上塔1的負約束,在第2列沒有限制,並且在第3列的正約束它是你可以跟蹤哪一個是 - 你不能通過名稱來引用列,只能通過位置引用,而且你必須在約束元組中爲你的訓練數據中的每一列指定一個條目。

相關問題