我正在尝试使用XGBoost执行回归。我的数据集具有所有正值,但有些预测为负值。
我在此链接上读到,减少树木的数量可能对这种情况有所帮助。
我把估计量从700减少到570,负面预测的数量减少了,但有没有办法消除这些负面预测呢?当我进一步尝试将估计量减少到400时,我得到了更高的rmse和更多的负面预测结果。
我查看了负面预测,以了解模型出错的地方(见下图):

看起来,如果我取负预测的绝对值,那就足够了,但这是正确的方法吗?
我的代码是:
!pip install xgboost
!pip install scikit-optimize
from xgboost import XGBRegressor
final_XGB=XGBRegressor(random_state=123,gamma= 24.47 ,learning_rate=0.1235,max_depth=10,min_child_weight=0.21509999999999999,
n_estimators=570,subsample=0.74,reg_lambda=0.8)
from sklearn.model_selection import cross_validate
cross_val_scores=cross_validate(final_XGB,X_train,y_train,cv=3,scoring=['neg_mean_squared_error','r2'],verbose=1,return_train_score=True,n_jobs=-1 )
cross_val_scores['test_r2'].mean() #returns 0.9595609470775659更多关于数据集的内容。我正试图预测在某一特定时间内会出现在某个地点的人数。
为了预测人数,我采取了
位置名称是字符串值(例如: Location1、Location2等)所以我用JamesSteinEncoder对它们进行了转换。
这里没有缺少的值,我已经从数据集中删除了一些异常值。
关于“实际”和“错误”列之间的关系,我绘制了以下图表:

最后结果快照:

发布于 2020-11-11 19:19:55
(从评论升级到答复)
因为您的目标是一个计数变量,所以最好将其建模为Poisson回归。xgboost通过objective='count:poisson'实现了这一点。
@Cryo建议使用对数变换也是值得一试的,但您不应该直接跳过零的转换:而是使用\log(1+Y)或类似的东西。请注意,当日志转换时,您的错误优化将本质上是乘性的:对于真值10,预测100或1具有相同的“错误性”。
发布于 2020-10-11 15:49:48
梯度助推机可以返回超出训练范围的值。看看这篇文章被提升的树能预测到训练标签的最小值吗?
在实践中,这种情况不大可能发生,但对于您的数据来说可能是这样的。
如果正在发生这种情况,可能意味着您的培训数据和您正在评估的数据是不同的。
https://datascience.stackexchange.com/questions/82851
复制相似问题