我遇到一个奇怪的问题,我正在使用RandomizedSearchCV优化我的参数。
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分钟内出现,但是,如果我删除所有参数并仅保留以下参数,则它将永远运行并且必须杀死笔记本
para_RS = {
"max_depth": randint(1,70)
}
,如果我删除的次数较少,则需要很长时间才能运行(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")
答案 0 :(得分: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采用可迭代字典的参数网格。但是您的代码将为“ max_depth”,“ max_leaf_nodes”生成一个单个int,而不是数组或可迭代的。所以它应该抛出一个错误。您正在使用哪个版本的sklearn?还是您在此处显示的代码与实际代码不同?
答案 1 :(得分:0)
您可以关闭它,因为当我开始在分类器和RandomSearchCV中使用随机种子时,问题似乎消失了。感谢您的所有帮助。