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

“halving”参数,它决定了为每次后续迭代选择的候选者的比例。例如,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设置为一个小值

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

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

    • 1,当resource != 'n_samples'

  • ‘exhaust’ 将设置 r0,使得**最后一次**迭代尽可能多地使用资源。也就是说,最后一次迭代将使用小于 max_resources 的最大值,该值同时是 min_resourcesfactor 的倍数。一般来说,使用 ‘exhaust’ 会得到更准确的估计器,但会稍微耗时更长。当 n_candidates='exhaust' 时,‘exhaust’不可用。

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

aggressive_elimination布尔值,默认为 False

这仅与在最后一次迭代后没有足够的资源将剩余候选者减少到最多 factor 的情况下相关。如果 True,则搜索过程将根据需要“重放”第一次迭代,直到候选者的数量足够小。默认为 False,这意味着最后一次迭代可能评估的候选者数量超过 factor。有关更多详细信息,请参见 积极消除候选者

cv整数、交叉验证生成器或可迭代对象,默认为 5

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

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

  • CV 分割器;,

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

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

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

注意

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

scoring字符串、可调用对象或 None,默认为 None

用于评估测试集上预测结果的单个字符串(参见 评分参数:定义模型评估规则)或可调用对象(参见 可调用评分器)。如果为 None,则使用估计器的 score 方法。

refit布尔值,默认为 True

如果为 True,则使用在整个数据集上找到的最佳参数重新拟合估计器。

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

error_score‘raise’ 或数字

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

return_train_score布尔值,默认为 False

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

random_state整数、RandomState 实例或 None,默认为 None

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

n_jobs整数或 None,默认为 None

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

verbose整数

控制详细程度:数值越高,显示的消息越多。

属性:
n_resources_整数列表

每次迭代使用的资源量。

n_candidates_整数列表

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

n_remaining_candidates_整数

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

max_resources_整数

任何候选模型在给定迭代中允许使用的最大资源数量。请注意,由于每次迭代使用的资源数量必须是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 (masked) ndarrays 字典

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

best_estimator_估计器或字典

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

best_score_float

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

best_params_dict

在留出数据上产生最佳结果的参数设置。

best_index_int

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

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

scorer_函数或字典

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

n_splits_int

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

refit_time_float

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

仅当refit不为False时才存在。

multimetric_bool

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

classes_shape 为 (n_classes,) 的 ndarray

类标签。

n_features_in_int

拟合期间看到的特征数量。

feature_names_in_shape 为 (n_features_in_,) 的 ndarray

拟合期间看到的特征名称。仅当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}
property classes_#

类标签。

仅当refit=True且估计器是分类器时才可用。

decision_function(X)[source]#

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

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

参数:
X可索引的,长度为 n_samples

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

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

基于具有最佳查找参数的估计器的X的决策函数的结果。

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

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

参数:
X类数组,shape (n_samples, n_features)

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

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

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

**paramsdict of string -> object

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

返回:
selfobject

已拟合估计器的实例。

get_metadata_routing()[source]#

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

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

版本 1.4 中新增。

返回:
routingMetadataRouter

一个MetadataRouter,封装了路由信息。

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deepbool,默认为 True

如果为 True,则将返回此估计器和包含的子对象(也是估计器)的参数。

返回:
paramsdict

参数名称与其值的映射。

inverse_transform(X=None, Xt=None)[source]#

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

仅当底层估计器实现了inverse_transform并且refit=True时可用。

参数:
X可索引的,长度为 n_samples

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

Xt可索引的,长度为 n_samples

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

自版本 1.5 起已弃用: Xt已在 1.5 版本中弃用,并将从 1.7 版本中移除。请改用X

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

基于具有最佳参数的估计器,对 Xt 执行 inverse_transform 函数的结果。

property n_features_in_#

拟合期间看到的特征数量。

仅当 refit=True 时可用。

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**字典

传递给底层评分器(s) 的参数。

版本 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