xgboost中的多输出回归

时间:2016-09-16 21:10:35

标签: machine-learning random-forest xgboost

是否可以在Xgboost中训练具有多个连续输出的模型(多元回归)? 培养这样一个模型的目标是什么?

提前感谢任何建议

1 个答案:

答案 0 :(得分:13)

我的建议是使用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函数来实现这一目标。