5

En ce moment, je cours une recherche de grille assez agressive. J'ai n=135 samples et je cours 23 folds en utilisant une liste de train/test de validation croisée personnalisée. J'ai mes verbose=2.Comment estimer la progression d'un GridSearchCV à partir d'une sortie verbeuse dans Scikit-Learn?

Voici ce que je courais:

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) 

Je pris un coup d'œil à la sortie verbeuse en stdout:

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

sur cette base, il semble qu'il y ait 5842368 permutations de cross paires de validation en utilisant mes paramètres de grille.

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

On dirait qu'il ya environ 7 millions de validations croisées qui ont été fait jusqu'à présent, mais qui est plus que le total des ... 5842368 fits

7047332/5842368 = 1.2062458236 

Puis, quand je regarde le fichier stderr :

$ 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 

Mon objectif:

Comment puis-je connaître les progrès de ma recherche de grids par rapport au temps total qu'elle peut prendre?

Ce que je suis confus au sujet de:

Quelle est la relation entre [CV] lignes stdout, # total de crises dans stdout et tâches stderr?

Répondre

1

Math est simple, mais un peu trompeur à première vue:

  1. Lorsque chaque tâche mécanisme a commencé l'exploitation forestière donne un [CV] ... 'ligne stdout noter à propos starting d'exécution et après la tâche ends - une autre ligne avec l'ajout de temps de passe pour une tâche particulière (à la fin de la ligne).

  2. De plus, avec des intervalles de temps, le mécanisme journalisation écrit une barre de progression à stderr (ou si vous définissez verbose à> 50-stdout) indiquant un certain nombre de tâches terminées sur des tâches totales (FITS) et le total actuellement passé du temps , comme celui-là:

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

Pour votre cas, vous avez 5842368 crises au total, à savoir les tâches.

vous avez compté 7047332 de [CV] ... »qui est around 7047332/2 = 3523666 tâches terminées et la barre de progression indique exactly combien de tâches sont terminées - 3.523.550 (environ - parce que certaines tâches peuvent commencer, mais pas fin au moment de comptage).

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

Si quelque chose est toujours pas clair - ne hésitez pas à demander dans les commentaires