dask_ml.model_selection.GridSearchCV

dask_ml.model_selection.GridSearchCV

class dask_ml.model_selection.GridSearchCV(estimator, param_grid, scoring=None, iid=True, refit=True, cv=None, error_score='raise', return_train_score=False, scheduler=None, n_jobs=- 1, cache_cv=True)

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

GridSearchCV 实现了“fit”和“score”方法。如果使用的估计器中实现了“predict”、“predict_proba”、“decision_function”、“transform”和“inverse_transform”,GridSearchCV 也实现了这些方法。

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

参数
estimator估计器对象。

为此类型的每个参数实例化一个对象。假定此对象实现了 scikit-learn 估计器接口。估计器需要提供一个 score 函数,或者必须传入 scoring。如果给定字典列表,则首先均匀采样一个字典,然后如上所述使用该字典采样一个参数。

param_grid字典或字典列表

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

scoring字符串、可调用对象、列表/元组、字典或 None,默认值:None

单个字符串或可调用对象,用于评估测试集上的预测。

对于评估多个指标,可以提供(唯一)字符串列表,或以名称作为键、可调用对象作为值的字典。

注意,使用自定义评分器时,每个评分器应返回单个值。返回值列表/数组的指标函数可以包装成多个每个返回一个值的评分器。

如果为 None,则使用估计器的默认评分器(如果可用)。

iid布尔值,默认值:True

如果为 True,则假定数据在各折叠之间同分布,最小化的损失是每样本的总损失,而不是各折叠的平均损失。

cv整数、交叉验证生成器或可迭代对象,可选

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

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

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

  • 用作交叉验证生成器的对象。

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

对于整数/None 输入,如果估计器是分类器且 y 是二分类或多分类,则使用 StratifiedKFold。在所有其他情况下,使用 KFold

refit布尔值或字符串,默认值:True

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

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

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

同样对于多指标评估,属性 best_index_best_score_best_parameters_ 仅在设置了 refit 并且所有这些属性都根据此特定评分器确定时才可用。

有关多指标评估的更多信息,请参阅 scoring 参数。

error_score‘raise’(默认)或数值

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

return_train_score布尔值,默认值:True

如果为 'False',则 cv_results_ 属性将不包含训练分数。计算训练分数用于了解不同的参数设置如何影响过拟合/欠拟合的权衡。然而,在训练集上计算分数可能会带来计算开销,并且对于选择产生最佳泛化性能的参数而言并非严格必需。

注意,对于 scikit-learn >= 0.19.1 版本,默认值 True 已被弃用,并且在未明确请求训练分数的情况下访问训练分数结果时将引发警告。

scheduler字符串、可调用对象、Client 或 None,默认值:None

要使用的 dask 调度器。默认情况下,如果设置了全局调度器则使用它,否则回退到线程调度器。要使用不同的调度器,可以通过名称指定(“threading”、“multiprocessing”或“synchronous”),传入一个 dask.distributed.Client,或提供一个调度器 get 函数。

n_jobs整数,默认值:-1

并行运行的作业数。对于同步和分布式调度器会被忽略。如果 n_jobs == -1 [默认],则使用所有 CPU。对于 n_jobs < -1,使用 (n_cpus + 1 + n_jobs) 个 CPU。

cache_cv布尔值,默认值:True

是否在每个工作进程中最多提取每个训练/测试子集一次,还是在每次需要该子集时都提取。缓存分割可以在增加每个工作进程内存使用量的代价下加速计算。

如果为 True,则最坏情况下的内存使用量为每个工作进程 (n_splits + 1) * (X.nbytes + y.nbytes)。如果为 False,则最坏情况下的内存使用量为每个工作进程 (n_threads_per_worker + 1) * (X.nbytes + y.nbytes)

属性
cv_results_numpy(屏蔽的)ndarrays 字典

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

例如,下面的表格

param_kernel

param_gamma

param_degree

split0_test_score

rank…..

‘poly’

2

0.8

2

‘poly’

3

0.7

4

‘rbf’

0.1

0.8

3

‘rbf’

0.2

0.9

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.8, 0.7, 0.8, 0.9],
'split1_test_score'  : [0.82, 0.5, 0.7, 0.78],
'mean_test_score'    : [0.81, 0.60, 0.75, 0.82],
'std_test_score'     : [0.02, 0.01, 0.03, 0.03],
'rank_test_score'    : [2, 4, 3, 1],
'split0_train_score' : [0.8, 0.7, 0.8, 0.9],
'split1_train_score' : [0.82, 0.7, 0.82, 0.5],
'mean_train_score'   : [0.81, 0.7, 0.81, 0.7],
'std_train_score'    : [0.03, 0.04, 0.03, 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.007, 0.06, 0.04, 0.04],
'std_score_time'     : [0.001, 0.002, 0.003, 0.005],
'params'             : [{'kernel': 'poly', 'degree': 2}, ...],
}

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

mean_fit_timestd_fit_timemean_score_timestd_score_time 都以秒为单位。

best_estimator_估计器

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

best_score_浮点数或浮点数字典

best_estimator_ 在留出数据上的得分。使用多个指标时,best_score_ 将是一个字典,其中键是评分器的名称,值是该评分器的平均测试分数。

best_params_字典

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

best_index_整数或整数字典

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

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

使用多个指标时,best_index_ 将是一个字典,其中键是评分器的名称,值是该评分器具有最佳平均分数的索引,如上所述。

scorer_函数或函数字典

用于在保留数据上选择模型最佳参数的评分函数。使用多个指标时,为 {scorer_name: scorer} 字典。

n_splits_整数

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

注意

选择的参数是那些使留出数据得分最大化的参数,除非传入了明确的得分函数,在这种情况下使用该函数。

示例

>>> import dask_ml.model_selection as dcv
>>> from sklearn import svm, datasets
>>> iris = datasets.load_iris()
>>> parameters = {'kernel': ['linear', 'rbf'], 'C': [1, 10]}
>>> svc = svm.SVC()
>>> clf = dcv.GridSearchCV(svc, parameters)
>>> clf.fit(iris.data, iris.target)  
GridSearchCV(cache_cv=..., cv=..., error_score=...,
        estimator=SVC(C=..., cache_size=..., class_weight=..., coef0=...,
                      decision_function_shape=..., degree=..., gamma=...,
                      kernel=..., max_iter=-1, probability=False,
                      random_state=..., shrinking=..., tol=...,
                      verbose=...),
        iid=..., n_jobs=..., param_grid=..., refit=..., return_train_score=...,
        scheduler=..., scoring=...)
>>> sorted(clf.cv_results_.keys())  
['mean_fit_time', 'mean_score_time', 'mean_test_score',...
 'mean_train_score', 'param_C', 'param_kernel', 'params',...
 'rank_test_score', 'split0_test_score',...
 'split0_train_score', 'split1_test_score', 'split1_train_score',...
 'split2_test_score', 'split2_train_score',...
 'std_fit_time', 'std_score_time', 'std_test_score', 'std_train_score'...]

方法

decision_function(X)

使用找到的最佳参数在估计器上调用 decision_function

fit(X[, y, groups])

使用所有参数集运行 fit

get_metadata_routing()

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

get_params([deep])

获取此估计器的参数。

inverse_transform(Xt)

使用找到的最佳参数在估计器上调用 inverse_transform

predict(X)

使用找到的最佳参数在估计器上调用 predict

predict_log_proba(X)

使用找到的最佳参数在估计器上调用 predict_log_proba

predict_proba(X)

使用找到的最佳参数在估计器上调用 predict_proba

score(X[, y])

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

set_fit_request(*[, groups])

请求传递给 fit 方法的元数据。

set_params(**params)

设置此估计器的参数。

transform(X)

使用找到的最佳参数在估计器上调用 transform

visualize([filename, format])

使用 graphviz 渲染此参数搜索的任务图。

__init__(estimator, param_grid, scoring=None, iid=True, refit=True, cv=None, error_score='raise', return_train_score=False, scheduler=None, n_jobs=- 1, cache_cv=True)