xgboost 的多输出回归

问题描述 投票:0回答:6

是否可以通过 训练具有多个连续输出(多重回归)的模型? 训练这样一个模型的目标是什么?

提前感谢您的任何建议

machine-learning random-forest xgboost
6个回答
64
投票

我的建议是使用 sklearn.multioutput.MultiOutputRegressor 作为

xgb.XGBRegressor
的包装器。
MultiOutputRegressor
为每个目标训练一个回归器,只需要回归器实现
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

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

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


9
投票

多输出回归现在在 XGBoost 的夜间构建中可用,并将包含在 XGBoost 1.6.0.

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


5
投票

它生成警告:

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))

出局:

[2.00592697e-05 1.50084441e-05 2.01412247e-05]

3
投票

我会发表评论,但我缺乏声誉。除了@Jesse Anderson,要安装最新版本,请从此处选择顶部链接: https://s3-us-west-2.amazonaws.com/xgboost-nightly-builds/list.html?prefix=master/

确保为您的操作系统选择一个。

使用 pip install 安装轮子。 IE。对于 macOS:

pip install https://s3-us-west-2.amazonaws.com/xgboost-nightly-builds/master/xgboost-1.6.0.dev0%2B4d81c741e91c7660648f02d77b61ede33cef8c8d-py3-none-macosx_10_15_x86_64.macosx_11_0_x86_64.macosx_12_0_x86_64.whl


0
投票

您可以使用 Scikit-learn 中的线性回归、随机森林回归和其他一些相关算法来产生多输出回归。不确定 XGboost。 Scikit 中的增强回归器不允许多个输出。对于提出问题的人,当可能有必要时,一个例子是预测时间序列的多步。


0
投票

基于上述讨论,我将单变量 XGBoostLSS 扩展到称为 多目标 XGBoostLSS 回归 的多变量框架,该框架在概率回归设置中对多个目标及其依赖项进行建模。代码很快就会出现。

© www.soinside.com 2019 - 2024. All rights reserved.