【发布时间】:2022-11-04 16:55:37
【问题描述】:
我最近一直在尝试为 xgboost 回归实现默认的 reg:squarederror 损失函数,以便我以后可以在此函数的基础上将其更改为非对称函数。但是,与默认实现相比,我的自定义版本无法获得相同的结果。
这是我一直在尝试的代码:
import xgboost as xgb
import numpy as np
import pandas as pd
a = np.array([1,2,3,4,5,6])
b = np.array([2,3,4,5,6,7])
a = pd.DataFrame(data=a)
b = pd.DataFrame(data=b)
model = xgb.XGBRegressor(random_state=0, objective='reg:squarederror')
model.fit(a, b)
print(model.predict(a))
def squared_error(predt: np.ndarray, dtrain: xgb.DMatrix):
y = dtrain.get_label()
grad = predt - y
hess = np.ones(predt.shape)
return grad, hess
dtrain = xgb.DMatrix(a.values, label=b.values)
dtest = xgb.DMatrix(a.values)
model2 = xgb.train({'seed': 0}, dtrain=dtrain, obj=squared_error)
print(model2.predict(dtest))
问题是这两个模型没有给出相同的结果。 任何想法我的代码有什么问题?
我也对 reg:squaredlogerror 和给定的示例 (https://xgboost.readthedocs.io/en/stable/tutorials/custom_metric_obj.html) 进行了相同的尝试,这对两个模型都给出了相同的结果。这让我相信我的代码有问题。
我将不胜感激找到我的错误的任何帮助。
-蒂莫
【问题讨论】:
标签: python machine-learning regression data-science xgboost