2016-09-16 21 views
5

Xgboostで複数の連続出力(マルチ回帰)を持つモデルを訓練することは可能ですか? このようなモデルを訓練する目的は何でしょうか?任意の提案xgboostのmuti出力回帰

+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

私の提案を事前に

おかげでxgb.XGBRegressorのラッパーとしてsklearn.multioutput.MultiOutputRegressorを使用することです。 MultiOutputRegressorは、目標ごとに1つの退行者を訓練し、退役軍人はfitpredictを実装する必要があります。

# 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 

これはおそらく、あなたは(あなたが最初sklearn APIを使用していた場合)あなたのコードの他の部分を変更する必要はありませんようxgboost使用したマルチ次元目標を退行する最も簡単な方法です。

ただし、この方法ではターゲット間の可能な関係は活用されません。しかし、それを達成するためにcustomized objective関数を設計しようとすることができます。

関連する問題