GridSearchCV#

class sklearn.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)#

穷举搜索估计器的指定参数值。

重要成员是 fit, predict。

GridSearchCV 实现了 “fit” 和 “score” 方法。 它还实现了 “score_samples”, “predict”, “predict_proba”, “decision_function”, “transform” 和 “inverse_transform” 如果它们在使用的估计器中实现。

通过参数网格上的交叉验证网格搜索来优化应用这些方法的估计器的参数。

更多信息请参阅 用户指南

Parameters:
estimator估计器对象

这被假定为实现了 scikit-learn 估计器接口。 估计器需要提供一个 score 函数, 或者必须传递 scoring

param_grid字典或字典列表

带有参数名称 ( str ) 作为键和要尝试的参数设置列表作为值的字典,或者是一个这样的字典列表,在这种情况下,将探索列表中每个字典所跨越的网格。这使得可以搜索任何参数设置序列。

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

策略来评估交叉验证模型在测试集上的性能。

如果 scoring 表示单个分数,可以使用:

如果 scoring 表示多个分数,可以使用:

  • 唯一字符串的列表或元组;

  • 返回字典的 callable,其中键是指标名称,值是指标分数;

  • 以指标名称为键,callable 为值的字典。

指定多个度量标准进行评估 示例。

n_jobsint, default=None

并行运行的作业数。 None 表示 1,除非在 joblib.parallel_backend 上下文中。 -1 表示使用所有处理器。见 Glossary 了解更多细节。

Changed in version v0.20: n_jobs 默认值从 1 改为 None

refitbool, str, 或 callable, default=True

使用在整个数据集上找到的最佳参数重新拟合估计器。

对于多指标评估,这需要是一个 str ,表示将用于找到最佳参数以在最后重新拟合估计器的评分器。

在选择最佳估计器时除了最大分数之外还有其他考虑的情况下, refit 可以设置为一个函数,该函数返回给定 cv_results_ 的选定 best_index_ 。在这种情况下, best_estimator_best_params_ 将根据返回的 best_index_ 设置,而 best_score_ 属性将不可用。

重新拟合的估计器在 best_estimator_ 属性上可用,并允许直接在此 GridSearchCV 实例上使用 predict

对于多指标评估,属性 best_index_ , best_score_best_params_ 仅在 refit 设置时可用,并且它们都将根据此特定评分器确定。

scoring 参数了解更多关于多指标评估的信息。

网格搜索与交叉验证的自定义重拟合策略 了解如何通过 refit 使用 callable 设计自定义选择策略。

Changed in version 0.20: 增加了对 callable 的支持。

cvint, 交叉验证生成器或可迭代对象, default=None

确定交叉验证拆分策略。 cv 的可能输入包括:

  • None,使用默认的 5 折交叉验证,

  • 整数,指定 (Stratified)KFold 中的折数,

  • CV splitter ,

  • 生成 (train, test) 拆分作为索引数组的可迭代对象。

对于整数/None 输入,如果估计器是分类器且 y 是二分类或多分类,则使用 StratifiedKFold 。在所有其他情况下,使用 KFold 。这些拆分器以 shuffle=False 实例化,因此拆分将在调用之间相同。

参考 用户指南 了解可以使用的各种交叉验证策略。

Changed in version 0.22: cv 默认值如果为 None 从 3 折改为 5 折。

verboseint

控制冗长:越高,消息越多。

  • >1 : 显示每个折和参数候选的计算时间;

  • >2 : 还显示分数;

  • >3 : 还显示折和候选参数索引以及计算的开始时间。

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

控制并行执行期间调度的作业数。减少此数量对于避免在调度的作业多于 CPU 可以处理时内存消耗爆炸是有用的。此参数可以是:

  • None,在这种情况下,所有作业立即创建并派生。对于轻量级和快速运行的作业使用此选项,以避免按需派生作业的延迟

  • 一个整数,给出派生的总作业的确切数量

  • 一个字符串,给出作为 n_jobs 函数的表达式,如 ‘2*n_jobs’

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

在估计器拟合时发生错误时分配给分数的值。 如果设置为 ‘raise’,则引发错误。如果给定数值,则引发 FitFailedWarning。此参数不影响重新拟合步骤,重新拟合步骤将始终引发错误。

return_train_scorebool, default=False

如果 Falsecv_results_ 属性将不包括训练分数。 计算训练分数用于了解不同参数设置如何影响过拟合/欠拟合权衡。 然而,计算训练集上的分数在计算上可能是昂贵的,并且严格来说不是选择产生最佳泛化性能的参数所必需的。

Added in version 0.19.

Changed in version 0.21: 默认值从 True 改为 False

Attributes:
cv_results_字典形式的 numpy (masked) ndarrays

一个字典,键为列标题,值为列,可以导入到 pandas DataFrame 中。

例如,下表

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

将由一个 cv_results_ 字典表示为:

{
'param_kernel': masked_array(data = ['poly', 'poly', 'rbf', 'rbf'],
                             mask = [False False False False]...)
'param_gamma': masked_array(data = [-- -- 0.1 0.2],
                            mask = [ True  True False False]...),
'param_degree': masked_array(data = [2.0 3.0 -- --],
                             mask = [False False  True  True]...),
'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}, ...],
}

注意

'params' 用于存储所有参数候选的参数设置字典列表。

mean_fit_time , std_fit_time , mean_score_timestd_score_time 均以秒为单位。

对于多指标评估,所有评分器的分数在 cv_results_ 字典中以键结尾为该评分器的名称 ( '_<scorer_name>' ) 而不是上面显示的 '_score' 。(‘split0_test_precision’, ‘mean_train_precision’ 等)

best_estimator_估计器

由搜索选择的估计器,即在留出数据上给出最高分数(或最小损失,如果指定)的估计器。如果 refit=False ,则不可用。

refit 参数了解更多允许值的信息。

best_score_float

best_estimator 的平均交叉验证分数

对于多指标评估,这仅在 refit 指定时存在。

如果 refit 是函数,则此属性不可用。

best_params_dict

在留出数据上给出最佳结果的参数设置。

对于多指标评估,这仅在 refit 指定时存在。

best_index_int

cv_results_ 数组的索引,对应于最佳候选参数设置。

字典 search.cv_results_['params'][search.best_index_] 给出了最佳模型的参数设置,该模型给出了最高的平均分数 ( search.best_score_ )。

对于多指标评估,这仅在 refit 指定时存在。

scorer_函数或字典

在留出数据上用于选择最佳参数的评分器函数。

对于多指标评估,此属性持有验证的 scoring 字典,该字典将评分器键映射到评分器 callable。

n_splits_int

交叉验证拆分(折/迭代)的数量。

refit_time_float

在整个数据集上重新拟合最佳模型所用的秒数。

这仅在 refit 不为 False 时存在。

Added in version 0.20.

multimetric_bool

评分器是否计算多个指标。

classes_ndarray of shape (n_classes,)

类标签。

n_features_in_int

Number of features seen during fit .

feature_names_in_ndarray of shape ( n_features_in_ ,)

fit 期间看到的特征名称。仅在 best_estimator_ 定义时定义(见 refit 参数的文档了解更多细节)并且 best_estimator_ 在拟合时暴露 feature_names_in_

Added in version 1.0.

See also

ParameterGrid

生成超参数网格的所有组合。

train_test_split

实用函数将数据拆分为一个可用于拟合 GridSearchCV 实例的开发集和一个用于其最终评估的评估集。

sklearn.metrics.make_scorer

从性能指标或损失函数创建评分器。

Notes

选择的参数是那些最大化留出数据分数的参数,除非传递了显式分数,在这种情况下使用它。

如果 n_jobs 设置为大于 1 的值,则每个网格点都会复制数据(而不是 n_jobs 倍)。如果单个作业时间非常短,这是出于效率原因,但如果数据集很大且内存不足,则可能会引发错误。在这种情况下,解决方法是设置 pre_dispatch 。然后,内存仅复制 pre_dispatch 次。 pre_dispatch 的合理值是 2 * n_jobs

Examples

>>> from sklearn import svm, datasets
>>> from sklearn.model_selection import GridSearchCV
>>> 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']
property classes_#

类标签。

仅在 refit=True 且估计器是分类器时可用。

decision_function(X)#

调用具有最佳发现参数的估计器的决策函数。

仅在 refit=True 且底层估计器支持 decision_function 时可用。

Parameters:
Xindexable, length n_samples

必须满足底层估计器的输入假设。

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

基于具有最佳发现参数的估计器对 X 的决策函数结果。

fit(X, y=None, **params)#

运行所有参数集的拟合。

Parameters:
X形状为 (n_samples, n_features) 的类数组

训练向量,其中 n_samples 是样本的数量, n_features 是特征的数量。

y形状为 (n_samples, n_output) 或 (n_samples,) 的类数组,默认=None

相对于 X 用于分类或回归的目标; 无监督学习时为 None。

**params字典,键为字符串,值为对象

传递给估计器的 fit 方法、评分器和 CV 分割器的参数。

如果一个拟合参数是一个数组,其长度等于 num_samples ,那么它将与 Xy 一起在 CV 组中分割。例如,sample_weight 参数被分割 因为 len(sample_weights) = len(X)

Returns:
self对象

已拟合的估计器实例。

get_metadata_routing()#

获取此对象的元数据路由。

请查看 用户指南 以了解路由机制的工作原理。

Added in version 1.4.

Returns:
routingMetadataRouter

MetadataRouter 封装的 路由信息。

get_params(deep=True)#

获取此估计器的参数。

Parameters:
deepbool, 默认=True

如果为True,将返回此估计器和包含的子对象(也是估计器)的参数。

Returns:
paramsdict

参数名称映射到它们的值。

inverse_transform(X=None, Xt=None)#

调用具有最佳找到参数的估计器的 inverse_transform

仅在底层估计器实现 inverse_transformrefit=True 时可用。

Parameters:
X可索引对象, 长度为 n_samples

必须满足底层估计器的输入假设。

Xt可索引对象, 长度为 n_samples

必须满足底层估计器的输入假设。

Deprecated since version 1.5: Xt 在 1.5 版本中已弃用,并将在 1.7 版本中移除。请使用 X 代替。

Returns:
X{ndarray, sparse matrix} 形状为 (n_samples, n_features)

基于具有最佳找到参数的估计器,对 Xt 执行 inverse_transform 函数的结果。

property n_features_in_#

Number of features seen during fit .

仅当 refit=True 时可用。

predict(X)#

调用具有最佳发现参数的估计器的预测方法。

仅在 refit=True 且底层估计器支持 predict 时可用。

Parameters:
X可索引对象, 长度为 n_samples

必须满足底层估计器的输入假设。

Returns:
y_predndarray 形状为 (n_samples,)

基于具有最佳发现参数的估计器对 X 的预测标签或值。

predict_log_proba(X)#

调用具有最佳发现参数的估计器的predict_log_proba。

仅在 refit=True 且基础估计器支持 predict_log_proba 时可用。

Parameters:
X可索引, 长度为n_samples

必须满足基础估计器的输入假设。

Returns:
y_predndarray, 形状为(n_samples,)或(n_samples, n_classes)

基于具有最佳发现参数的估计器预测的 X 的类对数概率。类的顺序 对应于拟合属性中的:term:classes_

predict_proba(X)#

调用具有最佳发现参数的估计器的predict_proba方法。

仅在 refit=True 且底层估计器支持 predict_proba 时可用。

Parameters:
Xindexable, length n_samples

必须满足底层估计器的输入假设。

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

基于具有最佳发现参数的估计器,为 X 预测的类概率。类的顺序对应于拟合属性:term:classes_ 中的顺序。

score(X, y=None, **params)#

返回给定数据的分数,如果估计器已经重新拟合。

这使用由 scoring 定义的分数(如果提供),否则使用 best_estimator_.score 方法。

Parameters:
X形状为 (n_samples, n_features) 的类数组

输入数据,其中 n_samples 是样本的数量, n_features 是特征的数量。

y形状为 (n_samples, n_output) 或 (n_samples,) 的类数组,默认=None

相对于 X 的分类或回归目标; 无监督学习则为 None。

**paramsdict

要传递给底层评分器的参数。

..versionadded:: 1.4

仅在 enable_metadata_routing=True 时可用。有关更多详细信息,请参见 Metadata Routing User Guide

Returns:
scorefloat

scoring 定义的分数(如果提供),否则为 best_estimator_.score 方法。

score_samples(X)#

调用具有最佳发现参数的估计器的 score_samples 方法。

仅在 refit=True 且底层估计器支持 score_samples 时可用。

Added in version 0.24.

Parameters:
X可迭代对象

要预测的数据。必须满足底层估计器的输入要求。

Returns:
y_scorendarray 形状为 (n_samples,)

底层估计器的 best_estimator_.score_samples 方法。

set_params(**params)#

设置此估计器的参数。

该方法适用于简单估计器以及嵌套对象(例如 Pipeline )。后者具有形式为 <component>__<parameter> 的参数,以便可以更新嵌套对象的每个组件。

Parameters:
**paramsdict

估计器参数。

Returns:
selfestimator instance

估计器实例。

transform(X)#

调用具有最佳发现参数的估计器的transform方法。

仅在基础估计器支持 transformrefit=True 时可用。

Parameters:
Xindexable, length n_samples

必须满足基础估计器的输入假设。

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

基于具有最佳发现参数的估计器,在新的空间中变换的 X