5

今私はかなり積極的なグリッド検索を実行しています。私はn=135 samplesを持っており、私は23 foldsをカスタムクロスバリデーション列車/テストリストを使って走っています。私はverbose=2を持っています。Scikit-Learnで冗長出力からGridSearchCVの進捗を推定する方法は?

次は私が走ったものです:

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順列があるように見えます私のグリッドパラメータを使用して検証ペア。そして、これまでに行われたがそれは5842368トータルフィットよりますされています周り700万クロス検証があるように見えます

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

...

7047332/5842368 = 1.2062458236 

私は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 

私の目標:

グリッドサーチの実行に要する合計時間を確認するにはどうすればよいですか?私は混乱している何

について:

stderrstdout[CV]線の間の関係、stdoutに収まるの合計#、およびタスクとは何ですか?

答えて

1

数学は簡単ですが、少しは一見誤解を招く:

  1. 各タスクが開始され、実行のstartingについて注目しstdoutに「[CV] ...」行は、メカニズムを生み出すログインタスクendsの後に - 特定のタスク(行の最後)のための時間を追加する別の行。

  2. さらに、いくつかの時間間隔で、メカニズムをログに記録することstderrにプログレスバーを書き込み、現在の時間を費やした総タスク(フィット)との合計のうち完了したタスクの数を示す(またはあなたがstdoutに> 50にverboseを設定している場合) 、その1つのように:あなたのケースのために

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

、あなたは5842368トータルフィット、すなわちタスクを持っています。

あなたがaround 7047332/2 = 3523666完成したタスクである「... [CV]」の7047332をカウントし、プログレスバーがexactlyどのように多くのタスクが完了している示して - いくつかのタスクを開始する可能性があるため、しかし、カウントの時点で終了していない - の周り(3523550を)。

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

何かはまだ明確ではない場合 - コメントでお気軽に

関連する問題