当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python sklearn RandomizedSearchCV用法及代码示例


本文简要介绍python语言中 sklearn.model_selection.RandomizedSearchCV 的用法。

用法:

class sklearn.model_selection.RandomizedSearchCV(estimator, param_distributions, *, n_iter=10, scoring=None, n_jobs=None, refit=True, cv=None, verbose=0, pre_dispatch='2*n_jobs', random_state=None, error_score=nan, return_train_score=False)

超参数的随机搜索。

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

用于应用这些方法的估计器的参数通过 cross-validated 搜索参数设置进行优化。

与 GridSearchCV 相比,并非所有参数值都被尝试,而是从指定分布中采样固定数量的参数设置。尝试的参数设置数量由 n_iter 给出。

如果所有参数都以列表形式呈现,则执行无替换采样。如果至少有一个参数作为分布给出,则使用带放回抽样。强烈建议对连续参数使用连续分布。

在用户指南中阅读更多信息。

参数

estimator估计器对象

为每个网格点实例化该类型的对象。假设这实现了scikit-learn 估计器接口。估计器需要提供score 函数,或者必须传递scoring

param_distributions字典或字典列表

以参数名称 (str) 作为键和分布或要尝试的参数列表的字典。发行版必须提供 rvs 抽样方法(例如来自 scipy.stats.distributions 的抽样方法)。如果给出一个列表,则对其进行均匀采样。如果给定一个字典列表,首先对字典进行均匀采样,然后使用该字典对参数进行采样,如上所述。

n_iter整数,默认=10

采样的参数设置数。 n_iter 权衡运行时间与解决方案的质量。

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

评估cross-validated模型在测试集上的性能的策略。

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

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

  • 唯一字符串的列表或元组;
  • 一个可调用的返回一个字典,其中键是指标名称,值是指标分数;
  • 以度量名称作为键和可调用值的字典。

有关示例,请参阅指定多个指标进行评估。

如果没有,则使用估计器的评分方法。

n_jobs整数,默认=无

并行运行的作业数。 None 表示 1,除非在 joblib.parallel_backend 上下文中。 -1 表示使用所有处理器。有关详细信息,请参阅词汇表。

refitbool, str, or callable, default=True

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

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

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

重新安装的估计器在best_estimator_ 属性中可用,并允许直接在此RandomizedSearchCV 实例上使用predict

此外,对于多指标评估,属性 best_index_best_score_best_params_ 仅在设置了 refit 时可用,并且所有这些属性都将根据这个特定的记分器来确定。

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

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

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

  • 无,使用默认的 5 折交叉验证,
  • 整数,指定 (Stratified)KFold 中的折叠数,
  • CV分配器,
  • 一个可迭代的 yield (train, test) 拆分为索引数组。

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

有关可在此处使用的各种交叉验证策略,请参阅用户指南。

verboseint

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

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

控制在并行执行期间分派的作业数。当调度的作业多于 CPU 可以处理的数量时,减少此数字有助于避免内存消耗的爆炸式增长。该参数可以是:

  • 无,在这种情况下,所有作业都会立即创建和生成。将此用于轻量级和 fast-running 作业,以避免由于生成作业 on-demand 造成的延迟

  • 一个 int,给出产生的总作业的确切数量

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

random_stateint、RandomState 实例或无,默认=无

伪随机数生成器状态用于从可能值列表中随机均匀抽样,而不是 scipy.stats 分布。传递 int 以获得跨多个函数调用的可重现输出。请参阅词汇表。

error_score‘raise’ 或数字,默认=np.nan

如果在估计器拟合中发生错误,则分配给分数的值。如果设置为‘raise’,则会引发错误。如果给出数值,则引发FitFailedWarning。此参数不影响改装步骤,这将始终引发错误。

return_train_score布尔,默认=假

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

属性

cv_results_numpy(屏蔽)ndarrays的字典

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

例如下面给出的表格

param_kernel

param_gamma

split0_test_score

rank_test_score

‘rbf’

0.1

0.80

1

‘rbf’

0.2

0.84

3

‘rbf’

0.3

0.70

2

将由 cv_results_ 字典表示:

{
'param_kernel' : masked_array(data = ['rbf', 'rbf', 'rbf'],
                              mask = False),
'param_gamma'  : masked_array(data = [0.1 0.2 0.3], mask = False),
'split0_test_score'  : [0.80, 0.84, 0.70],
'split1_test_score'  : [0.82, 0.50, 0.70],
'mean_test_score'    : [0.81, 0.67, 0.70],
'std_test_score'     : [0.01, 0.24, 0.00],
'rank_test_score'    : [1, 3, 2],
'split0_train_score' : [0.80, 0.92, 0.70],
'split1_train_score' : [0.82, 0.55, 0.70],
'mean_train_score'   : [0.81, 0.74, 0.70],
'std_train_score'    : [0.01, 0.19, 0.00],
'mean_fit_time'      : [0.73, 0.63, 0.43],
'std_fit_time'       : [0.01, 0.02, 0.01],
'mean_score_time'    : [0.01, 0.06, 0.04],
'std_score_time'     : [0.00, 0.00, 0.00],
'params'             : [{'kernel' : 'rbf', 'gamma' : 0.1}, ...],
}

NOTE

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

mean_fit_timestd_fit_timemean_score_timestd_score_time 都以秒为单位。

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

best_estimator_估计器

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

对于多指标评估,仅当指定refit 时才存在此属性。

有关允许值的更多信息,请参阅refit 参数。

best_score_浮点数

best_estimator 的平均 cross-validated 得分。

对于多指标评估,如果 refitFalse 则不可用。有关详细信息,请参阅refit 参数。

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

best_params_dict

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

对于多指标评估,如果 refitFalse 则不可用。有关详细信息,请参阅refit 参数。

best_index_int

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

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

对于多指标评估,如果 refitFalse 则不可用。有关详细信息,请参阅refit 参数。

scorer_函数或字典

用于保留数据的记分器函数为模型选择最佳参数。

对于多指标评估,此属性包含经过验证的scoring dict,它将记分器键映射到记分器可调用。

n_splits_int

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

refit_time_浮点数

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

仅当 refit 不为 False 时才存在。

multimetric_bool

记分员是否计算多个指标。

classes_ndarray 形状 (n_classes,)

类标签。

n_features_in_int

拟合期间看到的特征数。

feature_names_in_ndarray 形状(n_features_in_,)

拟合期间看到的特征名称。仅在定义了 best_estimator_ 时才定义(有关更多详细信息,请参阅 refit 参数的文档)并且 best_estimator_ 在适合时公开 feature_names_in_

注意

根据评分参数,选择的参数是使held-out 数据的评分最大化的参数。

如果 n_jobs 设置为大于 1 的值,则为每个参数设置复制数据(而不是 n_jobs 次)。如果单个作业花费的时间很少,这样做是出于效率原因,但如果数据集很大并且没有足够的内存可用,则可能会引发错误。在这种情况下,一种解决方法是设置 pre_dispatch 。然后,内存只复制pre_dispatch多次。 pre_dispatch 的合理值为 2 * n_jobs

例子

>>> from sklearn.datasets import load_iris
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.model_selection import RandomizedSearchCV
>>> from scipy.stats import uniform
>>> iris = load_iris()
>>> logistic = LogisticRegression(solver='saga', tol=1e-2, max_iter=200,
...                               random_state=0)
>>> distributions = dict(C=uniform(loc=0, scale=4),
...                      penalty=['l2', 'l1'])
>>> clf = RandomizedSearchCV(logistic, distributions, random_state=0)
>>> search = clf.fit(iris.data, iris.target)
>>> search.best_params_
{'C': 2..., 'penalty': 'l1'}

相关用法


注:本文由纯净天空筛选整理自scikit-learn.org大神的英文原创作品 sklearn.model_selection.RandomizedSearchCV。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。