dask_ml.model_selection.RandomizedSearchCV
dask_ml.model_selection
.RandomizedSearchCV¶
- class dask_ml.model_selection.RandomizedSearchCV(estimator, param_distributions, n_iter=10, random_state=None, scoring=None, iid=True, refit=True, cv=None, error_score='raise', return_train_score=False, scheduler=None, n_jobs=- 1, cache_cv=True)¶
超参数的随机搜索。
RandomizedSearchCV 实现了“fit”和“score”方法。如果使用的估计器中实现了“predict”、“predict_proba”、“decision_function”、“transform”和“inverse_transform”,它也会实现这些方法。
用于应用这些方法的估计器的参数通过对参数设置进行交叉验证搜索来优化。
与 GridSearchCV 不同,RandomizedSearchCV 不会尝试所有参数值,而是从指定的分布中采样固定数量的参数设置。尝试的参数设置数量由 n_iter 给出。
如果所有参数都以列表形式呈现,则执行无放回采样。如果至少有一个参数以分布形式给出,则使用有放回采样。强烈建议对连续参数使用连续分布。
- 参数
- estimator估计器对象。
为每个参数实例化此类型的对象。假设它实现了 scikit-learn 估计器接口。估计器需要提供一个
score
函数,或者必须传递scoring
。如果给定一个字典列表,首先均匀采样一个字典,然后像上面那样使用该字典采样一个参数。- param_distributions字典
字典,其中参数名称(字符串)作为键,分布或参数列表作为值。分布必须提供一个
rvs
方法用于采样(例如 scipy.stats.distributions 中的那些)。如果给定列表,则均匀采样。- n_iter整数,默认值=10
采样的参数设置数量。n_iter 是运行时和解决方案质量之间的权衡。
- random_state整数或 RandomState
用于从可能的取值列表中而不是 scipy.stats 分布中进行随机均匀采样的伪随机数生成器状态。传递一个整数以在多次函数调用中获得可复现的输出。
- scoring字符串、可调用对象、列表/元组、字典或 None,默认值:None
用于评估测试集上预测的单个字符串或可调用对象。
对于评估多个指标,可以提供唯一的字符串列表或以名称为键、以可调用对象为值的字典。
注意:使用自定义评分器时,每个评分器应返回单个值。返回列表/数组值的指标函数可以包装成多个评分器,每个评分器返回一个值。
如果为 None,则使用估计器的默认评分器(如果可用)。
- iid布尔值,默认值=True
如果为 True,则假设数据在各折叠中是独立同分布的(identically distributed),并且最小化的损失是每个样本的总损失,而不是跨折叠的平均损失。
- cv整数、交叉验证生成器或可迭代对象,可选
确定交叉验证的分割策略。cv 的可能输入包括
None,使用默认的 3 折交叉验证,
整数,指定
(Stratified)KFold
中的折叠数量,用作交叉验证生成器的对象。
生成 (训练, 测试) 分割作为索引数组的可迭代对象。
对于整数/None 输入,如果估计器是分类器且
y
是二分类或多分类,则使用StratifiedKFold
。在所有其他情况下,使用KFold
。- refit布尔值或字符串,默认值=True
使用在整个数据集上找到的最佳参数重新拟合估计器。
对于多指标评估,这需要是一个字符串,表示用于在最后寻找最佳参数以重新拟合估计器的评分器。
重新拟合的估计器可在
best_estimator_
属性中获得,并允许直接在此GridSearchCV
实例上使用predict
。对于多指标评估,只有当
refit
设置时,属性best_index_
、best_score_
和best_parameters_
才可用,并且它们都将相对于此特定评分器确定。有关多指标评估的更多信息,请参阅
scoring
参数。- error_score'raise' (默认) 或 数值
如果在估计器拟合过程中发生错误,则分配给评分的值。如果设置为 'raise',则会引发错误。如果给定数值,则会引发 FitFailedWarning。此参数不影响重新拟合步骤,该步骤始终会引发错误。
- return_train_score布尔值,默认值=True
如果为
'False'
,则cv_results_
属性将不包含训练集评分。计算训练集评分用于了解不同参数设置如何影响过拟合/欠拟合的权衡。然而,在训练集上计算评分可能计算成本较高,并且对于选择能产生最佳泛化性能的参数并非严格必需。请注意,对于 scikit-learn >= 0.19.1,默认值
True
已弃用,并且在未明确要求训练集评分的情况下访问训练集评分结果时将引发警告。- scheduler字符串、可调用对象、Client 或 None,默认值=None
要使用的 dask 调度器。默认是如果设置了全局调度器则使用全局调度器,否则回退到线程调度器。要使用不同的调度器,可以按名称指定(“threading”、“multiprocessing”或“synchronous”),传递一个
dask.distributed.Client
,或提供一个调度器get
函数。- n_jobs整数,默认值=-1
并行运行的作业数。对于同步和分布式调度器无效。如果
n_jobs == -1
[默认],则使用所有 CPU。对于n_jobs < -1
,则使用(n_cpus + 1 + n_jobs)
个 CPU。- cache_cv布尔值,默认值=True
是否在每个 worker 进程中最多提取一次训练/测试子集,还是每次需要该子集时都提取。缓存分割可以加快计算速度,但会增加每个 worker 进程的内存使用。
如果为 True,最坏情况下的内存使用是每个 worker
(n_splits + 1) * (X.nbytes + y.nbytes)
。如果为 False,最坏情况下的内存使用是每个 worker(n_threads_per_worker + 1) * (X.nbytes + y.nbytes)
。
- 属性
- cv_results_numpy (masked) ndarrays 的字典
字典,以列标题作为键,以列作为值,可以导入到 pandas
DataFrame
中。例如,下表
param_kernel
param_gamma
param_degree
split0_test_score
…
rank…..
‘poly’
–
2
0.8
…
2
‘poly’
–
3
0.7
…
4
‘rbf’
0.1
–
0.8
…
3
‘rbf’
0.2
–
0.9
…
1
将由
cv_results_
字典表示,如下所示:{ 'param_kernel': masked_array(data = ['poly', 'poly', 'rbf', 'rbf'], mask = [False False False False]...) 'param_gamma': masked_array(data = [-- -- 0.1 0.2], mask = [ True True False False]...), 'param_degree': masked_array(data = [2.0 3.0 -- --], mask = [False False True True]...), 'split0_test_score' : [0.8, 0.7, 0.8, 0.9], 'split1_test_score' : [0.82, 0.5, 0.7, 0.78], 'mean_test_score' : [0.81, 0.60, 0.75, 0.82], 'std_test_score' : [0.02, 0.01, 0.03, 0.03], 'rank_test_score' : [2, 4, 3, 1], 'split0_train_score' : [0.8, 0.7, 0.8, 0.9], 'split1_train_score' : [0.82, 0.7, 0.82, 0.5], 'mean_train_score' : [0.81, 0.7, 0.81, 0.7], 'std_train_score' : [0.03, 0.04, 0.03, 0.03], 'mean_fit_time' : [0.73, 0.63, 0.43, 0.49], 'std_fit_time' : [0.01, 0.02, 0.01, 0.01], 'mean_score_time' : [0.007, 0.06, 0.04, 0.04], 'std_score_time' : [0.001, 0.002, 0.003, 0.005], 'params' : [{'kernel': 'poly', 'degree': 2}, ...], }
请注意,键
'params'
用于存储所有参数候选项的参数设置字典列表。mean_fit_time
、std_fit_time
、mean_score_time
和std_score_time
均以秒为单位。- best_estimator_估计器
由搜索选定的估计器,即在保留数据上给出最高评分(或最小损失,如果指定)的估计器。如果 refit=False 则不可用。
- best_score_浮点数或浮点数字典
best_estimator 在保留数据上的评分。使用多个指标时,
best_score_
将是一个字典,其中键是评分器的名称,值是该评分器的平均测试评分。- best_params_字典
在保留数据上给出最佳结果的参数设置。
- best_index_整数或整数字典
对应于最佳候选项参数设置的索引(在
cv_results_
数组中)。位于
search.cv_results_['params'][search.best_index_]
的字典提供了最佳模型的参数设置,该设置给出了最高的平均评分(search.best_score_
)。使用多个指标时,
best_index_
将是一个字典,其中键是评分器的名称,值是该评分器获得最佳平均评分的索引,如上所述。- scorer_函数或函数字典
用于在保留数据上为模型选择最佳参数的评分函数。使用多个指标时,是一个
{评分器名称: 评分器}
的字典。- n_splits_整数
交叉验证分割(折叠/迭代)的数量。
注意
选择的参数是那些最大化保留数据评分的参数,除非传递了显式评分,此时使用该评分代替。
示例
>>> import dask_ml.model_selection as dcv >>> from scipy.stats import expon >>> from sklearn import svm, datasets >>> iris = datasets.load_iris() >>> parameters = {'C': expon(scale=100), 'kernel': ['linear', 'rbf']} >>> svc = svm.SVC() >>> clf = dcv.RandomizedSearchCV(svc, parameters, n_iter=100) >>> clf.fit(iris.data, iris.target) RandomizedSearchCV(cache_cv=..., cv=..., error_score=..., estimator=SVC(C=..., cache_size=..., class_weight=..., coef0=..., decision_function_shape=..., degree=..., gamma=..., kernel=..., max_iter=..., probability=..., random_state=..., shrinking=..., tol=..., verbose=...), iid=..., n_iter=..., n_jobs=..., param_distributions=..., random_state=..., refit=..., return_train_score=..., scheduler=..., scoring=...) >>> sorted(clf.cv_results_.keys()) ['mean_fit_time', 'mean_score_time', 'mean_test_score',... 'mean_train_score', 'param_C', 'param_kernel', 'params',... 'rank_test_score', 'split0_test_score',... 'split0_train_score', 'split1_test_score', 'split1_train_score',... 'split2_test_score', 'split2_train_score',... 'std_fit_time', 'std_score_time', 'std_test_score', 'std_train_score'...]
方法
decision_function
(X)在找到最佳参数的估计器上调用 decision_function。
fit
(X[, y, groups])使用所有参数集运行 fit。
get_metadata_routing
()获取此对象的元数据路由。
get_params
([deep])获取此估计器的参数。
inverse_transform
(Xt)在找到最佳参数的估计器上调用 inverse_transform。
predict
(X)在找到最佳参数的估计器上调用 predict。
predict_log_proba
(X)在找到最佳参数的估计器上调用 predict_log_proba。
predict_proba
(X)在找到最佳参数的估计器上调用 predict_proba。
score
(X[, y])返回给定数据上的评分,前提是估计器已重新拟合。
set_fit_request
(*[, groups])请求传递给
fit
方法的元数据。set_params
(**params)设置此估计器的参数。
transform
(X)在找到最佳参数的估计器上调用 transform。
visualize
([filename, format])使用
graphviz
渲染此参数搜索的任务图。- __init__(estimator, param_distributions, n_iter=10, random_state=None, scoring=None, iid=True, refit=True, cv=None, error_score='raise', return_train_score=False, scheduler=None, n_jobs=- 1, cache_cv=True)¶