Python 如果超参数调整的影响最小,如何改进XGBoost模型?
我正在使用XGBoost建立一个回归模型,试图预测客户在一年中的花费。我有约6000个样本(客户),约200个与这些客户相关的功能,以及他们一年内花费的金额(我的结果变量)。我已将数据分成75%/25%的训练/测试部分,并运行了一些XGBoost模型,取得了不同程度的成功 我的初始模型中似乎存在一些过度拟合,没有调整(默认参数),其R2值如下: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
•培训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回归,尝试使用更简单的回归方法,如线性、套索、岭、弹性网等,看看是否可以得到更好的结果 结果非常低,但这不是超参数调整的问题。 我的建议如下: