我遇到了一个奇怪的问题,我正在使用一个随机的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")
这是由于以下因素的随机性:
randint(1, 70)
将返回1,70之间的整数。因此,在不同的运行过程中,生成不同的max_depth
值。在因此,在某个运行期间,生成的值可能非常高。
DecisionTreeClassifier
的速度受max_depth
的值及其max_leaf_nodes
的影响。如果这些都很大,时间也会很大。在此外,我不确定您如何能够运行此代码。因为RandomizedSearchCV取iterables字典的参数网格。但是您的代码将为“max_depth”、“max_leaf_nodes”生成一个整数,而不是数组或iterable。所以它应该抛出一个错误。您使用的是哪个版本的sklearn?或者您在这里显示的代码与实际不同吗?在
您可以关闭它,因为当我开始在分类器和RandomSearchCV中使用随机种子时,问题似乎就消失了。谢谢你的帮助。在
相关问题 更多 >
编程相关推荐