HalvingRandomSearchCV#

class sklearn.model_selection.HalvingRandomSearchCV(estimator, param_distributions, *, n_candidates='exhaust', factor=3, resource='n_samples', max_resources='auto', min_resources='smallest', aggressive_elimination=False, cv=5, scoring=None, refit=True, error_score=nan, return_train_score=True, random_state=None, n_jobs=None, verbose=0)[source]#

超参数的随机搜索。

搜索策略从少量资源评估所有候选开始,然后迭代地选择最佳候选,并使用越来越多的资源。

候选参数是从参数空间中随机抽样的,抽样候选参数的数量由 n_candidates 确定。

用户指南中阅读更多内容。

注意

此估计器目前仍处于**实验性**阶段:预测和 API 可能会在没有任何弃用周期的情况下发生变化。要使用它,您需要显式导入 enable_halving_search_cv

>>> # explicitly require this experimental feature
>>> from sklearn.experimental import enable_halving_search_cv # noqa
>>> # now you can import normally from model_selection
>>> from sklearn.model_selection import HalvingRandomSearchCV
参数:
estimator估计器对象

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

param_distributions字典或字典列表

字典,以参数名称(str)为键,以分布或要尝试的参数列表为值。分布必须提供 rvs 方法用于采样(例如来自 scipy.stats.distributions 的方法)。如果给定一个列表,则均匀采样。如果给定一个字典列表,则首先均匀采样一个字典,然后按照上述方式使用该字典采样一个参数。

n_candidates“exhaust” 或 int,默认值=“exhaust”

在第一次迭代中采样的候选参数的数量。使用 'exhaust' 将采样足够的候选,以便在 min_resourcesmax_resourcesfactor 的基础上,最后一次迭代使用尽可能多的资源。在这种情况下,min_resources 不能是 'exhaust'。

factorint 或 float,默认值=3

‘减半’参数,它决定了每次后续迭代中被选中的候选者的比例。例如,factor=3 意味着只选中三分之一的候选者。

resource'n_samples' 或 str,默认值=‘n_samples’

定义随每次迭代增加的资源。默认情况下,资源是样本数量。它也可以设置为基本估计器接受正整数值的任何参数,例如梯度提升估计器的 ‘n_iterations’ 或 ‘n_estimators’。在这种情况下,max_resources 不能是 ‘auto’,必须明确设置。

max_resourcesint,默认值=‘auto’

在给定迭代中,任何候选所允许使用的最大资源数量。默认情况下,当 resource='n_samples'(默认)时,此值设置为 n_samples,否则会引发错误。

min_resources{‘exhaust’, ‘smallest’} 或 int,默认值=‘smallest’

在给定迭代中,任何候选所允许使用的最小资源量。等效地,这定义了在第一次迭代中为每个候选分配的资源量 r0

  • ‘smallest’ 是一种启发式方法,将 r0 设置为小值

    • resource='n_samples' 用于回归问题时,n_splits * 2

    • resource='n_samples' 用于分类问题时,n_classes * n_splits * 2

    • resource != 'n_samples' 时,1

  • ‘exhaust’ 将设置 r0,使**最后**一次迭代使用尽可能多的资源。即,最后一次迭代将使用小于 max_resources 的最大值,该值是 min_resourcesfactor 的倍数。通常,使用 ‘exhaust’ 会导致更准确的估计器,但会稍微耗费更多时间。当 n_candidates='exhaust' 时,‘exhaust’ 不可用。

请注意,每次迭代使用的资源量始终是 min_resources 的倍数。

aggressive_elimination布尔值,默认值=False

这仅在资源不足以将剩余候选者在最后一次迭代后减少到至多 factor 的情况下才相关。如果为 True,则搜索过程将根据需要“重放”第一次迭代,直到候选者数量足够小。默认情况下,此值为 False,这意味着最后一次迭代可能会评估超过 factor 个候选者。有关更多详细信息,请参阅候选者的激进淘汰

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

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

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

  • CV 分割器,

  • 一个可迭代对象,以索引数组形式产生(训练,测试)拆分。

对于整数/None 输入,如果估计器是分类器且 y 是二元或多类,则使用 StratifiedKFold。在所有其他情况下,使用 KFold。这些分割器在实例化时设置 shuffle=False,因此在多次调用中分割将保持一致。

请参阅用户指南以了解此处可用的各种交叉验证策略。

注意

由于实现细节,cv 生成的折叠在多次调用 cv.split() 时必须相同。对于内置的 scikit-learn 迭代器,这可以通过禁用洗牌(shuffle=False)或将 cvrandom_state 参数设置为整数来实现。

scoringstr 或可调用对象,默认值=None

用于评估测试集预测的评分方法。

refit布尔值或可调用对象,默认值=True

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

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

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

有关如何使用 refit=callable 来平衡模型复杂度和交叉验证分数的示例,请参阅此示例

error_score‘raise’ 或 数值

如果估计器拟合中发生错误,则分配给分数的返回值。如果设置为 ‘raise’,则会引发错误。如果给定数值,则引发 FitFailedWarning。此参数不影响重新拟合步骤,该步骤将始终引发错误。默认值为 np.nan

return_train_score布尔值,默认值=False

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

random_stateint,RandomState 实例或 None,默认值=None

resources != 'n_samples' 时用于数据集子采样的伪随机数生成器状态。也用于从可能值的列表中进行随机均匀采样,而不是 scipy.stats 分布。传入一个整数以在多次函数调用中获得可重现的输出。请参阅术语表

n_jobsint 或 None,默认值=None

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

verboseint

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

属性:
n_resources_int 列表

每次迭代使用的资源量。

n_candidates_int 列表

每次迭代评估的候选参数数量。

n_remaining_candidates_int

最后一次迭代后剩余的候选参数数量。它对应于 ceil(n_candidates[-1] / factor)

max_resources_int

任何候选在给定迭代中允许使用的最大资源数量。请注意,由于每次迭代使用的资源数量必须是 min_resources_ 的倍数,因此最后一次迭代中实际使用的资源数量可能小于 max_resources_

min_resources_int

在第一次迭代中为每个候选分配的资源量。

n_iterations_int

实际运行的迭代次数。如果 aggressive_eliminationTrue,则此值等于 n_required_iterations_。否则,此值等于 min(n_possible_iterations_, n_required_iterations_)

n_possible_iterations_int

min_resources_ 资源开始且不超过 max_resources_ 的可能迭代次数。

n_required_iterations_int

min_resources_ 资源开始,在最后一次迭代中候选者数量少于 factor 所需的迭代次数。当资源不足时,此值将小于 n_possible_iterations_

cv_results_numpy(掩码)ndarrays 字典

一个字典,键为列标题,值为列,可以导入到 pandas DataFrame 中。它包含大量信息用于分析搜索结果。详情请参阅用户指南

best_estimator_估计器或字典

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

best_score_浮点数

最佳估计器的平均交叉验证分数。

best_params_字典

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

best_index_int

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

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

scorer_函数或字典

在保留数据上用于选择模型最佳参数的评分函数。

n_splits_int

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

refit_time_浮点数

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

仅当 refit 不为 False 时才存在。

multimetric_布尔值

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

classes_形状为 (n_classes,) 的 ndarray

类别标签。

n_features_in_int

fit 期间看到的特征数量。

feature_names_in_形状为 (n_features_in_,) 的 ndarray

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

在 1.0 版本中新增。

另请参阅

HalvingGridSearchCV

使用逐次减半在参数网格上进行搜索。

备注

选择的参数是根据评分参数,使保留数据的分数最大化的参数。

所有评分为 NaN 的参数组合将共享最低排名。

示例

>>> from sklearn.datasets import load_iris
>>> from sklearn.ensemble import RandomForestClassifier
>>> from sklearn.experimental import enable_halving_search_cv  # noqa
>>> from sklearn.model_selection import HalvingRandomSearchCV
>>> from scipy.stats import randint
>>> import numpy as np
...
>>> X, y = load_iris(return_X_y=True)
>>> clf = RandomForestClassifier(random_state=0)
>>> np.random.seed(0)
...
>>> param_distributions = {"max_depth": [3, None],
...                        "min_samples_split": randint(2, 11)}
>>> search = HalvingRandomSearchCV(clf, param_distributions,
...                                resource='n_estimators',
...                                max_resources=10,
...                                random_state=0).fit(X, y)
>>> search.best_params_  
{'max_depth': None, 'min_samples_split': 10, 'n_estimators': 9}
decision_function(X)[source]#

使用找到的最佳参数调用估计器上的 decision_function 方法。

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

参数:
X可索引对象,长度 n_samples

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

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

基于找到的最佳参数的估计器,对 X 调用决策函数的结果。

fit(X, y=None, **params)[source]#

使用所有参数集运行拟合。

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

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

y类数组,形状 (n_samples,) 或 (n_samples, n_output),可选

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

**params字符串到对象的字典

传递给估计器 fit 方法的参数。

返回:
self对象

已拟合估计器的实例。

get_metadata_routing()[source]#

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

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

在 1.4 版本中新增。

返回:
routingMetadataRouter

一个封装路由信息的 MetadataRouter

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deep布尔值,默认值=True

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

返回:
params字典

参数名称映射到其值。

inverse_transform(X)[source]#

使用找到的最佳参数调用估计器上的 inverse_transform 方法。

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

参数:
X可索引对象,长度 n_samples

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

返回:
X_original形状为 (n_samples, n_features) 的 {ndarray, 稀疏矩阵}

基于找到的最佳参数的估计器,对 X 调用 inverse_transform 函数的结果。

predict(X)[source]#

使用找到的最佳参数调用估计器上的 predict 方法。

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

参数:
X可索引对象,长度 n_samples

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

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

基于找到的最佳参数的估计器,对 X 的预测标签或值。

predict_log_proba(X)[source]#

使用找到的最佳参数调用估计器上的 predict_log_proba 方法。

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

参数:
X可索引对象,长度 n_samples

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

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

基于找到的最佳参数的估计器,对 X 的预测类别对数概率。类别的顺序与已拟合属性 classes_ 中的顺序一致。

predict_proba(X)[source]#

使用找到的最佳参数调用估计器上的 predict_proba 方法。

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

参数:
X可索引对象,长度 n_samples

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

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

基于找到的最佳参数的估计器,对 X 的预测类别概率。类别的顺序与已拟合属性 classes_ 中的顺序一致。

score(X, y=None, **params)[source]#

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

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

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

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

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

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

**params字典

要传递给底层评分器的一个或多个参数。

在 1.4 版本中新增:仅当 enable_metadata_routing=True 时可用。有关更多详细信息,请参阅元数据路由用户指南

返回:
score浮点数

如果提供了 scoring,则为由其定义的分数;否则为 best_estimator_.score 方法。

score_samples(X)[source]#

使用找到的最佳参数调用估计器上的 score_samples 方法。

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

在 0.24 版本中新增。

参数:
X可迭代对象

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

返回:
y_score形状为 (n_samples,) 的 ndarray

best_estimator_.score_samples 方法的结果。

set_params(**params)[source]#

设置此估计器的参数。

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

参数:
**params字典

估计器参数。

返回:
self估计器实例

估计器实例。

transform(X)[source]#

使用找到的最佳参数调用估计器上的 transform 方法。

仅当底层估计器支持 transformrefit=True 时可用。

参数:
X可索引对象,长度 n_samples

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

返回:
Xt形状为 (n_samples, n_features) 的 {ndarray, 稀疏矩阵}

基于找到的最佳参数的估计器,在新的空间中转换后的 X