随机化searchcv需要更长的时间,搜索的元素更少

2024-06-28 19:35:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了一个奇怪的问题,我正在使用一个随机的searchcv来优化我的参数。在

para_RS =     {"max_depth": randint(1,70),
               "max_features": ["log2", "sqrt"],
               "min_samples_leaf": randint(5, 50),
               "criterion": ["entropy","gini"],
               "class_weight":['balanced'],
               "max_leaf_nodes":randint(2,20)
              }
dt = DecisionTreeClassifier()

如果我包括所有这些参数,输出将在2-3分钟内完成,但是如果我删除所有参数,只保留下面的参数,它将永远运行,我必须杀死笔记本

^{pr2}$

而且,如果我删除较少,它需要长时间运行(5-10分钟)。 代码如下:

if (randomsearch == True):
        tick = time.time()

        print("Random_Search_begin")
        rs= RandomizedSearchCV(estimator=dt, cv=5, param_distributions=para_RS,
                               n_jobs=4,n_iter =30, scoring="roc_auc",return_train_score=True)
        rs.fit(trainx_outer,trainy_outer)

        # other code irrelevant to the issue...

        print("Random_Search_end")

Tags: truesearch参数timedtrandommaxprint
2条回答

这是由于以下因素的随机性:

"max_depth": randint(1,70)
"max_leaf_nodes":randint(2,20)

randint(1, 70)将返回1,70之间的整数。因此,在不同的运行过程中,生成不同的max_depth值。在

因此,在某个运行期间,生成的值可能非常高。DecisionTreeClassifier的速度受max_depth的值及其max_leaf_nodes的影响。如果这些都很大,时间也会很大。在

此外,我不确定您如何能够运行此代码。因为RandomizedSearchCV取iterables字典的参数网格。但是您的代码将为“max_depth”、“max_leaf_nodes”生成一个整数,而不是数组或iterable。所以它应该抛出一个错误。您使用的是哪个版本的sklearn?或者您在这里显示的代码与实际不同吗?在

您可以关闭它,因为当我开始在分类器和RandomSearchCV中使用随机种子时,问题似乎就消失了。谢谢你的帮助。在

相关问题 更多 >