用于 XGboost、不平衡数据集和最佳迭代次数 (n_iter) 的 RandomizedSearchCV
Posted
技术标签:
【中文标题】用于 XGboost、不平衡数据集和最佳迭代次数 (n_iter) 的 RandomizedSearchCV【英文标题】:RandomizedSearchCV for XGboost, imbalanced dataset and optimum iterations count (n_iter) 【发布时间】:2019-10-09 17:11:47 【问题描述】:我正在研究一个不平衡 (9:1) 的二元分类问题,并希望使用 Xgboost 和 RandomizedSearchCV。
如代码所示,有 472,50,000 (5*7*5*5*5*5*6*4*9*10) 种超参数组合。用 10 倍 CV,上述数字变为 472,500,000(472.5 万)
它通常建议随机搜索 CV 应采用总组合的 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)
【问题讨论】:
您是否为xgboost
培训设置了early_stopping_rounds
?您的问题取决于平均训练模型需要多长时间,以及多少时间对您来说是合理的。
添加,理想情况下你不必调整scale_pos_weight
。您必须将其设置为9
。
感谢 Nihal- 指出 scale_pos_weight,是的,它应该是 9。
@NihalSangeeth 提前停止我还没有设置,但是我会这样做。模型训练时间是一个限制,但不是很大,因为我想要尽可能高的召回率和精度,我可以耐心地制定这个模型。你建议我应该为 n_iter 最佳值做些什么,因为我更喜欢随着时间的推移进行正确的分类,并且还建议当时间是一个约束时 n_iter 应该做什么。有没有办法在有限的时间内实现相当好的 n_iter 数。非常感谢您的帮助,谢谢。
这是一个随机搜索。因此,即使您采用 90% 的组合,也不能保证找到最佳参数。最佳参数也有可能出现在您选择的 10 种组合中。我建议阅读参数并尝试根据您的数据集和功能修复其中一些参数。
【参考方案1】:
添加 cmets 作为答案。
您的问题取决于平均训练模型需要多长时间,以及多少时间对您来说是合理的。
这是一个随机搜索。因此,即使您采用 90% 的组合,也不能保证找到最佳参数。最佳参数也有可能出现在您选择的 10 种组合中。我建议阅读参数并尝试根据您的数据集和功能修复其中一些参数。
首先,您不必调整 scale_pos_weight。您必须将其修复为 9,因为您有 9:1 的不平衡数据集。
像学习率这样的参数也可能不依赖于其他参数。您可以将它们排除在外并单独调整它们。
【讨论】:
scale_pos_weight
也可以使用 class_ratios、class_ratios 的平方根和 1 进行调整。修复该参数并不总是很好。以上是关于用于 XGboost、不平衡数据集和最佳迭代次数 (n_iter) 的 RandomizedSearchCV的主要内容,如果未能解决你的问题,请参考以下文章