如何优化 XGBoost 性能精度?

数据挖掘 机器学习 xgboost
2021-09-18 10:56:38

我有数据集来预测客户辍学(是,否),具有 5 个数字特征和 2 个分类特征。我对数值数据应用了缩放器,并将分类特征转换为虚拟变量,创建了 29 个特征。我的数据集有 6552 行和 34 个特征。什么是调整 XGBClassifier 参数的推荐方法,因为我使用默认值创建模型,即 model=XGBClassifier()?我是否应该使用蛮力循环某些参数中的值,直到找到最佳预测值?在这种情况下,推荐什么?

2个回答

有三种主要技术可以调整任何 ML 模型的超参数,包括 XGBoost:

1)网格搜索:你让你的模型使用不同的超参数集运行,并在它们之间选择最好的一个。像 SKlearn 这样的包已经实现了例程。但同样在这种情况下,您必须预先选择网格搜索的节点,即例程必须尝试哪些值

2)随机搜索:类似于网格搜索,但你基本上只选择参数边界,并且例程随机尝试不同的超参数集。

有关方法 1 和 2 的更多信息在这里

3)贝叶斯优化算法;这是我喜欢的方式。基本上,该算法根据已经执行的试验结果猜测下一组要尝试的超参数。一个易于使用且功能强大的是SMAC

将 GridSearchCV 与 XGBoost 一起使用时,请确保您拥有最新版本的 XGBoost 和 SKLearn,并特别注意 njobs!=1说明

import xgboost as xgb
from sklearn.grid_search import GridSearchCV

xgb_model = xgb.XGBClassifier()
optimization_dict = {'max_depth': [2,4,6],
                     'n_estimators': [50,100,200]}

model = GridSearchCV(xgb_model, optimization_dict, 
                     scoring='accuracy', verbose=1)

model.fit(X,y)
print(model.best_score_)
print(model.best_params_)

XGBoost 的忠告,小心过度拟合。在您的特定情况下,我建议使用 Catboost ,因为它针对分类进行了优化。