xgboost中的多输出回归

use*_*011 11 machine-learning random-forest xgboost

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

在此先感谢您的任何建议

Com*_*tMe 19

我的建议是使用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
Run Code Online (Sandbox Code Playgroud)

这可能是使用xgboost回归多维目标的最简单方法,因为您不需要更改代码的任何其他部分(如果您最初使用的是sklearnAPI).

但是,此方法不利用目标之间的任何可能关系.但是你可以尝试设计一个自定义的目标函数来实现这一目标.

  • 这不是一个有两个输出的模型;它是两个模型的包装。 (6认同)
  • 你能给我一个例子吗?回归问题应该具有固定形状的输入和输出。否则就不是一个单一的问题,应该分开处理。 (3认同)

bli*_*sse 11

多输出回归现已在 XGBoost 的夜间版本中提供,并将包含在 XGBoost 1.6.0 中。

有关示例,请参阅https://github.com/dmlc/xgboost/blob/master/demo/guide-python/multioutput_regression.py 。

  • 显然,这个库实现仍然为每个输出构建单独的模型,而不是共享模型:https://github.com/dmlc/xgboost/blob/master/doc/tutorials/multioutput.rst (4认同)

ahb*_*bon 6

它会生成警告:

reg:linear is now deprecated in favor of reg:squarederror

,所以我根据@ComeOnGetMe 更新了答案

import numpy as np 
import pandas as pd 
import xgboost as xgb
from sklearn.multioutput import MultiOutputRegressor

# 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:squarederror')).fit(X, y)

# predicting
print(np.mean((multioutputregressor.predict(X) - y)**2, axis=0))
Run Code Online (Sandbox Code Playgroud)

出去:

[2.00592697e-05 1.50084441e-05 2.01412247e-05]
Run Code Online (Sandbox Code Playgroud)