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)[source]#
对超参数进行随机搜索。
RandomizedSearchCV 实现了 “fit” 和 “score” 方法。如果所使用的估计器中实现了 “score_samples”、“predict”、“predict_proba”、“decision_function”、“transform” 和 “inverse_transform”,它也会实现这些方法。
用于应用这些方法的估计器参数通过对参数设置进行交叉验证搜索来优化。
与 GridSearchCV 不同,不是所有参数值都会被尝试,而是从指定的分布中采样固定数量的参数设置。尝试的参数设置数量由 n_iter 给出。
如果所有参数都以列表形式给出,则执行无放回采样。如果至少有一个参数以分布形式给出,则使用有放回采样。强烈建议对连续参数使用连续分布。
在 用户指南 中阅读更多内容。
版本 0.14 中新增。
- 参数:
- estimator估计器对象
针对每个网格点实例化该类型的对象。假定此对象实现了 scikit-learn 估计器接口。估计器需要提供
score函数,或者必须传入scoring。- param_distributionsdict or list of dicts
字典,键为参数名称(
str),值为要尝试的分布或参数列表。分布必须提供用于采样的rvs方法(例如来自 scipy.stats.distributions)。如果给出了列表,则进行均匀采样。如果给出了字典列表,则首先均匀采样一个字典,然后使用该字典按照上述方式采样一个参数。- n_iterint, default=10
采样的参数设置数量。n_iter 在运行时和解决方案质量之间进行权衡。
- scoringstr, callable, list, tuple or dict, default=None
用于评估交叉验证模型在测试集上性能的策略。
如果
scoring代表单个分数,可以使用如果
scoring代表多个分数,可以使用一个包含唯一字符串的列表或元组;
一个返回字典的可调用对象,其中键是度量名称,值是度量分数;
一个字典,键为指标名称,值为可调用对象。
有关示例,请参见 为评估指定多个指标。
如果为 None,则使用估计器的 score 方法。
- n_jobsint, default=None
并行运行的作业数。
None表示 1,除非在joblib.parallel_backend上下文中。-1表示使用所有处理器。有关更多详细信息,请参阅 Glossary。版本 v0.20 中已更改:
n_jobs默认值从 1 更改为 None- refitbool, str, or callable, default=True
使用找到的最佳参数在整个数据集上重新拟合估计器。
对于多指标评估,这需要是一个
str,表示用于在最后重新拟合估计器时寻找最佳参数的评分器。如果在选择最佳估计器时除了最大分数之外还有其他考虑因素,可以将
refit设置为函数,该函数根据cv_results_返回选定的best_index_。在这种情况下,best_estimator_和best_params_将根据返回的best_index_设置,而best_score_属性将不可用。重新拟合的估计器在
best_estimator_属性中可用,并允许直接对此RandomizedSearchCV实例使用predict。对于多指标评估,属性
best_index_、best_score_和best_params_仅在设置了refit时才可用,并且它们都将相对于此特定评分器确定。请参阅
scoring参数以了解有关多指标评估的更多信息。请参阅 此示例,了解如何使用
refit=callable来平衡模型复杂度和交叉验证分数。版本 0.20 中更改: 增加了对可调用对象的支持。
- cvint, cross-validation generator or an iterable, default=None
确定交叉验证拆分策略。cv 的可能输入包括
None,使用默认的 5 折交叉验证,
integer,指定
(Stratified)KFold中的折数,一个可迭代对象,产生索引数组形式的 (训练集, 测试集) 拆分。
对于 integer/None 输入,如果估计器是分类器且
y是二元或多类,则使用StratifiedKFold。在所有其他情况下,使用KFold。这些分割器以shuffle=False实例化,因此拆分在不同调用中将保持相同。有关此处可使用的各种交叉验证策略,请参阅 用户指南。
版本 0.22 中已更改:如果为 None,
cv默认值从 3 折更改为 5 折。- verboseint
控制详细程度:值越高,消息越多。
>1 : 显示每个折叠和参数候选项的计算时间;
>2 : 也显示分数;
>3 : 还显示折叠和候选项参数索引以及计算的开始时间。
- pre_dispatchint, or str, default=’2*n_jobs’
控制并行执行期间调度的作业数量。当调度的作业多于 CPU 可处理的数量时,减少此数字有助于避免内存消耗激增。此参数可以为
None,在这种情况下,所有作业会立即创建和生成。对于轻量级且运行快速的作业使用此选项,以避免因按需生成作业而导致的延迟。
一个 int 值,给出生成的总作业的确切数量。
一个 str,给出 n_jobs 函数的表达式,例如 ‘2*n_jobs’。
- random_stateint, RandomState instance or None, default=None
用于从可能值列表中进行随机均匀采样的伪随机数生成器状态,而不是从 scipy.stats 分布中采样。传入一个 int 以在多次函数调用中获得可重现的输出。请参阅 词汇表。
- error_score‘raise’ or numeric, default=np.nan
如果估计器拟合中发生错误,分配给分数的值。如果设置为 'raise',则会引发错误。如果给定数字值,则会引发 FitFailedWarning。此参数不影响 refit 步骤,refit 步骤将始终引发错误。
- return_train_scorebool, default=False
如果为
False,则cv_results_属性将不包括训练分数。计算训练分数用于深入了解不同参数设置如何影响过拟合/欠拟合的权衡。然而,计算训练集上的分数可能计算成本很高,并且不是严格要求用于选择产生最佳泛化性能的参数。Added in version 0.19.
版本 0.21 中已更改:默认值从
True更改为False。
- 属性:
- cv_results_dict of numpy (masked) 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}, ...], }
有关分析
cv_results_的示例,请参阅 使用网格搜索进行模型的统计比较。注意
键
'params'用于存储所有参数候选项的参数设置字典列表。mean_fit_time、std_fit_time、mean_score_time和std_score_time都以秒为单位。对于多指标评估,所有评分器的分数都在
cv_results_字典中可用,键以该评分器的名称结尾('_<scorer_name>'),而不是上面显示的'_score'。('split0_test_precision','mean_train_precision' 等)- best_estimator_estimator
搜索选择的估计器,即在保留数据上给出最高分数(或指定最小损失)的估计器。如果
refit=False则不可用。对于多指标评估,仅在指定了
refit时才存在此属性。有关允许值的更多信息,请参阅
refit参数。- best_score_float
best_estimator 的平均交叉验证分数。
对于多指标评估,如果
refit为False,则此项不可用。有关更多信息,请参阅refit参数。如果
refit是一个函数,则此属性不可用。- best_params_dict
在保留数据上给出最佳结果的参数设置。
对于多指标评估,如果
refit为False,则此项不可用。有关更多信息,请参阅refit参数。- best_index_int
与最佳候选参数设置相对应的
cv_results_数组中的索引。search.cv_results_['params'][search.best_index_]处的字典给出了最佳模型的参数设置,该模型给出了最高平均分数(search.best_score_)。对于多指标评估,如果
refit为False,则此项不可用。有关更多信息,请参阅refit参数。- scorer_function or a dict
用于在保留数据上选择模型最佳参数的评分函数。
对于多指标评估,此属性包含经过验证的
scoring字典,该字典将评分器键映射到可调用评分器。- n_splits_int
交叉验证拆分的数量(折叠/迭代)。
- refit_time_float
用于在整个数据集上重新拟合最佳模型所花费的秒数。
仅在
refit不为 False 时存在。0.20 版本新增。
- multimetric_bool
评分器是否计算多个指标。
classes_形状为 (n_classes,) 的 ndarray类别标签。
n_features_in_int在 拟合 期间看到的特征数。
- feature_names_in_shape 为 (
n_features_in_,) 的 ndarray 在 fit 期间看到的特征名称。仅当定义了
best_estimator_(有关详细信息,请参阅refit参数的文档)并且best_estimator_在拟合时公开feature_names_in_时才定义。1.0 版本新增。
另请参阅
GridSearchCV在参数网格上执行详尽搜索。
ParameterSampler从 param_distributions 构建的参数设置的生成器。
注意事项
根据 scoring 参数,选择的参数是使保留数据分数最大化的参数。
如果
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), ... l1_ratio=[0, 1]) >>> clf = RandomizedSearchCV(logistic, distributions, random_state=0) >>> search = clf.fit(iris.data, iris.target) >>> search.best_params_ {'C': np.float64(2.195...), 'l1_ratio': 1}
- 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_samples) 的类数组对象
训练向量,其中
n_samples是样本数量,n_features是特征数量。对于预先计算的核或距离矩阵,X 的预期形状为 (n_samples, n_samples)。- y形状为 (n_samples, n_output) 或 (n_samples,) 的类数组对象, default=None
相对于 X 的分类或回归目标;对于无监督学习为 None。
- **paramsstr -> object 字典
传递给估计器、评分器和 CV 分割器的
fit方法的参数。如果拟合参数是长度等于
num_samples的类数组,则它将与X和y一起通过交叉验证进行分割。例如,sample_weight 参数被分割,因为len(sample_weights) = len(X)。然而,此行为不适用于groups,后者会传递给通过构造函数的cv参数配置的分裂器。因此,groups用于*执行分割*并确定哪些样本被分配到分割的每一侧。
- 返回:
- selfobject
已拟合估计器的实例。
- get_metadata_routing()[source]#
获取此对象的元数据路由。
请查阅 用户指南,了解路由机制如何工作。
1.4 版本新增。
- 返回:
- routingMetadataRouter
封装路由信息的
MetadataRouter。
- get_params(deep=True)[source]#
获取此估计器的参数。
- 参数:
- deepbool, default=True
如果为 True,将返回此估计器以及包含的子对象(如果它们是估计器)的参数。
- 返回:
- paramsdict
参数名称映射到其值。
- inverse_transform(X)[source]#
使用找到的最佳参数调用估计器上的 inverse_transform。
仅当底层估计器实现
inverse_transform且refit=True时可用。- 参数:
- X可索引对象,长度 n_samples
必须满足底层估计器的输入假设。
- 返回:
- X_original形状为 (n_samples, n_features) 的 {ndarray, sparse matrix}
基于具有最佳找到参数的估计器对
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方法。- 参数:
- Xshape 为 (n_samples, n_features) 的 array-like
输入数据,其中
n_samples是样本数量,n_features是特征数量。- y形状为 (n_samples, n_output) 或 (n_samples,) 的类数组对象, default=None
相对于 X 的分类或回归目标;对于无监督学习为 None。
- **paramsdict
要传递给底层评分器(s)的参数。
1.4 版本新增: 仅当
enable_metadata_routing=True时可用。有关更多详细信息,请参阅 元数据路由用户指南。
- 返回:
- scorefloat
如果提供了
scoring,则使用它定义的分数;否则使用best_estimator_.score方法。
- score_samples(X)[source]#
使用找到的最佳参数调用估计器上的 score_samples。
仅当
refit=True且底层估计器支持score_samples时可用。0.24 版本新增。
- 参数:
- Xiterable
用于预测的数据。必须满足底层估计器的输入要求。
- 返回:
- y_score形状为 (n_samples,) 的 ndarray
best_estimator_.score_samples方法。