python - XGboost 的 RandomizedSearchCV、不平衡数据集和最佳迭代次数 (n_iter)

标签 python machine-learning scikit-learn cross-validation xgboost

我正在研究不平衡 (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/

相关文章:

python - 在 try-except block 中关闭游标后如何关闭连接?

apache-spark - Apache Spark 随机森林性能缓慢

python - 伯努利朴素贝叶斯错误 : ValueError: Unknown label type: (array([0, 0, 0, ..., 0, 0, 0], dtype=object),)

python - '无法计算 Pack,因为输入 #1(从零开始)预计是浮点张量,但实际上是 int32 张量 [Op :Pack] name: packed'. tf.squeeze 错误

machine-learning - 使用机器学习算法训练 MFCC

python - 在 WSGI 应用程序中获取未转义的 URI

python - Google 表格 "repeatCell"从现有单元格中剥离格式

python - 使用 Python 计算 HTTP header 的香农熵。怎么做?

python - 生成PCA加载矩阵时如何将pandas dataframe列设置为索引

machine-learning - 如何使用Scikit-learn中的OneVsRestClassifier来分析多类分类预测每个单独类的性能?