如何在回归问题中使用具有 MultiOutputRegressor 的目标函数
Posted
技术标签:
【中文标题】如何在回归问题中使用具有 MultiOutputRegressor 的目标函数【英文标题】:How to use objective function with MultiOutputRegressor in regression problem 【发布时间】:2020-01-04 10:54:11 【问题描述】:我正在研究一个时间序列回归问题,预测未来 5 天的股价,我认为这是多个连续输出(多元回归)。
因此,我在 sklearn 中使用 MultiOutputRegressor
来做我想做的事。
但未来前三天的预测值比未来的第四天和第五天更重要。
因此,我想用权重来惩罚前三天,有人知道如何用客户目标函数解决这个问题吗?或者有其他方法来解决这个问题
数据和代码如下
"date": "0": "2003-06-30", "1": "2003-07-01", "2": "2003-07-02", "3": "2003-07-03", "4": "2003-07-04", "5": "2003-07-07", "6": "2003-07-08", "7": "2003-07-09", "8": "2003-07-10", "9": "2003-07-11", "open": "0": 37.1, "1": 37.09, "2": 38.17, "3": 40.6, "4": 39.1, "5": 39.6, "6": 42.0, "7": 41.3, "8": 41.2, "9": 39.6, "max": "0": 37.4, "1": 38.1, "2": 38.82, "3": 40.6, "4": 39.26, "5": 41.0, "6": 42.0, "7": 41.3, "8": 41.2, "9": 39.97, "min": "0": 36.92, "1": 37.09, "2": 38.1, "3": 38.81, "4": 38.75, "5": 39.6, "6": 40.7, "7": 40.81, "8": 40.05, "9": 39.3, "close": "0": 37.08, "1": 38.05, "2": 38.69, "3": 39.0, "4": 39.26, "5": 41.0, "6": 41.19, "7": 41.22, "8": 40.05, "9": 39.91, "stock_id": "0": 50, "1": 50, "2": 50, "3": 50, "4": 50, "5": 50, "6": 50, "7": 50, "8": 50, "9": 50, "target_next_1_day": "0": 38.05, "1": 38.69, "2": 39.0, "3": 39.26, "4": 41.0, "5": 41.19, "6": 41.22, "7": 40.05, "8": 39.91, "9": 40.66, "target_next_2_day": "0": 38.69, "1": 39.0, "2": 39.26, "3": 41.0, "4": 41.19, "5": 41.22, "6": 40.05, "7": 39.91, "8": 40.66, "9": 40.19, "target_next_3_day": "0": 39.0, "1": 39.26, "2": 41.0, "3": 41.19, "4": 41.22, "5": 40.05, "6": 39.91, "7": 40.66, "8": 40.19, "9": 40.85, "target_next_4_day": "0": 39.26, "1": 41.0, "2": 41.19, "3": 41.22, "4": 40.05, "5": 39.91, "6": 40.66, "7": 40.19, "8": 40.85, "9": 39.8, "target_next_5_day": "0": 41.0, "1": 41.19, "2": 41.22, "3": 40.05, "4": 39.91, "5": 40.66, "6": 40.19, "7": 40.85, "8": 39.8, "9": 39.92
data = pd.DataFrame(data)
X = data[['open', 'max', 'min', 'close']]
Y = data[['target_next_1_day', 'target_next_2_day', 'target_next_3_day', 'target_next_4_day', 'target_next_5_day']]
def customer_obj(target, predict):
gradient = ????
hess = ????
return gradient, hess
clfpre = xgb.XGBRegressor(n_estimators=5, objective =customer_obj)
clf = MultiOutputRegressor(clfpre).fit(X.values, Y.values)
【问题讨论】:
【参考方案1】:MultiOutputRegressor
只是为每个目标变量建立独立的模型。因此,创建自定义目标函数对MultiOutputRegressor
没有用处。
您的customer_obj
只能说明单个目标变量。例如,您可以将默认目标 reg:squarederror
更改为 平均绝对误差。
来自Documentation:
多目标回归
此策略包括为每个目标拟合一个回归器。这是一个 扩展本身不支持的回归器的简单策略 多目标回归。
【讨论】:
以上是关于如何在回归问题中使用具有 MultiOutputRegressor 的目标函数的主要内容,如果未能解决你的问题,请参考以下文章
在 scikit learn 中训练具有不同特征维度的逻辑回归模型
如何使用 python 运行具有分类特征的 Spark 逻辑回归?
如何使用 tensorflow 或 keras 重新训练具有新子集的线性回归模型?