xgboost 中的多输出回归
Posted
技术标签:
【中文标题】xgboost 中的多输出回归【英文标题】:muti output regression in xgboost 【发布时间】:2017-01-25 04:37:15 【问题描述】:是否可以在 Xgboost 中训练具有多个连续输出(多元回归)的模型? 训练这样一个模型的目标是什么?
提前感谢您的任何建议
【问题讨论】:
如果输出多于一个值,那么就需要RNN(GRU、LSTM等)这样的序列模型。 Keras 可以帮助您快速制作此类模型的原型。 我知道 RNN。我想知道在 Xgboost 中是否也可以这样做,因为我已经知道提升树在我的问题空间中表现良好。我还应该注意,我的输出向量大小可以固定。 如果输出之间的关系是已知的,您应该能够利用它实现一个目标函数。它已经为random forest with linear relation 完成。而XGBoost作者认为it is doable。 @uyaseen 这不是真的,只有当输出数量可变时(甚至不一定是真的)。您可以有多个输出并计算它们的总损失 【参考方案1】:我的建议是使用sklearn.multioutput.MultiOutputRegressor 作为xgb.XGBRegressor
的包装器。 MultiOutputRegressor
为每个目标训练一个回归器,并且只需要回归器实现 fit
和 predict
,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 函数来实现这一点。
【讨论】:
如果一些 x 有 1 个目标和一些 50 怎么办? @Eran '大约 50' 是什么意思? 我的意思是每个样本的输出数量不固定。 你能举个例子吗?回归问题应该具有固定的输入和输出形状。否则这不是一个单一的问题,应该分开处理。 这不是一个有两个输出的模型;它是两个模型的包装器。【参考方案2】:您可以在 Scikit-learn 中使用线性回归、随机森林回归和其他一些相关算法来生成多输出回归。不确定 XGboost。 Scikit 中的增强回归器不允许多个输出。对于提出问题的人来说,一个例子是预测一个头部的时间序列的多步。
【讨论】:
【参考方案3】:它会生成警告: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]
【讨论】:
以上是关于xgboost 中的多输出回归的主要内容,如果未能解决你的问题,请参考以下文章
R语言构建xgboost模型:使用xgboost构建泊松回归(poisson regression)模型
R语言使用xgboost构建回归模型:vtreat包为xgboost回归模型进行数据预处理(缺失值填充缺失值标识离散变量独热onehot编码)构建出生体重的xgboost模型回归模型