python - 如果超参数调整的影响很小,我该如何改进我的 XGBoost 模型?

标签 python performance xgboost hyperparameters

我正在使用 XGBoost 开发一个回归模型,试图预测客户在一年内花费的美元。我有大约 6,000 个样本(客户),大约 200 个与这些客户相关的特征,以及他们一年内花费的金额(我的结果变量)。我已将我的数据分成 75%/25% 的训练/测试拆分,并运行了一些 XGBoost 模型并取得了不同程度的成功……

在我没有调整(默认参数)的初始模型中似乎有些过拟合,它具有以下 R2 值:
• 训练 R2 – 0.593
• 测试 R2 – 0.098

然后我对以下超参数进行了网格搜索,但并未显着改进模型。

param_grid = {'learning_rate' : [0.05, 0.10, 0.20],  
          'min_child_weight': [1, 5, 10],  
          'gamma': [0.5, 1, 5],  
          'subsample': [0.6, 0.8, 1.0],  
          'colsample_bytree': [0.6, 0.8, 1.0],  
           'max_depth': [3, 4, 5]  
         }  
grid = GridSearchCV(xgb.XGBRegressor(silent=True)
                   ,param_grid
                   ,n_jobs=1
                   ,cv=3
                   ,scoring='r2'
                   ,verbose=1
                   ,refit=True)

• 训练 R2 – 0.418
• 测试 R2 – 0.093

我还手动调整了超参数并能够获得以下结果,但仅此而已。
• 训练 R2 – 0.573
• 测试 R2 – 0.148

这 6,000 名客户代表了当年的所有客户,因此我无法引入额外的样本来增加样本量。

我的问题:是否有关于调整其他超参数的建议或我应该尝试使模型在训练/测试拆分中更加一致并减少过度拟合的策略?我的结果变量(花费的美元)可能存在太多差异,无法创建一致的模型,但我想尝试用尽所有选项。

最佳答案

机器学习有一个简单的规则。 如果您的数据有一些信号,您可以让您的模型产生奇迹,如果没有信号,它就根本没有信号

但是,我仍然愿意回答您的问题,如果有迹象表明您肯定可以提高 R 平方值。

首先,尝试减少特征。 200 是 4500 行数据的很多功能。尝试使用不同数量的特征,例如 20、50、80、100 等,最多 100 个。或者您可以使用 sklearn 的 SelectKBest 之类的东西,或计算特征的效果大小来选择最佳的 K 个特征。

其次,问题可能出在您的测试数据中。 与训练数据相比,测试数据可能代表完全不同的数据子集。您应该尝试进行交叉验证,以便您报告的 R 平方值足够自信,因为它已经看到了各种数据子集。

第三,不要使用 XGBoost 回归,尝试使用更简单的回归方法,如线性、套索、岭、弹性网络等,看看是否能得到更好的结果。

关于python - 如果超参数调整的影响很小,我该如何改进我的 XGBoost 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60730157/

相关文章:

python - "Optimizing Queries"视频(Udacity Web 开发类(class)),缓存数据库查询

.net - 立即执行 LINQ 查询的最便宜的方法是什么

xgboost 与 H2o 梯度提升

python - XGBoost 和并行交叉验证

python - 如何在Python深处递归两个目录,只需要目录名?

python - XMLGenerator python sax 库 : write out inline/closed tag

performance - Postgresql - 如何加快更新大表(1 亿行)的速度?

java - 单个枚举中的多个值

python - ValueError : Target is multiclass but average ='binary' . 请选择另一个平均设置,[无, 'micro', 'macro', 'weighted']之一

python - python的sorted()函数是否保证稳定?