2016-09-16 187 views
5

是否可以在Xgboost中訓練具有多個連續輸出(多回歸)的模型? 訓練這樣一個模型的目標是什麼?在xgboost中多輸出迴歸

在此先感謝您的任何建議

+0

如果輸出超過一個值,則需要像RNN(GRU,LSTM等)的序列模型。 [Keras](https://keras.io/)可以幫助您快速建立這些模型的原型。 – uyaseen

+0

我知道RNN。我想知道這樣的事情在Xgboost中是否也有可能,因爲我已經知道提升樹木對我的問題空間表現很好。我還應該注意,我的輸出vecor大小可以固定。 – user1782011

+0

如果輸出之間的關係是已知的,你應該能夠利用它來實現一個目標函數。它已經完成了[線性關係的隨機森林](https://cran.r-project.org/web/packages/MultivariateRandomForest/MultivariateRandomForest.pdf)。 XGBoost作者認爲[這是可行的](https://github.com/dmlc/xgboost/issues/680)。 –

回答

2

我的建議是使用sklearn.multioutput.MultiOutputRegressor作爲xgb.XGBRegressor的包裝。 MultiOutputRegressor爲每個目標培訓一個迴歸者,只需要迴歸者實施fitpredict,這是xgboost恰好支持的。

# get some noised linear data 
X = np.random.random((1000, 10)) 
a = np.random.random((10, 3)) 
y = np.dot(X, a) + np.random.normal(0, 1e-3, (1000, 3)) 

# fitting 
multioutputregressor = MultiOutputRegressor(xgb.XGBRegressor(objective='reg:linear')).fit(X, y) 

# predicting 
print np.mean((multioutputregressor.predict(X) - y)**2, axis=0) # 0.004, 0.003, 0.005 

這可能是使用xgboost因爲你不會需要改變你的代碼的任何其他部分(如果原先使用sklearn API)倒退多維目標的最簡單的方法。

但是,這種方法不利用目標之間的任何可能的關係。但是你可以嘗試設計一個customized objective函數來實現這一點。