Python 如果超参数调整的影响最小,如何改进XGBoost模型?

Python 如果超参数调整的影响最小,如何改进XGBoost模型?,python,performance,xgboost,hyperparameters,Python,Performance,Xgboost,Hyperparameters,我正在使用XGBoost建立一个回归模型,试图预测客户在一年中的花费。我有约6000个样本(客户),约200个与这些客户相关的功能,以及他们一年内花费的金额(我的结果变量)。我已将数据分成75%/25%的训练/测试部分,并运行了一些XGBoost模型,取得了不同程度的成功 我的初始模型中似乎存在一些过度拟合,没有调整(默认参数),其R2值如下: •培训R2–0.593 •测试R2–0.098 然后,我对以下超参数进行了网格搜索,这并没有显著改善模型 param_grid = {'learning

我正在使用XGBoost建立一个回归模型,试图预测客户在一年中的花费。我有约6000个样本(客户),约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

我还手动调整了hyperparameters并获得了以下结果,但仅此而已。
•培训R2–0.573
•测试R2–0.148

这6000名客户代表了本年度的所有客户,因此我无法引入额外的样本来提高样本量


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

机器学习有一个简单的规则你可以让你的模型想一想,如果你的数据有信号,如果它没有信号,它就是没有信号

但是,我仍然愿意回答你的问题,如果有一些信号,你肯定可以提高你的R平方值

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

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


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

结果非常低,但这不是超参数调整的问题。 我的建议如下:

  • 分析功能和花费的金钱之间的相关性。为了做出决定,您可以计算特征重要性、构建相关矩阵等。有时,我会根据自己的假设手动更改特征列表,并查看它对分数的影响。确保您了解每个功能的影响。应该删除无用的功能
  • 低R^2通常是未清理数据的结果。检查轮廓。尽量不要总是用0替换NAN,有时最好删除原始的。如果您从第三方获取数据,也可能会出现一些错误
  • 详细查看测试数据集的预测。逐一了解模型失败的原因。。。通常,这有助于找到问题的根源
  • 根据我的经验,超参数调整可以获得高达3%的精度。但这对你的模型没有帮助