GridSearchCV#

classsklearn.model_selection.GridSearchCV(estimator,param_grid,*,scoring=None,n_jobs=None,refit=True,cv=None,verbose=0,pre_dispatch='2*n_jobs',error_score=nan,return_train_score=False)[source]#

Exhaustive search over specified parameter values for an estimator.

Important members are fit, predict.

GridSearchCV implements a “fit” and a “score” method.It also implements “score_samples”, “predict”, “predict_proba”,“decision_function”, “transform” and “inverse_transform” if they areimplemented in the estimator used.

The parameters of the estimator used to apply these methods are optimizedby cross-validated grid-search over a parameter grid.

Read more in theUser Guide.

Parameters:
estimatorestimator object

This is assumed to implement the scikit-learn estimator interface.Either estimator needs to provide ascore function,orscoring must be passed.

param_griddict or list of dictionaries

Dictionary with parameters names (str) as keys and lists ofparameter settings to try as values, or a list of suchdictionaries, in which case the grids spanned by each dictionaryin the list are explored. This enables searching over any sequenceof parameter settings.

scoringstr, callable, list, tuple or dict, default=None

Strategy to evaluate the performance of the cross-validated model onthe test set.

Ifscoring represents a single score, one can use:

Ifscoring represents multiple scores, one can use:

  • a list or tuple of unique strings;

  • a callable returning a dictionary where the keys are the metricnames and the values are the metric scores;

  • a dictionary with metric names as keys and callables as values.

SeeSpecifying multiple metrics for evaluation for an example.

n_jobsint, default=None

Number of jobs to run in parallel.None means 1 unless in ajoblib.parallel_backend context.-1 means using all processors. SeeGlossaryfor more details.

Changed in version v0.20:n_jobs default changed from 1 to None

refitbool, str, or callable, default=True

Refit an estimator using the best found parameters on the wholedataset.

For multiple metric evaluation, this needs to be astr denoting thescorer that would be used to find the best parameters for refittingthe estimator at the end.

Where there are considerations other than maximum score inchoosing a best estimator,refit can be set to a function whichreturns the selectedbest_index_ givencv_results_. In thatcase, thebest_estimator_ andbest_params_ will be setaccording to the returnedbest_index_ while thebest_score_attribute will not be available.

The refitted estimator is made available at thebest_estimator_attribute and permits usingpredict directly on thisGridSearchCV instance.

Also for multiple metric evaluation, the attributesbest_index_,best_score_ andbest_params_ will only be available ifrefit is set and all of them will be determined w.r.t this specificscorer.

Seescoring parameter to know more about multiple metricevaluation.

SeeCustom refit strategy of a grid search with cross-validationto see how to design a custom selection strategy using a callableviarefit.

Seethis examplefor an example of how to userefit=callable to balance modelcomplexity and cross-validated score.

Changed in version 0.20:Support for callable added.

cvint, cross-validation generator or an iterable, default=None

Determines the cross-validation splitting strategy.Possible inputs for cv are:

  • None, to use the default 5-fold cross validation,

  • integer, to specify the number of folds in a(Stratified)KFold,

  • CV splitter,

  • An iterable yielding (train, test) splits as arrays of indices.

For integer/None inputs, if the estimator is a classifier andy iseither binary or multiclass,StratifiedKFold is used. In allother cases,KFold is used. These splitters are instantiatedwithshuffle=False so the splits will be the same across calls.

ReferUser Guide for the variouscross-validation strategies that can be used here.

Changed in version 0.22:cv default value if None changed from 3-fold to 5-fold.

verboseint

Controls the verbosity: the higher, the more messages.

  • >1 : the computation time for each fold and parameter candidate isdisplayed;

  • >2 : the score is also displayed;

  • >3 : the fold and candidate parameter indexes are also displayedtogether with the starting time of the computation.

pre_dispatchint, or str, default=’2*n_jobs’

Controls the number of jobs that get dispatched during parallelexecution. Reducing this number can be useful to avoid anexplosion of memory consumption when more jobs get dispatchedthan CPUs can process. This parameter can be:

  • None, in which case all the jobs are immediately created and spawned. Usethis for lightweight and fast-running jobs, to avoid delays due to on-demandspawning of the jobs

  • An int, giving the exact number of total jobs that are spawned

  • A str, giving an expression as a function of n_jobs, as in ‘2*n_jobs’

error_score‘raise’ or numeric, default=np.nan

Value to assign to the score if an error occurs in estimator fitting.If set to ‘raise’, the error is raised. If a numeric value is given,FitFailedWarning is raised. This parameter does not affect the refitstep, which will always raise the error.

return_train_scorebool, default=False

IfFalse, thecv_results_ attribute will not include trainingscores.Computing training scores is used to get insights on how differentparameter settings impact the overfitting/underfitting trade-off.However computing the scores on the training set can be computationallyexpensive and is not strictly required to select the parameters thatyield the best generalization performance.

Added in version 0.19.

Changed in version 0.21:Default value was changed fromTrue toFalse

Attributes:
cv_results_dict of numpy (masked) ndarrays

A dict with keys as column headers and values as columns, that can beimported into a pandasDataFrame.

For instance the below given table

param_kernel

param_gamma

param_degree

split0_test_score

rank_t…

‘poly’

2

0.80

2

‘poly’

3

0.70

4

‘rbf’

0.1

0.80

3

‘rbf’

0.2

0.93

1

will be represented by acv_results_ dict of:

{'param_kernel':masked_array(data=['poly','poly','rbf','rbf'],mask=[FalseFalseFalseFalse]...)'param_gamma':masked_array(data=[----0.10.2],mask=[TrueTrueFalseFalse]...),'param_degree':masked_array(data=[2.03.0----],mask=[FalseFalseTrueTrue]...),'split0_test_score':[0.80,0.70,0.80,0.93],'split1_test_score':[0.82,0.50,0.70,0.78],'mean_test_score':[0.81,0.60,0.75,0.85],'std_test_score':[0.01,0.10,0.05,0.08],'rank_test_score':[2,4,3,1],'split0_train_score':[0.80,0.92,0.70,0.93],'split1_train_score':[0.82,0.55,0.70,0.87],'mean_train_score':[0.81,0.74,0.70,0.90],'std_train_score':[0.01,0.19,0.00,0.03],'mean_fit_time':[0.73,0.63,0.43,0.49],'std_fit_time':[0.01,0.02,0.01,0.01],'mean_score_time':[0.01,0.06,0.04,0.04],'std_score_time':[0.00,0.00,0.00,0.01],'params':[{'kernel':'poly','degree':2},...],}

NOTE

The key'params' is used to store a list of parametersettings dicts for all the parameter candidates.

Themean_fit_time,std_fit_time,mean_score_time andstd_score_time are all in seconds.

For multi-metric evaluation, the scores for all the scorers areavailable in thecv_results_ dict at the keys ending with thatscorer’s name ('_<scorer_name>') instead of'_score' shownabove. (‘split0_test_precision’, ‘mean_train_precision’ etc.)

best_estimator_estimator

Estimator that was chosen by the search, i.e. estimatorwhich gave highest score (or smallest loss if specified)on the left out data. Not available ifrefit=False.

Seerefit parameter for more information on allowed values.

best_score_float

Mean cross-validated score of the best_estimator

For multi-metric evaluation, this is present only ifrefit isspecified.

This attribute is not available ifrefit is a function.

best_params_dict

Parameter setting that gave the best results on the hold out data.

For multi-metric evaluation, this is present only ifrefit isspecified.

best_index_int

The index (of thecv_results_ arrays) which corresponds to the bestcandidate parameter setting.

The dict atsearch.cv_results_['params'][search.best_index_] givesthe parameter setting for the best model, that gives the highestmean score (search.best_score_).

For multi-metric evaluation, this is present only ifrefit isspecified.

scorer_function or a dict

Scorer function used on the held out data to choose the bestparameters for the model.

For multi-metric evaluation, this attribute holds the validatedscoring dict which maps the scorer key to the scorer callable.

n_splits_int

The number of cross-validation splits (folds/iterations).

refit_time_float

Seconds used for refitting the best model on the whole dataset.

This is present only ifrefit is not False.

Added in version 0.20.

multimetric_bool

Whether or not the scorers compute several metrics.

classes_ndarray of shape (n_classes,)

Class labels.

n_features_in_int

Number of features seen duringfit.

feature_names_in_ndarray of shape (n_features_in_,)

Names of features seen duringfit. Only defined ifbest_estimator_ is defined (see the documentation for therefitparameter for more details) and thatbest_estimator_ exposesfeature_names_in_ when fit.

Added in version 1.0.

See also

ParameterGrid

Generates all the combinations of a hyperparameter grid.

train_test_split

Utility function to split the data into a development set usable for fitting a GridSearchCV instance and an evaluation set for its final evaluation.

sklearn.metrics.make_scorer

Make a scorer from a performance metric or loss function.

Notes

The parameters selected are those that maximize the score of the left outdata, unless an explicit score is passed in which case it is used instead.

Ifn_jobs was set to a value higher than one, the data is copied for eachpoint in the grid (and notn_jobs times). This is done for efficiencyreasons if individual jobs take very little time, but may raise errors ifthe dataset is large and not enough memory is available. A workaround inthis case is to setpre_dispatch. Then, the memory is copied onlypre_dispatch many times. A reasonable value forpre_dispatch is2*n_jobs.

Examples

>>>fromsklearnimportsvm,datasets>>>fromsklearn.model_selectionimportGridSearchCV>>>iris=datasets.load_iris()>>>parameters={'kernel':('linear','rbf'),'C':[1,10]}>>>svc=svm.SVC()>>>clf=GridSearchCV(svc,parameters)>>>clf.fit(iris.data,iris.target)GridSearchCV(estimator=SVC(),             param_grid={'C': [1, 10], 'kernel': ('linear', 'rbf')})>>>sorted(clf.cv_results_.keys())['mean_fit_time', 'mean_score_time', 'mean_test_score',... 'param_C', 'param_kernel', 'params',... 'rank_test_score', 'split0_test_score',... 'split2_test_score', ... 'std_fit_time', 'std_score_time', 'std_test_score']
decision_function(X)[source]#

Call decision_function on the estimator with the best found parameters.

Only available ifrefit=True and the underlying estimator supportsdecision_function.

Parameters:
Xindexable, length n_samples

Must fulfill the input assumptions of theunderlying estimator.

Returns:
y_scorendarray of shape (n_samples,) or (n_samples, n_classes) or (n_samples, n_classes * (n_classes-1) / 2)

Result of the decision function forX based on the estimator withthe best found parameters.

fit(X,y=None,**params)[source]#

Run fit with all sets of parameters.

Parameters:
Xarray-like of shape (n_samples, n_features) or (n_samples, n_samples)

Training vectors, wheren_samples is the number of samples andn_features is the number of features. For precomputed kernel ordistance matrix, the expected shape of X is (n_samples, n_samples).

yarray-like of shape (n_samples, n_output) or (n_samples,), default=None

Target relative to X for classification or regression;None for unsupervised learning.

**paramsdict of str -> object

Parameters passed to thefit method of the estimator, the scorer,and the CV splitter.

If a fit parameter is an array-like whose length is equal tonum_samples then it will be split by cross-validation along withX andy. For example, thesample_weight parameter issplit becauselen(sample_weights)=len(X). However, this behaviordoes not apply togroups which is passed to the splitter configuredvia thecv parameter of the constructor. Thus,groups is usedto perform the split and determines which samples areassigned to the each side of the a split.

Returns:
selfobject

Instance of fitted estimator.

get_metadata_routing()[source]#

Get metadata routing of this object.

Please checkUser Guide on how the routingmechanism works.

Added in version 1.4.

Returns:
routingMetadataRouter

AMetadataRouter encapsulatingrouting information.

get_params(deep=True)[source]#

Get parameters for this estimator.

Parameters:
deepbool, default=True

If True, will return the parameters for this estimator andcontained subobjects that are estimators.

Returns:
paramsdict

Parameter names mapped to their values.

inverse_transform(X)[source]#

Call inverse_transform on the estimator with the best found params.

Only available if the underlying estimator implementsinverse_transform andrefit=True.

Parameters:
Xindexable, length n_samples

Must fulfill the input assumptions of theunderlying estimator.

Returns:
X_original{ndarray, sparse matrix} of shape (n_samples, n_features)

Result of theinverse_transform function forX based on theestimator with the best found parameters.

predict(X)[source]#

Call predict on the estimator with the best found parameters.

Only available ifrefit=True and the underlying estimator supportspredict.

Parameters:
Xindexable, length n_samples

Must fulfill the input assumptions of theunderlying estimator.

Returns:
y_predndarray of shape (n_samples,)

The predicted labels or values forX based on the estimator withthe best found parameters.

predict_log_proba(X)[source]#

Call predict_log_proba on the estimator with the best found parameters.

Only available ifrefit=True and the underlying estimator supportspredict_log_proba.

Parameters:
Xindexable, length n_samples

Must fulfill the input assumptions of theunderlying estimator.

Returns:
y_predndarray of shape (n_samples,) or (n_samples, n_classes)

Predicted class log-probabilities forX based on the estimatorwith the best found parameters. The order of the classescorresponds to that in the fitted attributeclasses_.

predict_proba(X)[source]#

Call predict_proba on the estimator with the best found parameters.

Only available ifrefit=True and the underlying estimator supportspredict_proba.

Parameters:
Xindexable, length n_samples

Must fulfill the input assumptions of theunderlying estimator.

Returns:
y_predndarray of shape (n_samples,) or (n_samples, n_classes)

Predicted class probabilities forX based on the estimator withthe best found parameters. The order of the classes correspondsto that in the fitted attributeclasses_.

score(X,y=None,**params)[source]#

Return the score on the given data, if the estimator has been refit.

This uses the score defined byscoring where provided, and thebest_estimator_.score method otherwise.

Parameters:
Xarray-like of shape (n_samples, n_features)

Input data, wheren_samples is the number of samples andn_features is the number of features.

yarray-like of shape (n_samples, n_output) or (n_samples,), default=None

Target relative to X for classification or regression;None for unsupervised learning.

**paramsdict

Parameters to be passed to the underlying scorer(s).

Added in version 1.4:Only available ifenable_metadata_routing=True. SeeMetadata Routing User Guide for moredetails.

Returns:
scorefloat

The score defined byscoring if provided, and thebest_estimator_.score method otherwise.

score_samples(X)[source]#

Call score_samples on the estimator with the best found parameters.

Only available ifrefit=True and the underlying estimator supportsscore_samples.

Added in version 0.24.

Parameters:
Xiterable

Data to predict on. Must fulfill input requirementsof the underlying estimator.

Returns:
y_scorendarray of shape (n_samples,)

Thebest_estimator_.score_samples method.

set_params(**params)[source]#

Set the parameters of this estimator.

The method works on simple estimators as well as on nested objects(such asPipeline). The latter haveparameters of the form<component>__<parameter> so that it’spossible to update each component of a nested object.

Parameters:
**paramsdict

Estimator parameters.

Returns:
selfestimator instance

Estimator instance.

transform(X)[source]#

Call transform on the estimator with the best found parameters.

Only available if the underlying estimator supportstransform andrefit=True.

Parameters:
Xindexable, length n_samples

Must fulfill the input assumptions of theunderlying estimator.

Returns:
Xt{ndarray, sparse matrix} of shape (n_samples, n_features)

X transformed in the new space based on the estimator withthe best found parameters.

Gallery examples#

Feature agglomeration vs. univariate selection

Feature agglomeration vs. univariate selection

Column Transformer with Mixed Types

Column Transformer with Mixed Types

Selecting dimensionality reduction with Pipeline and GridSearchCV

Selecting dimensionality reduction with Pipeline and GridSearchCV

Pipelining: chaining a PCA and a logistic regression

Pipelining: chaining a PCA and a logistic regression

Concatenating multiple feature extraction methods

Concatenating multiple feature extraction methods

Shrinkage covariance estimation: LedoitWolf vs OAS and max-likelihood

Shrinkage covariance estimation: LedoitWolf vs OAS and max-likelihood

Model selection with Probabilistic PCA and Factor Analysis (FA)

Model selection with Probabilistic PCA and Factor Analysis (FA)

Comparing Random Forests and Histogram Gradient Boosting models

Comparing Random Forests and Histogram Gradient Boosting models

Comparison of kernel ridge regression and SVR

Comparison of kernel ridge regression and SVR

Displaying Pipelines

Displaying Pipelines

Gaussian Mixture Model Selection

Gaussian Mixture Model Selection

Post-tuning the decision threshold for cost-sensitive learning

Post-tuning the decision threshold for cost-sensitive learning

Custom refit strategy of a grid search with cross-validation

Custom refit strategy of a grid search with cross-validation

Balance model complexity and cross-validated score

Balance model complexity and cross-validated score

Statistical comparison of models using grid search

Statistical comparison of models using grid search

Sample pipeline for text feature extraction and evaluation

Sample pipeline for text feature extraction and evaluation

Demonstration of multi-metric evaluation on cross_val_score and GridSearchCV

Demonstration of multi-metric evaluation on cross_val_score and GridSearchCV

Nested versus non-nested cross-validation

Nested versus non-nested cross-validation

Comparing randomized search and grid search for hyperparameter estimation

Comparing randomized search and grid search for hyperparameter estimation

Comparison between grid search and successive halving

Comparison between grid search and successive halving

Overview of multiclass training meta-estimators

Overview of multiclass training meta-estimators

Caching nearest neighbors

Caching nearest neighbors

Kernel Density Estimation

Kernel Density Estimation

Feature discretization

Feature discretization

Release Highlights for scikit-learn 0.24

Release Highlights for scikit-learn 0.24

Release Highlights for scikit-learn 1.4

Release Highlights for scikit-learn 1.4

RBF SVM parameters

RBF SVM parameters

Plot classification boundaries with different SVM Kernels

Plot classification boundaries with different SVM Kernels