class sklearn.model_selection.GridSearchCV(estimator, param_grid, *, scoring=None, n_jobs=None, iid='deprecated', refit=True, cv=None, verbose=0, pre_dispatch='2*n_jobs', error_score=nan, return_train_score=False)
[
源码
]
详尽搜索估计器的指定参数值。
重要的成员被拟合,可以预测。
GridSearchCV实现“拟合”和“得分”方法。如果在所使用的估计器中实现了“predict”,“predict_proba”,“decision_function”,“transform”和“inverse_transform” if the”,则还可以实现它们。
通过在参数网格上进行交叉验证的网格搜索,优化了用于应用这些方法的估计器的参数。
在
用户指南
中阅读更多内容。
param_grid
dict or list of dictionaries
以参数名称(
str
)作为键,将参数设置列表尝试作为值的字典,或此类字典的列表,在这种情况下,将探索列表中每个字典所跨越的网格。这样可以搜索任何顺序的参数设置。
scoring
str, callable, list/tuple or dict, default=None
单个str(请参阅
评分参数:定义模型评估规则
)或可调用项(请参阅
从度量函数定义评分策略
),用于评估测试集上的预测。
要评估多个指标,请给出(唯一的)字符串列表或以名称为键,可调用项为值的字典。
注意,使用自定义评分器时,每个评分器应返回一个值。返回值列表或数组的度量函数可以包装到多个评分器中,每个评分器都返回一个值。
有关示例,请参阅
指定多个度量进行评估
。
如果为None,则使用估计器的评分方法。
n_jobs
int, default=None
要并行运行的CPU内核数。
None
除非在
joblib.parallel_backend
环境中,否则表示1 。
-1
表示使用所有处理器。有关 更多详细信息,请参见
词汇表
。
v0.20版中的更改:
n_jobs
默认从1更改为None
pre_dispatch
int, or str, default=n_jobs
控制在并行执行期间分派的CPU内核数。当调度的CPU内核数量超过CPU的处理能力时,减少此数量可能有助于避免内存消耗激增。该参数可以是:
- None,在这种情况下,所有CPU内核都将立即创建并产生,使它进行轻量级和快速运行的任务,以避免因按需生成作业而造成延迟
-int,给出所产生的总CPU内核数的确切数量
-str,根据n_jobs给出表达式,如'2*n_jobs'
bool, default=False
如果为True,则按折数返回平均得分,并按每个测试集中的样本数加权。在这种情况下,假定数据在折叠上分布相同,并且最小化的损失是每个样品的总损失,而不是折叠的平均损失。
从版本0.22开始
iid
不推荐使用*:*参数在0.22中不再推荐使用,并将在0.24中删除
int, cross-validation generator or an iterable, default=None
确定交叉验证切分策略。可以输入:
-None,默认使用5折交叉验证
-integer,用于指定在
(Stratified)KFold
中的折叠次数
-
CV splitter
-一个输出训练集和测试集切分为索引数组的迭代。
对于integer或None,如果估计器是分类器,并且
y
是二分类或多分类,使用
StratifiedKFold
。在所有其他情况下,使用
KFold
。
有关可在此处使用的各种交叉验证策略,请参阅
用户指南
。
在0.22版本中:
cv
为“None”时,默认值从3折更改为5折
refit
bool, str, or callable, default=True
使用在整个数据集中找到的最优参数重新拟合估计器。
对于多指标评估,这需要是一个表示评分器的
str
,该评分器将为最终重新拟合估计器找到最优参数。
如果在选择最优估计值时除了考虑最大得分外,还需要考虑其他因素,可以将
refit
设置为返回所选
best_index_
给定
cv_results_
的函数。在这种情况下,
best_estimator_
和
best_params_
将根据返回的
best_index_
进行设置,而
best_score_
属性将不可用。
重新拟合的估计器在
best_estimator_
属性上可用,并允许
predict
直接在
GridSearchCV
实例上使用。
同样对于多指标评估,
best_index_
,
best_score_
和
best_params_
属性仅在设置
refit
时可用,并且都将根据这个特定的评分器来决定。
请参阅
scoring
参数以了解有关多指标评估的更多信息。
在0.20版中
:添加了对Callable的支持。
verbose
integer
控制详细程度:越高,消息越多。
error_score
‘raise’ or numeric, default=np.nan
如果估计器拟合出现错误,将值分配给分数。如果设置为“ raise”,则会引发错误。如果给出数值,则引发FitFailedWarning。此参数不会影响重新拟合步骤,这将总是引发错误。
return_train_score
bool, default=False
如果为
False
,则
cv_results_
属性将不包括训练集分数。计算训练集分数用于了解不同的参数设置如何影响过拟合或欠拟合的权衡。但是,在训练集上计算分数可能在计算上很耗时,并且不严格要求选择产生最优泛化性能的参数。
版本0.19中的新功能。
在版本0.21中
:默认值将
True
更改为
False
cv_results_
dict of numpy (masked) ndarrays
可以将键作为列标题和值作为列的字典导入pandas
DataFrame
。
例如下面给定的表
用一个
cv_results_
字典表示:
注意
'params'
键用于存储所有候选参数的参数设置字典列表。
mean_fit_time
,
std_fit_time
,
mean_score_time
和
std_score_time
的单位都是秒。
对于多指标评估,所有评分器的得分都可以在
cv_results_
字典中以评分器的名字(
'_<scorer_name>'
)结尾的键获得,而不是
'_score'
上面显示的。(“ split0_test_precision”,“ mean_train_precision”等)
best_estimator_
estimator
搜索选择的估计器,例如,对剩余数据给出最高分(或最小损失是否指定)的估计量。如果设置
refit=False
则不可用。
有关
refit
允许值的更多信息,请参见参数。
best_score_
float
best_estimator的平均交叉验证得分
对于多指标评估,只有在
refit
指定时才存在。
如果
refit
为函数,则此属性不可用。
best_params_
dict
参数设置可使保留数据获得最优结果。
对于多指标评估,只有在
refit
指定时才存在。
best_index_
search.cv_results_['params'][search.best_index_]
的字典给出了最优模型的参数设置,该模型给出最高平均得分(
search.best_score_
)。
对于多指标评估,只有在
refit
指定时才存在。
scorer_
function or a dict
在保留的数据上使用评分器功能为模型选择最优参数。
对于多指标评估,此属性保存已验证的
scoring
字典,该字典将评分器键映射到可调用的评分器。
n_splits_
int
交叉验证切分(或折叠、迭代)的数量。
refit_time_
float
用于在整个数据集中重新拟合最优模型的秒数。
仅当
refit
不是False 时才存在。
0.20版中的新功能。
ParameterGrid
生成超参数网格的所有组合。
sklearn.model_selection.train_test_split
用于将数据切分为可用于拟合GridSearchCV实例的开发集和用于最终评估的验证集的实用程序功能。
sklearn.metrics.make_scorer
根据绩效指标或损失函数确定评分器。
所选择的参数是那些保留数据中得分最大的参数,除非传递了一个显式得分,在这种情况下使用它。
如果将
n_jobs
设置为大于1的值,则将为网格中的每个点(而不是
n_jobs
时间)复制数据。如果单个任务所花费的时间很少,那么这样做是为了提高效率,但是如果数据集很大且没有足够的可用内存,则可能会引发错误。在这种情况下,解决方法是设置
pre_dispatch
。然后,仅复制内存
pre_dispatch
多次。
pre_dispatch
的合理值是
2 * 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']