5
Xgboostで複数の連続出力(マルチ回帰)を持つモデルを訓練することは可能ですか? このようなモデルを訓練する目的は何でしょうか?任意の提案xgboostのmuti出力回帰
Xgboostで複数の連続出力(マルチ回帰)を持つモデルを訓練することは可能ですか? このようなモデルを訓練する目的は何でしょうか?任意の提案xgboostのmuti出力回帰
私の提案を事前に
おかげでxgb.XGBRegressor
のラッパーとしてsklearn.multioutput.MultiOutputRegressorを使用することです。 MultiOutputRegressor
は、目標ごとに1つの退行者を訓練し、退役軍人はfit
とpredict
を実装する必要があります。
# 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関数を設計しようとすることができます。
出力が複数の値である場合は、RNN(GRU、LSTMなど)のようなシーケンスモデルが必要です。 [Keras](https://keras.io/)は、そのようなモデルのプロトタイプをすばやく手助けすることができます。 – uyaseen
私はRNNを知っています。そのようなことがXgboostでも可能であるかどうか疑問に思っていました。なぜなら、私の問題空間では、ブースティングツリーがうまくいくことが分かっているからです。また、私の出力vecorのサイズを固定することができることに注意する必要があります。 – user1782011
出力間の関係がわかっているなら、それを利用して目的関数を実装できるはずです。これは[線形関係のあるランダムな森林](https://cran.r-project.org/web/packages/MultivariateRandomForest/MultivariateRandomForest.pdf)で行われています。そして、XGBoostの作者は[それができる]と考えています(https://github.com/dmlc/xgboost/issues/680)。 –