Как оценить прогресс GridSearchCV из подробного вывода в Scikit-Learn?

прямо сейчас я запускаю довольно агрессивный поиск сетки. У меня n=135 samples и я использую 23 folds использование пользовательского перекрестной проверки поезд / тестовый список. У меня verbose=2.

следующее, что я побежал:

param_test = {"loss":["deviance"],
           'learning_rate':[0.01, 0.025, 0.05, 0.075, 0.1, 0.15, 0.2],
           "min_samples_split": np.linspace(0.1, 0.5, 12),
           "min_samples_leaf": np.linspace(0.1, 0.5, 12),
           "max_depth":[3,5,8],
          "max_features":["log2","sqrt"],
          "min_impurity_split":[5e-6, 1e-7, 5e-7],
          "criterion": ["friedman_mse",  "mae"],
           "subsample":[0.5, 0.618, 0.8, 0.85, 0.9, 0.95, 1.0],
          "n_estimators":[10]}

Mod_gsearch = GridSearchCV(estimator = GradientBoostingClassifier(),
                           param_grid = param_test, scoring="accuracy",n_jobs=32, iid=False, cv=cv_indices, verbose=2)

я взглянул на подробный вывод в stdout:

$head gridsearch.o8475533
Fitting 23 folds for each of 254016 candidates, totalling 5842368 fits

основываясь на этом, похоже, что есть 5842368 перестановки пар перекрестной проверки с использованием моих параметров сетки.

$ grep -c  "[CV]" gridsearch.o8475533
7047332 

похоже, что есть около 7 миллионов перекрестных проверок, которые были сделаны до сих пор, но это больше, чем 5842368 всего подходит...

7047332/5842368 = 1.2062458236

тогда, когда я смотрю на :

$ cat ./gridsearch.e8475533
[Parallel(n_jobs=32)]: Done 132 tasks      | elapsed:    1.2s
[Parallel(n_jobs=32)]: Done 538 tasks      | elapsed:    2.8s
[Parallel(n_jobs=32)]: Done 1104 tasks      | elapsed:    4.8s
[Parallel(n_jobs=32)]: Done 1834 tasks      | elapsed:    7.9s
[Parallel(n_jobs=32)]: Done 2724 tasks      | elapsed:   11.6s
...
[Parallel(n_jobs=32)]: Done 3396203 tasks      | elapsed: 250.2min
[Parallel(n_jobs=32)]: Done 3420769 tasks      | elapsed: 276.5min
[Parallel(n_jobs=32)]: Done 3447309 tasks      | elapsed: 279.3min
[Parallel(n_jobs=32)]: Done 3484240 tasks      | elapsed: 282.3min
[Parallel(n_jobs=32)]: Done 3523550 tasks      | elapsed: 285.3min

моя цель:

как я могу узнать прогресс моего gridsearch относительно общего времени, которое это может занять?

что меня смущает:

Каковы отношения между [CV] строки stdout, всего подходит в stdout и задач stderr?

1 ответов


математика проста, но немного вводит в заблуждение на первый взгляд:

  1. при запуске каждой задачи механизм ведения журнала дает ' [CV]...- линия на stdout о starting выполнения и после выполнения задачи ends - еще одна строка с добавлением времени на выполнение конкретной задачи (в конце строки).

  2. кроме того, с некоторыми интервалами времени механизм ведения журнала записывает индикатор выполнения в stderr (или если у вас установлен verbose в >50 к stdout), указывающее количество выполненных задач из общего числа задач (подходит) и общее время, затраченное в настоящее время, как этот:

    [Parallel(n_jobs=32)]: Done 2724 tasks | elapsed: 11.6s

для вашего случая у вас есть 5842368 всего подходит, т. е. задачи.

ты посчитай 7047332 of ' [CV]...'что around 7047332/2 = 3523666 готовые задачи и индикатор выполнения показывает exactly сколько задач завершено-3523550 (вокруг-потому что некоторые задачи могут начинаться, но не заканчиваться во время счетный.)

-----------------------------------------------------------------------------------

если что то еще непонятно - не стесняйтесь спрашивать в комментариях