本文简要介绍python语言中 sklearn.model_selection.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”,它还实现了它们。
用于应用这些方法的估计器的参数通过 cross-validated 搜索参数设置进行优化。
与 GridSearchCV 相比,并非所有参数值都被尝试,而是从指定分布中采样固定数量的参数设置。尝试的参数设置数量由 n_iter 给出。
如果所有参数都以列表形式呈现,则执行无替换采样。如果至少有一个参数作为分布给出,则使用带放回抽样。强烈建议对连续参数使用连续分布。
在用户指南中阅读更多信息。
- estimator:估计器对象
为每个网格点实例化该类型的对象。假设这实现了scikit-learn 估计器接口。估计器需要提供
score
函数,或者必须传递scoring
。- param_distributions:字典或字典列表
以参数名称 (
str
) 作为键和分布或要尝试的参数列表的字典。发行版必须提供rvs
抽样方法(例如来自 scipy.stats.distributions 的抽样方法)。如果给出一个列表,则对其进行均匀采样。如果给定一个字典列表,首先对字典进行均匀采样,然后使用该字典对参数进行采样,如上所述。- n_iter:整数,默认=10
采样的参数设置数。 n_iter 权衡运行时间与解决方案的质量。
- scoring:str, callable, list, tuple or dict, default=None
评估cross-validated模型在测试集上的性能的策略。
如果
scoring
表示单个分数,则可以使用:- 单个字符串(参见评分参数:定义模型评估规则);
- 一个可调用的(见从度量函数定义你的评分策略) 返回单个值。
如果
scoring
代表多个分数,可以使用:- 唯一字符串的列表或元组;
- 一个可调用的返回一个字典,其中键是指标名称,值是指标分数;
- 以度量名称作为键和可调用值的字典。
有关示例,请参阅指定多个指标进行评估。
如果没有,则使用估计器的评分方法。
- n_jobs:整数,默认=无
并行运行的作业数。
None
表示 1,除非在joblib.parallel_backend
上下文中。-1
表示使用所有处理器。有关详细信息,请参阅词汇表。- refit:bool, str, or callable, default=True
使用整个数据集上找到的最佳参数重新拟合估计器。
对于多指标评估,这需要是一个
str
,表示将用于找到最后重新拟合估计器的最佳参数的记分器。在选择最佳估计器时除了最大分数之外还有其他考虑因子,可以将
refit
设置为返回所选best_index_
给定cv_results
的函数。在这种情况下,best_estimator_
和best_params_
将根据返回的best_index_
设置,而best_score_
属性将不可用。重新安装的估计器在
best_estimator_
属性中可用,并允许直接在此RandomizedSearchCV
实例上使用predict
。此外,对于多指标评估,属性
best_index_
、best_score_
和best_params_
仅在设置了refit
时可用,并且所有这些属性都将根据这个特定的记分器来确定。请参阅
scoring
参数以了解有关多指标评估的更多信息。- cv:int,交叉验证生成器或可迭代的,默认=无
确定交叉验证拆分策略。 cv 的可能输入是:
- 无,使用默认的 5 折交叉验证,
- 整数,指定
(Stratified)KFold
中的折叠数, - CV分配器,
- 一个可迭代的 yield (train, test) 拆分为索引数组。
对于整数/无输入,如果估计器是分类器并且
y
是二进制或多类,则使用StratifiedKFold
。在所有其他情况下,使用KFold
。这些拆分器使用shuffle=False
实例化,因此拆分在调用之间将是相同的。有关可在此处使用的各种交叉验证策略,请参阅用户指南。
- verbose:int
控制详细程度:越高,消息越多。
- pre_dispatch:int 或 str,默认 ='2*n_jobs'
控制在并行执行期间分派的作业数。当调度的作业多于 CPU 可以处理的数量时,减少此数字有助于避免内存消耗的爆炸式增长。该参数可以是:
无,在这种情况下,所有作业都会立即创建和生成。将此用于轻量级和 fast-running 作业,以避免由于生成作业 on-demand 造成的延迟
一个 int,给出产生的总作业的确切数量
一个 str,给出一个表达式作为 n_jobs 的函数,如 ‘2*n_jobs’
- random_state:int、RandomState 实例或无,默认=无
伪随机数生成器状态用于从可能值列表中随机均匀抽样,而不是 scipy.stats 分布。传递 int 以获得跨多个函数调用的可重现输出。请参阅词汇表。
- error_score:‘raise’ 或数字,默认=np.nan
如果在估计器拟合中发生错误,则分配给分数的值。如果设置为‘raise’,则会引发错误。如果给出数值,则引发FitFailedWarning。此参数不影响改装步骤,这将始终引发错误。
- return_train_score:布尔,默认=假
如果
False
,则cv_results_
属性将不包括训练分数。计算训练分数用于深入了解不同的参数设置如何影响过拟合/欠拟合权衡。然而,在训练集上计算分数可能在计算上很昂贵,并且不严格要求选择产生最佳泛化性能的参数。
- cv_results_:numpy(屏蔽)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}, ...], }
NOTE
键
'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_:浮点数
best_estimator 的平均 cross-validated 得分。
对于多指标评估,如果
refit
是False
则不可用。有关详细信息,请参阅refit
参数。如果
refit
是函数,则此属性不可用。- best_params_:dict
在保留数据上给出最佳结果的参数设置。
对于多指标评估,如果
refit
是False
则不可用。有关详细信息,请参阅refit
参数。- best_index_:int
对应于最佳候选参数设置的索引(
cv_results_
数组)。search.cv_results_['params'][search.best_index_]
处的 dict 给出了最佳模型的参数设置,它给出了最高的平均分数 (search.best_score_
)。对于多指标评估,如果
refit
是False
则不可用。有关详细信息,请参阅refit
参数。- scorer_:函数或字典
用于保留数据的记分器函数为模型选择最佳参数。
对于多指标评估,此属性包含经过验证的
scoring
dict,它将记分器键映射到记分器可调用。- n_splits_:int
交叉验证拆分(折叠/迭代)的数量。
- refit_time_:浮点数
用于在整个数据集上重新拟合最佳模型的秒数。
仅当
refit
不为 False 时才存在。- multimetric_:bool
记分员是否计算多个指标。
classes_
ndarray 形状 (n_classes,)类标签。
n_features_in_
int拟合期间看到的特征数。
- feature_names_in_:ndarray 形状(
n_features_in_
,) 拟合期间看到的特征名称。仅在定义了
best_estimator_
时才定义(有关更多详细信息,请参阅refit
参数的文档)并且best_estimator_
在适合时公开feature_names_in_
。
参数:
属性:
注意:
根据评分参数,选择的参数是使held-out 数据的评分最大化的参数。
如果
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), ... penalty=['l2', 'l1']) >>> clf = RandomizedSearchCV(logistic, distributions, random_state=0) >>> search = clf.fit(iris.data, iris.target) >>> search.best_params_ {'C': 2..., 'penalty': 'l1'}
相关用法
- Python sklearn RandomTreesEmbedding用法及代码示例
- Python sklearn RandomForestClassifier用法及代码示例
- Python sklearn RandomForestRegressor用法及代码示例
- Python sklearn RadiusNeighborsTransformer用法及代码示例
- Python sklearn RadiusNeighborsRegressor.radius_neighbors_graph用法及代码示例
- Python sklearn RadiusNeighborsClassifier用法及代码示例
- Python sklearn RadiusNeighborsTransformer.radius_neighbors_graph用法及代码示例
- Python sklearn RadiusNeighborsRegressor用法及代码示例
- Python sklearn RadiusNeighborsTransformer.radius_neighbors用法及代码示例
- Python sklearn RadiusNeighborsRegressor.radius_neighbors用法及代码示例
- Python sklearn RadiusNeighborsClassifier.radius_neighbors_graph用法及代码示例
- Python sklearn RadiusNeighborsClassifier.radius_neighbors用法及代码示例
- Python sklearn RationalQuadratic用法及代码示例
- Python sklearn RocCurveDisplay用法及代码示例
- Python sklearn RFE用法及代码示例
- Python sklearn RidgeCV用法及代码示例
- Python sklearn RegressorChain用法及代码示例
- Python sklearn RANSACRegressor用法及代码示例
- Python sklearn RobustScaler用法及代码示例
- Python sklearn RepeatedStratifiedKFold用法及代码示例
- Python sklearn RocCurveDisplay.from_estimator用法及代码示例
- Python sklearn RBF用法及代码示例
- Python sklearn Ridge用法及代码示例
- Python sklearn RocCurveDisplay.from_predictions用法及代码示例
- Python sklearn RidgeClassifierCV用法及代码示例
注:本文由纯净天空筛选整理自scikit-learn.org大神的英文原创作品 sklearn.model_selection.RandomizedSearchCV。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。