RandomizedSearchCV занимает больше времени с меньшим количеством элементов для поиска - PullRequest
0 голосов
/ 20 марта 2019

У меня странная проблема, я использую 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")

Ответы [ 2 ]

2 голосов
/ 20 марта 2019

Это связано со случайным характером следующего:

"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» вместо массива или повторяемого. Так что должно выдать ошибку. Какую версию sklearn вы используете? Или код, который вы здесь показали, отличается от фактического?

0 голосов
/ 31 марта 2019

Вы можете закрыть это, так как кажется, что проблема исчезла, когда я начал использовать случайное начальное число как в классификаторе, так и в RandomSearchCV. Спасибо за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...