我正在研究不平衡 (9:1) 二元分类问题,并希望使用 Xgboost 和 RandomizedSearchCV。
如代码所示,超参数的组合有 472,50,000 (5*7*5*5*5*5*6*4*9*10) 种。如果 CV 为 10 倍,则上述数字变为 472,500,000(472.5 万)
通常建议随机搜索应采用总组合的 5-10%。 472.5 万中的 5-10% 将是一个非常高的数字。
所以我的问题是什么是一个好的“n_iter”值,以便在合理的时间/计算效率内获得良好的结果?
关于潜在查询的注意事项:一些参数,如“scale_pos_weight”、“max_delta_step”通常不会调整,但由于我的数据不平衡,我已将它们包括在内。
谢谢!
param_dist= {
"max_depth": [2,3,4,5,6],
"learning_rate":[0.01,0.02,0.03,0.05,0.1,0.3,0.5],
"min_child_weight":[1,2,3,4,5],
"subsample":[i/10.0 for i in range(6,10)],
"colsample_bytree":[i/10.0 for i in range(6,10)],
"reg_alpha":[1e-5, 1e-2, 0.1, 1, 100],
"gamma":[i/10.0 for i in range(0,5)],
"n_estimators":[100,500,700,1000],
'scale_pos_weight':[1,2,3,4,5,6,7,8,9],
'max_delta_step': range(1,10,1)
}
最佳答案
添加评论作为答案。
您的问题取决于训练模型平均需要多长时间以及多少时间对您来说比较合理。
这是一个随机搜索。因此,即使采用 90% 的组合,也不能保证找到最佳参数。最佳参数也有可能在您选择的 10 种组合中。我建议阅读参数并尝试根据您的数据集和功能修复其中一些参数。
首先,您不必调整scale_pos_weight。由于您有 9:1 不平衡数据集,因此必须将其修复为 9。
此外,学习率等参数可能不依赖于其他参数。您可以将它们省略并单独调整它们。
关于python - XGboost 的 RandomizedSearchCV、不平衡数据集和最佳迭代次数 (n_iter),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56269941/