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)#
随机搜索超参数。
搜索策略从使用少量资源评估所有候选开始,并迭代选择最佳候选,使用越来越多的资源。
候选参数从参数空间中随机抽样,抽样候选参数的数量由
n_candidates
决定。更多信息请参阅 用户指南 。
Note
该估计器目前仍处于 实验性 阶段:预测和 API 可能会在没有任何弃用周期的情况下发生变化。要使用它,您需要显式导入
enable_halving_search_cv
>>> # 显式要求此实验性功能 >>> from sklearn.experimental import enable_halving_search_cv # noqa >>> # 现在可以从 model_selection 正常导入 >>> from sklearn.model_selection import HalvingRandomSearchCV
- Parameters:
- estimator估计器对象
这应该实现 scikit-learn 估计器接口。 估计器需要提供
score
函数, 或者必须传递scoring
。- param_distributions字典或字典列表
带有参数名称 (
str
) 作为键的字典,以及要尝试的参数分布或参数列表。分布必须提供rvs
方法进行抽样(如 scipy.stats.distributions 中的那些)。 如果给定一个列表,则均匀抽样。 如果给定字典列表,首先均匀抽样一个字典,然后使用该字典如上所述抽样参数。- n_candidates“exhaust” 或 int, 默认=”exhaust”
在第一次迭代中要抽样的候选参数数量。使用 ‘exhaust’ 将抽样足够的候选参数,以便最后一轮迭代尽可能多地使用资源,基于
min_resources
,max_resources
和factor
。在这种情况下,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_resources
和factor
的倍数。一般来说,使用 ‘exhaust’ 会得到更准确的估计器,但稍微耗时一些。当n_candidates='exhaust'
时,’exhaust’ 不可用。
注意,每次迭代使用的资源数量始终是
min_resources
的倍数。- aggressive_eliminationbool, 默认=False
这仅在资源不足以在最后一轮迭代后将剩余候选参数减少到最多
factor
的情况下相关。如果True
,则搜索过程将“重放”第一次迭代,直到候选参数数量足够小为止。默认情况下为False
,这意味着最后一轮迭代可能会评估超过factor
个候选参数。详见 候选参数的积极消除 。- cvint, 交叉验证生成器或可迭代对象, 默认=5
确定交叉验证拆分策略。 cv 的可能输入包括:
整数,指定
(Stratified)KFold
中的折数,生成 (train, test) 拆分的可迭代对象,作为索引数组。
对于整数/None 输入,如果估计器是分类器且
y
是二分类或多分类,则使用StratifiedKFold
。在所有其他情况下,使用KFold
。这些拆分器实例化时使用shuffle=False
,因此拆分在多次调用中将保持一致。有关可在此使用的各种交叉验证策略,请参阅 用户指南 。
Note
由于实现细节,
cv
生成的折数在多次调用cv.split()
时必须相同。对于内置的scikit-learn
迭代器,可以通过禁用洗牌 (shuffle=False
) 或将cv
的random_state
参数设置为整数来实现。- scoringstr, callable, 或 None, 默认=None
一个字符串(参见 scoring_parameter )或可调用对象(参见 从指标函数定义您的评分策略 ),用于评估测试集上的预测。如果为 None,则使用估计器的 score 方法。
- refitbool, 默认=True
如果为 True,则使用在全数据集上找到的最佳参数重新拟合估计器。
重新拟合的估计器可通过
best_estimator_
属性获得,并允许直接在此HalvingRandomSearchCV
实例上使用predict
。- error_score‘raise’ 或 numeric
在估计器拟合过程中发生错误时分配给分数的值。如果设置为 ‘raise’,则引发错误。如果给定数值,则引发 FitFailedWarning。此参数不影响重新拟合步骤,重新拟合步骤将始终引发错误。默认值为
np.nan
。- return_train_scorebool, 默认=False
如果为
False
,则cv_results_
属性将不包括训练分数。 计算训练分数用于了解不同参数设置如何影响过拟合/欠拟合的权衡。然而,计算训练集上的分数在计算上可能很昂贵,并且严格来说并不是选择产生最佳泛化性能的参数所必需的。- random_stateint, RandomState 实例或 None, 默认=None
用于子采样数据集的伪随机数生成器状态,当
resources != 'n_samples'
时。还用于从可能值列表中随机均匀抽样,而不是使用 scipy.stats 分布。 传递一个 int 以在多次函数调用中获得可重复的输出。参见 Glossary 。- n_jobsint 或 None, 默认=None
并行运行的作业数量。
None
意味着 1,除非在joblib.parallel_backend
上下文中。-1
意味着使用所有处理器。参见 Glossary 了解更多详情。- verboseint
控制详细程度:值越高,消息越多。
- Attributes:
- n_resources_list of int
每次迭代中使用的资源数量。
- n_candidates_list of int
每次迭代中评估的候选参数数量。
- n_remaining_candidates_int
最后一轮迭代后剩余的候选参数数量。它对应于
ceil(n_candidates[-1] / factor)
。- max_resources_int
任何候选参数在给定迭代中允许使用的最大资源数量。注意,由于每次迭代中使用的资源数量必须是
min_resources_
的倍数,最后一轮迭代中实际使用的资源数量可能小于max_resources_
。- min_resources_int
第一次迭代中为每个候选参数分配的资源数量。
- n_iterations_int
实际运行的迭代次数。如果
aggressive_elimination
为True
,则等于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_dict of numpy (masked) ndarrays
一个字典,键为列标题,值为列,可以导入到 pandas
DataFrame
中。它包含分析搜索结果的许多信息。 请参阅 用户指南 了解更多详情。- best_estimator_估计器或字典
由搜索选择的估计器,即在留出数据上给出最高分数(或最小损失,如果指定)的估计器。如果
refit=False
,则不可用。- best_score_float
best_estimator 的平均交叉验证分数。
- best_params_dict
在留出数据上给出最佳结果的参数设置。
- best_index_int
cv_results_
数组中对应于最佳候选参数设置的索引。字典
search.cv_results_['params'][search.best_index_]
给出了最佳模型的参数设置,该模型给出了最高的平均分数 (search.best_score_
)。- scorer_function 或 dict
用于在留出数据上选择最佳参数的评分函数。
- n_splits_int
交叉验证拆分的数量(折数/迭代次数)。
- refit_time_float
在全数据集上重新拟合最佳模型所用的秒数。
仅当
refit
不为 False 时存在。- multimetric_bool
评分器是否计算多个指标。
classes_
ndarray of shape (n_classes,)类标签。
n_features_in_
intNumber of features seen during fit .
- feature_names_in_ndarray of shape (
n_features_in_
,) fit 期间看到的特征名称。仅当定义了
best_estimator_
时定义(有关refit
参数的更多详细信息,请参阅文档),并且best_estimator_
在拟合时暴露feature_names_in_
。Added in version 1.0.
See also
HalvingGridSearchCV
搜索超参数网格,使用逐次减半。
Notes
选择的参数是那些根据评分参数最大化留出数据分数的参数。
所有用 NaN 评分的参数组合将共享最低排名。
Examples
>>> 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)#
调用具有最佳发现参数的估计器的决策函数。
仅在
refit=True
且底层估计器支持decision_function
时可用。- Parameters:
- Xindexable, length n_samples
必须满足底层估计器的输入假设。
- Returns:
- y_scorendarray of shape (n_samples,) or (n_samples, n_classes) 或 (n_samples, n_classes * (n_classes-1) / 2)
基于具有最佳发现参数的估计器对
X
的决策函数结果。
- fit(X, y=None, **params)#
运行所有参数集的拟合。
- Parameters:
- Xarray-like, shape (n_samples, n_features)
训练向量,其中
n_samples
是样本的数量,n_features
是特征的数量。- yarray-like, shape (n_samples,) 或 (n_samples, n_output), 可选
相对于 X 的分类或回归目标; 无监督学习时为 None。
- **paramsdict of string -> object
传递给估计器
fit
方法的参数。
- Returns:
- selfobject
已拟合估计器的实例。
- get_metadata_routing()#
获取此对象的元数据路由。
请查看 用户指南 以了解路由机制的工作原理。
Added in version 1.4.
- Returns:
- routingMetadataRouter
MetadataRouter
封装的 路由信息。
- get_params(deep=True)#
获取此估计器的参数。
- Parameters:
- deepbool, 默认=True
如果为True,将返回此估计器和包含的子对象(也是估计器)的参数。
- Returns:
- paramsdict
参数名称映射到它们的值。
- inverse_transform(X=None, Xt=None)#
调用具有最佳找到参数的估计器的
inverse_transform
。仅在底层估计器实现
inverse_transform
且refit=True
时可用。- Parameters:
- X可索引对象, 长度为 n_samples
必须满足底层估计器的输入假设。
- Xt可索引对象, 长度为 n_samples
必须满足底层估计器的输入假设。
Deprecated since version 1.5:
Xt
在 1.5 版本中已弃用,并将在 1.7 版本中移除。请使用X
代替。
- Returns:
- X{ndarray, sparse matrix} 形状为 (n_samples, n_features)
基于具有最佳找到参数的估计器,对
Xt
执行inverse_transform
函数的结果。
- predict(X)#
调用具有最佳发现参数的估计器的预测方法。
仅在
refit=True
且底层估计器支持predict
时可用。- Parameters:
- X可索引对象, 长度为 n_samples
必须满足底层估计器的输入假设。
- Returns:
- y_predndarray 形状为 (n_samples,)
基于具有最佳发现参数的估计器对
X
的预测标签或值。
- predict_log_proba(X)#
调用具有最佳发现参数的估计器的predict_log_proba。
仅在
refit=True
且基础估计器支持predict_log_proba
时可用。- Parameters:
- X可索引, 长度为n_samples
必须满足基础估计器的输入假设。
- Returns:
- y_predndarray, 形状为(n_samples,)或(n_samples, n_classes)
基于具有最佳发现参数的估计器预测的
X
的类对数概率。类的顺序 对应于拟合属性中的:term:classes_
。
- predict_proba(X)#
调用具有最佳发现参数的估计器的predict_proba方法。
仅在
refit=True
且底层估计器支持predict_proba
时可用。- Parameters:
- Xindexable, length n_samples
必须满足底层估计器的输入假设。
- Returns:
- y_predndarray of shape (n_samples,) or (n_samples, n_classes)
基于具有最佳发现参数的估计器,为
X
预测的类概率。类的顺序对应于拟合属性:term:classes_
中的顺序。
- score(X, y=None, **params)#
返回给定数据的分数,如果估计器已经重新拟合。
这使用由
scoring
定义的分数(如果提供),否则使用best_estimator_.score
方法。- Parameters:
- X形状为 (n_samples, n_features) 的类数组
输入数据,其中
n_samples
是样本的数量,n_features
是特征的数量。- y形状为 (n_samples, n_output) 或 (n_samples,) 的类数组,默认=None
相对于 X 的分类或回归目标; 无监督学习则为 None。
- **paramsdict
要传递给底层评分器的参数。
- ..versionadded:: 1.4
仅在
enable_metadata_routing=True
时可用。有关更多详细信息,请参见 Metadata Routing User Guide 。
- Returns:
- scorefloat
由
scoring
定义的分数(如果提供),否则为best_estimator_.score
方法。
- score_samples(X)#
调用具有最佳发现参数的估计器的
score_samples
方法。仅在
refit=True
且底层估计器支持score_samples
时可用。Added in version 0.24.
- Parameters:
- X可迭代对象
要预测的数据。必须满足底层估计器的输入要求。
- Returns:
- y_scorendarray 形状为 (n_samples,)
底层估计器的
best_estimator_.score_samples
方法。
- set_params(**params)#
设置此估计器的参数。
该方法适用于简单估计器以及嵌套对象(例如
Pipeline
)。后者具有形式为<component>__<parameter>
的参数,以便可以更新嵌套对象的每个组件。- Parameters:
- **paramsdict
估计器参数。
- Returns:
- selfestimator instance
估计器实例。
- transform(X)#
调用具有最佳发现参数的估计器的transform方法。
仅在基础估计器支持
transform
且refit=True
时可用。- Parameters:
- Xindexable, length n_samples
必须满足基础估计器的输入假设。
- Returns:
- Xt{ndarray, sparse matrix} of shape (n_samples, n_features)
基于具有最佳发现参数的估计器,在新的空间中变换的
X
。
Gallery examples#
sphx_glr_auto_examples_model_selection_plot_successive_halving_iterations.py