 <p>Yes, this is entirely correct. You can easily check it by setting the grid search procedure in verbose mode:</p> <pre><code>&gt;&gt;&gt; estimator = GridSearchCV(pipe, dict(pca__n_components=n_components, ... logistic__C=Cs), ... verbose=1) &gt;&gt;&gt; estimator.fit(X_digits, y_digits) Fitting 3 folds for each of 9 candidates, totalling 27 fits [...snip...] </code></pre> <p>More generally, the number of <code>fit</code> calls is the product of the number of value per parameter, times <em>k</em>, +1 if you refit the best parameters on the full training set (which happens by default).</p>