Python XGboost、不平衡数据集和最佳迭代次数的随机搜索CV(n_iter)

Python XGboost、不平衡数据集和最佳迭代次数的随机搜索CV(n_iter),python,machine-learning,scikit-learn,cross-validation,xgboost,Python,Machine Learning,Scikit Learn,Cross Validation,Xgboost,我正在研究一个不平衡(9:1)的二元分类问题,希望使用Xgboost&RandomizedSearchCV 如代码所示,有472,50000(5*7*5*5*5*5*6*4*9*10)个超参数组合。在10倍CV的情况下,上述数字变为472500000(472.5万) 对于随机搜索,通常建议采用5-10%的总组合。472.5万的5-10%将是一个非常高的数字 因此,我的问题是,为了在合理的时间/计算效率内获得良好的结果,应该采用什么样的“n_iter”值 关于一个可能的查询,请注意:一些参数,如“

我正在研究一个不平衡(9:1)的二元分类问题,希望使用Xgboost&RandomizedSearchCV

如代码所示,有472,50000(5*7*5*5*5*5*6*4*9*10)个超参数组合。在10倍CV的情况下,上述数字变为472500000(472.5万)

对于随机搜索,通常建议采用5-10%的总组合。472.5万的5-10%将是一个非常高的数字

因此,我的问题是,为了在合理的时间/计算效率内获得良好的结果,应该采用什么样的“n_iter”值

关于一个可能的查询,请注意:一些参数,如“scale\u pos\u weight”、“max\u delta\u 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种组合中。我建议阅读有关参数的内容,并根据您的数据集和功能尝试修复其中一些参数

首先,你不必调整秤的位置和重量。由于数据集是9:1不平衡的,所以必须将其固定在9


此外,学习率等参数可能不依赖于其他参数。您可以将它们排除在外,然后分别进行调整。

您是否为
xgboost
培训设置了
early\u stop\u rounds
?你的问题取决于训练模型平均需要多少时间,以及多少时间对你来说是合理的。补充一点,理想情况下,你不必调整
scale\u pos\u weight
。您必须将其设置为
9
。感谢Nihal-指出磅秤位置重量,是的,它应该是9。@NihalSangeeth Early Stop我没有设置,但我会这样做。模型训练时间是一个限制,但不是很大的限制,因为我希望尽可能高的召回率和精确度,我可以耐心地建立这个模型。你建议我应该为n_iter最优值做些什么,因为我更喜欢随着时间的推移进行正确的分类,并且还建议当时间是一个约束条件时,n_iter应该做些什么。是否有一种方法可以在有限的时间内获得合理的n_iter数。非常感谢您的帮助,谢谢。这是一个随机搜索。因此,即使采用90%的组合,也无法保证找到最佳参数。最佳参数也有可能出现在您选择的10种组合中。我建议阅读有关参数的内容,并根据您的数据集和功能尝试修复其中一些参数。
scale\u pos\u weight
也可以进行调整,例如使用class\u比率、class\u比率的平方根和1。修复该参数并不总是很好。