使用Pipeline和GridSearchCV完成的训练次数

0 投票
1 回答
7330 浏览
提问于 2025-04-17 20:59

我正在阅读这个教程,它讲的是如何把主成分分析(PCA)和逻辑回归结合在一起,并通过一个流程来使用交叉验证,同时为PCA和逻辑回归设置一些参数。下面是我从这个例子中理解到的内容,然后我会提出我的问题。

我理解到:

当执行GridSearchCV时,它默认会进行3次折叠交叉验证。也就是说,它首先会用20个主成分来计算PCA,然后把数据转换后送入逻辑回归进行训练。接下来,对于逻辑回归中的C参数的每一个值,它会进行3次折叠交叉验证,看看哪个值效果最好。因此,逻辑回归的训练次数会是3*3=9次,因为我们有3个C参数的值,每个参数值又进行3次折叠交叉验证。

之后,它会对PCA的第二个参数(40)做同样的事情,这样又会有9次训练。最后,对于PCA的最后一个参数(64)也会进行9次训练。所以总的来说,我们会有9 * 3 = 27次逻辑回归的训练。

我的问题是:我对这个过程的理解正确吗?

1 个回答

1

是的,这完全正确。你可以通过把网格搜索的过程设置为详细模式来轻松检查这一点:

>>> estimator = GridSearchCV(pipe, dict(pca__n_components=n_components,
...                                     logistic__C=Cs),
...                          verbose=1)
>>> estimator.fit(X_digits, y_digits)
Fitting 3 folds for each of 9 candidates, totalling 27 fits
[...snip...]

更一般来说,fit 调用的次数等于每个参数的取值数量乘以 k,如果你在完整的训练集上重新训练最佳参数,还要加1(这通常是默认的做法)。

撰写回答