HalvingGridSearchCV#
- class sklearn.model_selection.HalvingGridSearchCV(estimator, param_grid, *, factor=3, resource='n_samples', max_resources='auto', min_resources='exhaust', 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]#
使用逐次减半对指定参数值进行搜索。
搜索策略首先使用少量资源评估所有候选者,然后逐步选择最佳候选者,并使用越来越多的资源。
在用户指南中阅读更多内容。
注意
此估计器目前仍处于**实验阶段**:其预测和 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 HalvingGridSearchCV
- 参数:
- estimator估计器对象
假设此估计器实现了 scikit-learn 估计器接口。估计器需要提供一个
score
函数,或者必须传入scoring
参数。- param_grid字典或字典列表
字典,以参数名称(字符串)为键,以要尝试的参数设置列表为值;或者此类字典的列表,在这种情况下,将探索列表中每个字典所涵盖的网格。这使得可以搜索任何参数设置序列。
- 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, 默认值为 'exhaust'
任何候选者在给定迭代中允许使用的最小资源量。等效地,这定义了在第一次迭代中为每个候选者分配的资源量
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”会得到更准确的估计器,但会稍微更耗时。
请注意,每次迭代中使用的资源量始终是
min_resources
的倍数。- aggressive_eliminationbool, 默认值为 False
这仅在资源不足以将剩余候选者在最后一次迭代后减少到最多
factor
的情况下相关。如果为True
,则搜索过程将“重播”第一次迭代,直到候选者数量足够小。默认情况下为False
,这意味着最后一次迭代可能会评估超过factor
个候选者。有关更多详细信息,请参阅候选者的激进消除。- cvint, 交叉验证生成器或可迭代对象, 默认值为 5
确定交叉验证的拆分策略。
cv
的可能输入包括整数,指定
(Stratified)KFold
中的折叠数量,一个可迭代对象,生成作为索引数组的 (训练, 测试) 拆分。
对于整数/None 输入,如果估计器是分类器且
y
是二分类或多分类,则使用StratifiedKFold
。在所有其他情况下,使用KFold
。这些拆分器实例化时shuffle=False
,因此在多次调用中拆分将相同。有关此处可使用的各种交叉验证策略,请参阅用户指南。
注意
由于实现细节,
cv
生成的折叠在多次调用cv.split()
时必须相同。对于内置的scikit-learn
迭代器,这可以通过禁用洗牌(shuffle=False
)或将cv
的random_state
参数设置为整数来实现。- scoringstr 或 callable, 默认值为 None
用于评估测试集预测的评分方法。
- refitbool 或 callable, 默认值为 True
使用在整个数据集上找到的最佳参数重新拟合估计器。
如果选择最佳估计器时除了最高分数之外还有其他考虑因素,
refit
可以设置为一个函数,该函数根据cv_results_
返回选定的best_index_
。在这种情况下,best_estimator_
和best_params_
将根据返回的best_index_
设置,而best_score_
属性将不可用。重新拟合的估计器在
best_estimator_
属性中可用,并允许直接在此HalvingGridSearchCV
实例上使用predict
。有关如何使用
refit=callable
来平衡模型复杂度和交叉验证分数的示例,请参阅此示例。- error_score'raise' 或 numeric
如果估计器拟合过程中发生错误,则分配给分数的值。如果设置为“raise”,则会引发错误。如果给定数值,则引发 `FitFailedWarning`。此参数不影响重新拟合步骤,重新拟合步骤始终会引发错误。默认值为
np.nan
。- return_train_scorebool, 默认值为 False
如果为
False
,则cv_results_
属性将不包含训练分数。计算训练分数用于深入了解不同参数设置如何影响过拟合/欠拟合的权衡。然而,计算训练集上的分数可能计算成本很高,并且不是严格要求选择产生最佳泛化性能的参数。- random_stateint, RandomState 实例或 None, 默认值为 None
当
resources != 'n_samples'
时,用于数据集子采样的伪随机数生成器状态。否则忽略。传入一个整数可在多次函数调用中获得可重现的输出。请参阅术语表。- 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_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_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_函数或字典
用于保留数据以选择模型最佳参数的评分函数。
- n_splits_int
交叉验证拆分(折叠/迭代)的数量。
- refit_time_float
用于在整个数据集上重新拟合最佳模型所花费的秒数。
仅当
refit
不为 `False` 时存在。- multimetric_bool
评分器是否计算多个指标。
classes_
形状为 (n_classes,) 的 ndarray类别标签。
n_features_in_
int拟合期间看到的特征数量。
- feature_names_in_形状为 (
n_features_in_
,) 的 ndarray 拟合期间看到的特征名称。仅当
best_estimator_
已定义(有关详细信息,请参阅refit
参数的文档)并且best_estimator_
在拟合时公开feature_names_in_
时才定义。在 1.0 版本中新增。
另请参阅
HalvingRandomSearchCV
使用逐次减半对一组参数进行随机搜索。
注意
选择的参数是根据评分参数,在保留数据上最大化分数的那些。
所有得分 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 HalvingGridSearchCV ... >>> X, y = load_iris(return_X_y=True) >>> clf = RandomForestClassifier(random_state=0) ... >>> param_grid = {"max_depth": [3, None], ... "min_samples_split": [5, 10]} >>> search = HalvingGridSearchCV(clf, param_grid, 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]#
获取此估计器的参数。
- 参数:
- deepbool, 默认值为 True
如果为 `True`,将返回此估计器以及其中包含的估计器子对象的参数。
- 返回:
- paramsdict
映射到其值的参数名称。
- inverse_transform(X)[source]#
在具有最佳找到参数的估计器上调用
inverse_transform
。仅当底层估计器实现
inverse_transform
且refit=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
,则使用scoring
定义的分数;否则,使用best_estimator_.score
方法。- 参数:
- X形状为 (n_samples, n_features) 的数组类
输入数据,其中
n_samples
是样本数量,n_features
是特征数量。- y形状为 (n_samples, n_output) 或 (n_samples,) 的数组类,默认值为 None
相对于
X
的目标,用于分类或回归;无监督学习为 None。- **paramsdict
将传递给底层评分器。
在 1.4 版本中新增: 仅当
enable_metadata_routing=True
时可用。有关详细信息,请参阅元数据路由用户指南。
- 返回:
- scorefloat
如果提供了
scoring
,则为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
方法。