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)[源代码]#

对估计器的指定参数值进行详尽搜索。

重要成员健康、预测。

GridSearchCV实现“fit”和“score”方法。如果在使用的估计器中实现,它还实现“score_samples”、“predicate_proba”、“decision_function”、“transform”和“inverate_transform”。

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

阅读更多的 User Guide .

参数:
estimator估计器对象

假设这将实现scikit-learn估计器接口。任何一个估计器都需要提供 score 功能或 scoring 必须通过。

param_grid字典或字典列表

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

scoring字符串、可调用、列表、tuple或dict,默认=无

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

如果 scoring 代表单个分数,可以用途:

如果 scoring 代表多个分数,可以用途:

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

  • 返回字典的可调用对象,其中键是指标名称,值是指标分数;

  • 一个以指标名称作为键、可调用名称作为值的字典。

看到 指定多个指标进行评估 举个例子。

n_jobsint,默认=无

要并行运行的作业数。 None 意思是1,除非在a中 joblib.parallel_backend 上下文 -1 意味着使用所有处理器。看到 Glossary 了解更多详细信息。

在 v0.20 版本发生变更: n_jobs 默认值从1更改为无

refit布尔、字符串或可调用,默认=True

使用整个数据集中找到的最佳参数重新调整估计器。

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

如果在选择最佳估计器时除了最大得分之外还有其他考虑因素, refit 可以设置为返回所选的函数 best_index_ 给定 cv_results_ .在这种情况下, best_estimator_best_params_ 将根据返回的进行设置 best_index_best_score_ 属性将不可用。

重新调整的估计器可在 best_estimator_ 属性和许可使用 predict 直接在本 GridSearchCV instance.

此外,对于多指标评估,属性 best_index_ , best_score_best_params_ 只有在以下情况下才可用 refit 已设置,所有这些都将由该特定的评分者确定。

看到 scoring 参数以了解有关多指标评估的更多信息。

看到 具有交叉验证的网格搜索自定义改装策略 了解如何使用可调用通过设计自定义选择策略 refit .

在 0.20 版本发生变更: 添加了对可呼叫的支持。

cvint,交叉验证生成器或可迭代对象,默认=无

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

  • 无,要使用默认的5重交叉验证,

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

  • CV splitter ,

  • 可迭代产出(训练、测试)分裂为索引数组。

对于integer/Non-输入,如果估计器是分类器并且 y 是二元或多类, StratifiedKFold 采用了在所有其他情况下, KFold 采用了这些拆分器实例化为 shuffle=False 因此不同呼叫之间的拆分将是相同的。

User Guide 这里可以使用的各种交叉验证策略。

在 0.22 版本发生变更: cv 如果无从3倍更改为5倍,则默认值。

verboseint

控制详细程度:越高,消息越多。

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

  • >2:也显示分数;

  • >3:折叠和候选参数索引也与计算的开始时间一起显示。

pre_dispatchint,或url,默认=' 2 *n_jobs '

控制并行执行期间调度的作业数量。减少此数量对于避免当调度的作业数量超过中央处理能力时内存消耗的爆炸式增长非常有用。此参数可以是:

  • 没有,在这种情况下,所有工作岗位都会立即创建和催生。将其用于轻量级且快速运行的作业,以避免因作业按需生成而导致的延迟

  • int,给出产生的工作总数的确切数量

  • 一个字符串,给出作为n_jobs函数的一个表达,如“2*n_jobs”中

error_score“raise”或数字,默认=NP.nan

如果估计量匹配中出现错误,则指定给分数的值。如果设置为“raise”,则会引发错误。如果给出了数字值,则会引发FitUtiledWarning。此参数不影响重新调整步骤,重新调整步骤始终会引发错误。

return_train_score布尔,默认=假

如果 Falsecv_results_ 属性不包括培训分数。计算训练分数用于深入了解不同的参数设置如何影响过适应/欠适应权衡。然而,计算训练集中的分数可能在计算上很昂贵,并且并不严格要求选择产生最佳概括性能的参数。

Added in version 0.19.

在 0.21 版本发生变更: 默认值已从 TrueFalse

属性:
cv_results_麻木(蒙面)ndarrays的法令

一个以键作为列标题、以值作为列的dict,可以导入到pandas中 DataFrame .

例如下表

param_kernel

param_gamma

param_degree

split0_test_score

...

rank_t...

“聚”

--

2

0.80

...

2

“聚”

--

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}, ...],
}

NOTE

关键 '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_浮子

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 dict将scorer键映射到scorer可调用。

n_splits_int

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

refit_time_浮子

用于重新调整整个数据集上的最佳模型的秒数。

只有当 refit 不是假的。

Added in version 0.20.

multimetric_bool

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

classes_形状的nd数组(n_classes,)

班级标签。

n_features_in_int

期间看到的功能数量 fit .

feature_names_in_ :nd形状数组 (n_features_in_ ,)nd数组形状(

Names of features seen during fit. Only defined if best_estimator_ is defined (see the documentation for the refit parameter for more details) and that best_estimator_ exposes feature_names_in_ when fit.

Added in version 1.0.

参见

ParameterGrid

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

train_test_split

实用程序函数,用于将数据拆分为可用于匹配GridSearchCV实例的开发集和用于最终评估的评估集。

sklearn.metrics.make_scorer

根据性能指标或损失函数制作评分器。

注意到

选择的参数是最大化遗漏数据的分数的参数,除非通过了显式分数,在这种情况下将使用它。

如果 n_jobs 被设置为大于一的值,则为网格中的每个点复制数据(而不是 n_jobs 时间)。如果单个作业所需时间很少,则出于效率原因进行这一操作,但如果数据集很大并且没有足够的可用内存,则可能会出现错误。 这种情况下的解决办法是设置 pre_dispatch .然后,仅复制内存 pre_dispatch 多次合理的价值 pre_dispatch2 * n_jobs .

示例

>>> 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']
decision_function(X)[源代码]#

调用具有最佳参数的估计器上的decision_函数。

仅在以下情况下可用 refit=True 基础估计器支持 decision_function .

参数:
X可索引,长度n_samples

Must fulfill the input assumptions of the underlying estimator.

返回:
y_score形状的ndarray(n_samples,)或(n_samples,n_classes) 或(n_samples,n_classes *(n_classes-1)/ 2)

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

fit(X, y=None, **params)[源代码]#

使用所有参数集运行fit。

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

训练载体,在哪里 n_samples 是样本数量和 n_features 是功能的数量。对于预先计算的核或距离矩阵,X的预期形状是(n_samples,n_samples)。

y形状类似阵列(n_samples,n_put) 或(n_samples,),默认=无

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

**params字符串->对象的字典

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

如果fit参数是长度等于的类数组 num_samples 那么它将被交叉验证分割, Xy .比如说 sample_weight 参数被拆分,因为 len(sample_weights) = len(X) .然而,此行为不适用于 groups 它被传递到通过配置的拆分器 cv 构造函数的参数。因此, groups 使用 to perform the split 并确定将哪些样本分配给分裂的每一侧。

返回:
self对象

匹配估计量的实例。

get_metadata_routing()[源代码]#

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

请检查 User Guide 关于路由机制如何工作。

Added in version 1.4.

返回:
routingMetadataRouter

A MetadataRouter 封装路由信息。

get_params(deep=True)[源代码]#

获取此估计器的参数。

参数:
deep布尔,默认=True

如果为True,将返回此估计量和包含的作为估计量的子对象的参数。

返回:
paramsdict

参数名称映射到其值。

inverse_transform(X=None, Xt=None)[源代码]#

在具有最佳参数的估计器上调用inverse_transform。

仅在基础估计器实现时才可用 inverse_transformrefit=True .

参数:
X可索引,长度n_samples

Must fulfill the input assumptions of the underlying estimator.

Xt可索引,长度n_samples

Must fulfill the input assumptions of the underlying estimator.

自 1.5 版本弃用: Xt 在1.5中已废弃,并将在1.7中删除。使用 X 而不是.

返回:
X{ndarray,sparse matrix}的形状(n_samples,n_features)

结果 inverse_transform 功能 Xt 基于具有最佳发现参数的估计器。

predict(X)[源代码]#

调用具有最佳参数的估计器进行预测。

仅在以下情况下可用 refit=True 基础估计器支持 predict .

参数:
X可索引,长度n_samples

Must fulfill the input assumptions of the underlying estimator.

返回:
y_pred形状的nd数组(n_samples,)

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

predict_log_proba(X)[源代码]#

在具有最佳参数的估计器上调用predicate_log_proba。

仅在以下情况下可用 refit=True 基础估计器支持 predict_log_proba .

参数:
X可索引,长度n_samples

Must fulfill the input assumptions of the underlying estimator.

返回:
y_pred形状的ndarray(n_samples,)或(n_samples,n_classes)

预测的类log概率 X 基于具有最佳发现参数的估计器。类的顺序与匹配属性中的顺序相对应 classes_ .

predict_proba(X)[源代码]#

在具有最佳参数的估计器上调用predicate_proba。

仅在以下情况下可用 refit=True 基础估计器支持 predict_proba .

参数:
X可索引,长度n_samples

Must fulfill the input assumptions of the underlying estimator.

返回:
y_pred形状的ndarray(n_samples,)或(n_samples,n_classes)

预测的类别概率 X 基于具有最佳发现参数的估计器。类的顺序与匹配属性中的顺序相对应 classes_ .

score(X, y=None, **params)[源代码]#

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

这使用由以下定义的分数 scoring 如果有,以及 best_estimator_.score 方法,否则。

参数:
X形状类似阵列(n_samples,n_features)

输入数据,其中 n_samples 是样本数量和 n_features 是功能的数量。

y形状类似阵列(n_samples,n_put) 或(n_samples,),默认=无

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

**paramsdict

要传递给基础评分器的参数。

Added in version 1.4: 仅在以下情况下可用 enable_metadata_routing=True .看到 Metadata Routing User Guide 了解更多详细信息。

返回:
score浮子

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

score_samples(X)[源代码]#

在具有最佳参数的估计器上调用score_samples。

仅在以下情况下可用 refit=True 基础估计器支持 score_samples .

Added in version 0.24.

参数:
Xiterable

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

返回:
y_score形状的nd数组(n_samples,)

best_estimator_.score_samples

set_params(**params)[源代码]#

设置此估计器的参数。

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

参数:
**paramsdict

估计参数。

返回:
self估计器实例

估计实例。

transform(X)[源代码]#

使用最佳找到的参数对估计器进行变换。

仅在基础估计器支持的情况下可用 transformrefit=True .

参数:
X可索引,长度n_samples

Must fulfill the input assumptions of the underlying estimator.

返回:
Xt{ndarray,sparse matrix}的形状(n_samples,n_features)

X 基于具有最佳找到参数的估计器在新空间中进行转换。