如何从Scikit-Learn的GridSearchCV详细输出中估算进度?

目前我正在运行一个相当激进的网格搜索。我有n=135个样本,并且使用自定义的交叉验证训练/测试列表运行23个折叠。我的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.o8475533Fitting 23 folds for each of 254016 candidates, totalling 5842368 fits

根据这个输出,看起来使用我的网格参数有5842368种交叉验证组合。

$ grep -c  "[CV]" gridsearch.o84755337047332 

看起来到目前为止已经完成了大约700万次交叉验证,但这超过了5842368次总拟合…

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

我的目标:

如何知道我的网格搜索相对于总时间的进度?

我感到困惑的地方:

stdout中的[CV]行、stdout中的总拟合次数和stderr中的任务之间有什么关系?


回答:

数学很简单,但乍一看有点误导:

  1. 当每个任务开始时,日志机制会在stdout中生成一行'[CV] …’,指出执行的开始,任务结束后,另一行会加上该任务所花费的时间(在行的末尾)。

  2. 此外,日志机制会在一定时间间隔内向stderr(或者如果你将verbose设置为>50,则向stdout)写入进度条,指示已完成的任务数量与总任务(拟合)数量以及当前总共花费的时间,例如:

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

在你的情况下,总共有5842368次拟合,即任务。

你统计了7047332个'[CV] …’,这大约是7047332/2 = 3523666个已完成的任务,而进度条显示确切完成了多少任务 – 3523550(大约 – 因为有些任务可能已经开始,但尚未结束在统计时)。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注