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)#
随机搜索超参数。
RandomizedSearchCV 实现了 “fit” 和 “score” 方法。 它还实现了 “score_samples”、”predict”、”predict_proba”、 “decision_function”、”transform” 和 “inverse_transform”,如果它们在使用的估计器中实现的话。
通过参数设置的交叉验证搜索来优化应用这些方法的估计器的参数。
与 GridSearchCV 不同,不是尝试所有参数值,而是从指定的分布中采样固定数量的参数设置。尝试的参数设置数量由 n_iter 给出。
如果所有参数都以列表形式呈现,则进行无放回抽样。如果至少有一个参数以分布形式给出,则使用有放回抽样。强烈建议对连续参数使用连续分布。
更多信息请参阅 用户指南 。
Added in version 0.14.
- Parameters:
- estimator估计器对象
为每个网格点实例化的对象。 这假设实现了 scikit-learn 估计器接口。 估计器需要提供一个
score
函数, 或者必须传递scoring
。- param_distributions字典或字典列表
带有参数名称 (
str
) 作为键的字典,以及要尝试的参数分布或列表。分布必须提供一个rvs
方法用于抽样(如 scipy.stats.distributions 中的那些)。如果给出一个列表,则均匀抽样。 如果给出一个字典列表,首先均匀抽样一个字典,然后使用该字典如上所述抽样参数。- n_iterint, default=10
采样的参数设置数量。n_iter 权衡运行时间与解决方案的质量。
- scoringstr, callable, list, tuple 或 dict, default=None
策略来评估交叉验证模型在测试集上的性能。
如果
scoring
表示单个分数,可以使用:单个字符串(见 scoring_parameter );
一个返回单个值的 callable(见 从指标函数定义您的评分策略 )。
如果
scoring
表示多个分数,可以使用:唯一字符串的列表或元组;
一个返回字典的 callable,其中键是指标名称,值是指标分数;
一个以指标名称为键、callable 为值的字典。
见 指定多个度量标准进行评估 示例。
如果为 None,则使用估计器的 score 方法。
- n_jobsint, default=None
并行运行的作业数量。
None
表示 1,除非在joblib.parallel_backend
上下文中。-1
表示使用所有处理器。更多详情见 Glossary 。Changed in version v0.20:
n_jobs
默认值从 1 改为 None- refitbool, str, 或 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
参数了解更多关于多指标评估的信息。Changed in version 0.20: 添加了对 callable 的支持。
- cvint, 交叉验证生成器或可迭代对象, default=None
确定交叉验证拆分策略。 cv 的可能输入包括:
None,使用默认的 5 折交叉验证,
整数,指定
(Stratified)KFold
中的折数,一个可迭代对象,产生 (train, test) 拆分作为索引数组。
对于整数/None 输入,如果估计器是分类器且
y
是二分类或多分类,则使用StratifiedKFold
。在所有其他情况下,使用KFold
。这些拆分器以shuffle=False
实例化,因此拆分将在多次调用中保持一致。参考 用户指南 了解可以使用的各种交叉验证策略。
Changed in version 0.22:
cv
默认值如果为 None 从 3 折改为 5 折。- verboseint
控制冗长:越高,消息越多。
>1 : 显示每个折和参数候选的计算时间;
>2 : 还显示分数;
>3 : 还显示折和候选参数索引以及计算的开始时间。
- pre_dispatchint, 或 str, default=’2*n_jobs’
控制并行执行期间调度的作业数量。减少此数量在更多作业被调度时可以避免内存爆炸,而 CPU 无法处理。此参数可以是:
None,在这种情况下,所有作业立即创建并派生。对于轻量级和快速运行的作业,使用此选项以避免按需派生作业的延迟
一个整数,给出派生的总作业的确切数量
一个字符串,给出作为 n_jobs 函数的表达式,如 ‘2*n_jobs’
- random_stateint, RandomState 实例或 None, default=None
用于从可能值列表中随机均匀抽样的伪随机数生成器状态,而不是 scipy.stats 分布。传递一个 int 以在多次函数调用中获得可重复的输出。 见 Glossary 。
- error_score‘raise’ 或 numeric, default=np.nan
在估计器拟合过程中发生错误时分配给分数的值。如果设置为 ‘raise’,则引发错误。如果给出一个数值,则引发 FitFailedWarning。此参数不影响重新拟合步骤,重新拟合步骤将始终引发错误。
- return_train_scorebool, default=False
如果
False
,cv_results_
属性将不包括训练分数。 计算训练分数用于了解不同参数设置如何影响过拟合/欠拟合权衡。然而,在训练集上计算分数在计算上可能是昂贵的,并且严格来说不是选择产生最佳泛化性能的参数所必需的。Added in version 0.19.
Changed in version 0.21: 默认值从
True
改为False
- Attributes:
- cv_results_字典形式的 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}, ...], }
注意
键
'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_估计器
由搜索选择的估计器,即在留出数据上给出最高分数(或最小损失,如果指定)的估计器。如果
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_函数或字典
用于在留出数据上选择最佳参数的评分器函数。
对于多指标评估,此属性持有验证的
scoring
字典,该字典将评分器键映射到评分器 callable。- n_splits_int
交叉验证拆分(折/迭代)的数量。
- refit_time_float
在全数据集上重新拟合最佳模型所用的秒数。
仅在
refit
不为 False 时存在。Added in version 0.20.
- 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
GridSearchCV
对参数网格进行详尽搜索。
ParameterSampler
从 param_distributions 构建的参数设置生成器。
Notes
选择的参数是那些根据 scoring 参数最大化留出数据分数的参数。
如果
n_jobs
设置为大于 1 的值,则每个参数设置的数据都会被复制(而不是n_jobs
倍)。如果单个作业时间非常短,这出于效率原因这样做,但如果数据集大且内存不足,则可能会引发错误。在这种情况下,设置pre_dispatch
是一个解决方法。合理的pre_dispatch
值是2 * n_jobs
。Examples
>>> 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), ... penalty=['l2', 'l1']) >>> clf = RandomizedSearchCV(logistic, distributions, random_state=0) >>> search = clf.fit(iris.data, iris.target) >>> search.best_params_ {'C': 2..., 'penalty': 'l1'}
- 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:
- X形状为 (n_samples, n_features) 的类数组
训练向量,其中
n_samples
是样本的数量,n_features
是特征的数量。- y形状为 (n_samples, n_output) 或 (n_samples,) 的类数组,默认=None
相对于 X 用于分类或回归的目标; 无监督学习时为 None。
- **params字典,键为字符串,值为对象
传递给估计器的
fit
方法、评分器和 CV 分割器的参数。如果一个拟合参数是一个数组,其长度等于
num_samples
,那么它将与X
和y
一起在 CV 组中分割。例如,sample_weight 参数被分割 因为len(sample_weights) = len(X)
。
- Returns:
- self对象
已拟合的估计器实例。
- 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
。