web-dev-qa-db-ja.com

xgboostのマルチ出力回帰

Xgboostで複数の連続出力(多重回帰)を持つモデルをトレーニングすることは可能ですか?そのようなモデルをトレーニングする目的は何でしょうか?

提案を事前にありがとう

16
user1782011

私の提案は、xgb.XGBRegressorのラッパーとして sklearn.multioutput.MultiOutputRegressor を使用することです。 MultiOutputRegressorは、ターゲットごとに1つのリグレッサをトレーニングし、リグレッサが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 AP​​Iを使用していた場合)。

ただし、このメソッドはターゲット間の可能な関係を利用しません。しかし、それを達成するために カスタマイズされた目的 関数を設計することを試みることができます。

28
ComeOnGetMe