当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python dask_ml.model_selection.HyperbandSearchCV用法及代码示例


用法:

class dask_ml.model_selection.HyperbandSearchCV(estimator, parameters, max_iter=81, aggressiveness=3, patience=False, tol=0.001, test_size=None, random_state=None, scoring=None, verbose=False, prefix='', predict_meta=None, predict_proba_meta=None, transform_meta=None)

使用自适应交叉验证算法为特定模型找到最佳参数。

通过花费更多时间训练 high-performing 估计器 [1],Hyperband 将在给定的计算预算 * 下找到接近最佳可能参数。这意味着 Hyperband 会停止训练表现不佳的估计器 - 从本质上讲,Hyperband 是 RandomizedSearchCV 的早期停止方案。

Hyperband 不需要像 RandomizedSearchCV 那样在“短时间内评估多个参数”和“长时间训练几个参数”之间进行权衡。

Hyperband 需要一个输入,这需要知道通过 max_iter 训练最佳性能的估计器需要多长时间。另一个隐式输入(Dask 阵列卡盘尺寸)需要粗略估计要采样的参数数量。规格细节在注释中。

*

partial_fit 调用之后,Hyperband 产生的估计器将接近 partial_fit 调用可能产生的最佳估计器(其中 “close” 表示“在预期最佳可能得分的对数项内”)。

参数

estimator估计器对象。

为每个超参数组合实例化该类型的对象。假设这实现了scikit-learn 估计器接口。估计器需要提供score 函数,或者必须传递scoring。估计器必须实现 partial_fitset_params ,并与 clone 一起工作。

parametersdict

以参数名称(字符串)作为键和分布或要尝试的参数列表的字典。发行版必须提供 rvs 抽样方法(例如来自 scipy.stats.distributions 的抽样方法)。如果给出一个列表,则对其进行均匀采样。

max_iterint

partial_fit 调用任何一个模型的最大数量。这应该是模型收敛所需的partial_fit 调用次数。有关设置此参数的详细信息,请参见注释。

aggressiveness整数,默认=3

在剔除不同的估计者方面有多积极。较高的值意味着对评分的置信度较高(或超参数对 estimator.score 的影响大于数据)。理论表明aggressiveness=3 接近最优。 aggressiveness=4 具有较高的置信度,可能适合初始探索。

patience整数,默认为假

如果指定,则在 patience 调用 partial_fit 后分数没有增加 tol 时训练停止。默认关闭。如果 patience=True 与 Hyperband 模型选择算法配合良好,则会自动选择 patience 值。

tol浮点数,默认 0.001

指定patience 时考虑停止对该模型的训练所需的改进级别。增加tol 将倾向于以(可能)更差的估计器为代价来减少训练时间。

test_size浮点数

用于计算测试/验证分数的数据集分数。默认为输入训练集的单个分区的大小。

注意

测试数据集应该适合单台机器的内存。根据需要调整test_size 参数以实现此目的。

random_stateint,RandomState 实例或 None,可选,默认值:None

如果是int,random_state是随机数生成器使用的种子;如果RandomState实例,random_state是随机数生成器;如果为 None,则随机数生成器是 np.random 使用的 RandomState 实例。

scoring字符串,可调用,列表/元组,字典或无,默认值:无

单个字符串(参见评分参数:定义模型评估规则)或可调用的(见从度量函数定义你的评分策略) 来评估对测试集的预测。

如果没有,则使用估计器的默认记分器(如果可用)。

verbosebool,float,int,可选,默认值:False

如果为 False(默认),则不打印日志(或将它们通过管道传输到标准输出)。但是,仍将使用标准日志记录。

如果为 True,则打印日志并使用标准日志记录。

如果浮点数,打印/记录大约 verbose 部分时间。

prefixstr,可选,默认=””

记录时,将prefix 添加到每条消息。

predict_meta: pd.Series, pd.DataFrame, np.array deafult: None(infer)

与估计器 predict 调用的输出类型匹配的空 pd.Seriespd.DataFramenp.array 。对于某些估算器使用 dask.dataframedask.array 而言,此元是必需的

predict_proba_meta: pd.Series, pd.DataFrame, np.array deafult: None(infer)

与估计器 predict_proba 调用的输出类型匹配的空 pd.Seriespd.DataFramenp.array 。对于某些估算器使用 dask.dataframedask.array 而言,此元是必需的

transform_meta: pd.Series, pd.DataFrame, np.array deafult: None(infer)

与估计器 transform 调用的输出类型匹配的空 pd.Seriespd.DataFramenp.array 。对于某些估算器使用 dask.dataframedask.array 而言,此元是必需的

属性

metadata and metadata_dict[str, Union(int, dict)]

这些字典说明了在 metadata 进行计算之前或在 metadata_ 进行计算之后执行的计算。这些字典都有键

  • n_models ,一个 int 表示将创建/创建多少模型。

  • partial_fit_calls ,一个 int 代表多少次

    partial_fit 将被/被调用。

  • brackets ,Hyperband 运行的括号列表。每个括号具有不同的训练时间重要性和超参数重要性值。除了 n_modelspartial_fit_calls 之外,此列表中的每个元素都有键

    • bracket ,一个 int 括号 ID。每个括号对应于不同级别的训练时间重要性。对于括号 0,训练时间很重要。对于最高级别,训练时间并不重要,模型会被积极地杀死。

    • SuccessiveHalvingSearchCV params ,用于创建不同括号的字典。它不包括estimatorparameters 参数。

    • decisionspartial_fit 调用 Hyperband 在做出决定之前进行的次数。

如果未指定patience,则这些字典相同。如果指定了patience,则可能会执行较少的训练,而metadata_ 将反映这一点(尽管metadata 不会)。

cv_results_字典[str, np.ndarray]

说明每个模型执行情况的字典。它包含有关每个模型的信息,无论它是否达到 max_iter 。它有钥匙

  • mean_partial_fit_time
  • mean_score_time
  • std_partial_fit_time
  • std_score_time
  • test_score
  • rank_test_score
  • model_id
  • partial_fit_calls
  • params
  • param_{key} ,其中 {key}params 中的每个键。
  • bracket

test_score 键中的值对应于模型在保留数据集上收到的最后一个分数。键 model_id 对应于 history_ 。该字典可以导入到 Pandas DataFrame 中。

model_id 中,括号 ID 前缀对应于 metadata 中的括号。括号 0 根本不适应以前的训练;较高的值对应于更多的适应。

history_字典列表

每次partial_fit 调用后有关每个模型的信息。每个 dict 键

  • partial_fit_time
  • score_time
  • score
  • model_id
  • params
  • partial_fit_calls
  • elapsed_wall_time

model_id 对应于 cv_results_ 中的 model_id。这个字典列表可以导入到 Pandas 中。

model_history_字典列表的字典

每个模型历史的字典。这是 history_ 的重组:存在相同的信息,但按模型组织。

该数据具有 {model_id: [h1, h2, h3, ...]} 结构,其中 h1h2h3history_ 的元素,而 model_id 是模型 ID,如 cv_results_

best_estimator_BaseEstimator

由 Hyperband 模型选择算法选择的具有最高验证分数的模型。

best_score_浮点数

最终调用 partial_fit 后,best_estimator_ 在验证集上获得的分数。

best_index_int

指示cv_results_ 中哪个估计器对应于最高分数的索引。

best_params_dict

hold-out 数据中找到的最佳参数字典。

scorer_ :

用于对模型进行评分的函数,其调用签名为 scorer_(estimator, X, y)

注意

要设置 max_iterXy 的块大小,需要估计

  • 至少一个模型将看到的示例数量(n_examples)。如果最长的训练模型需要 10 次遍历数据,n_examples = 10 * len(X)
  • 要采样多少个 hyper-parameter 组合(n_params)

这些可能是粗略的猜测。要确定块大小和 max_iter

  1. 让块大小为chunk_size = n_examples / n_params

  2. max_iter = n_params

然后,每个估算器看到的示例不超过 max_iter * chunk_size = n_examples。 Hyperband 实际上会比 n_examples 采样更多的 hyper-parameter 组合(这就是为什么粗略的猜测就足够了)。例如,假设

  • 大约 200 或 300 个 hyper-parameters 需要测试才能有效搜索可能的 hyper-parameters
  • 模型需要多于 50 * len(X) 示例但少于 100 * len(X) 示例。

让我们决定提供81 * len(X) 示例并采样 243 个参数。然后每个块将是数据集和 max_iter=243 的 1/3。

如果您使用 HyperbandSearchCV ,请使用 [2] 的引用

@InProceedings{sievert2019better,
    author    = {Scott Sievert and Tom Augspurger and Matthew Rocklin},
    title     = {{B}etter and faster hyperparameter optimization with {D}ask},
    booktitle = {{P}roceedings of the 18th {P}ython in {S}cience {C}onference},
    pages     = {118 - 125},
    year      = {2019},
    editor    = {Chris Calloway and David Lippa and Dillon Niederhut and David Shupe},  # noqa
    doi       = {10.25080/Majora-7ddc1dd1-011}
  }

参考

1

“Hyperband:一种新颖的基于强盗的超参数优化方法”,L. Li、K. Jamieson、G. DeSalvo、A. Rostamizadeh 和 A. Talwalkar 于 2016 年出版。 https://arxiv.org/abs/1603.06560

2

“使用 Dask 进行更好更快的超参数优化”,S. Sievert、T. Augspurger、M. Rocklin 于 2018 年出版。 https://doi.org/10.25080/Majora-7ddc1dd1-011

例子

>>> import numpy as np
>>> from dask_ml.model_selection import HyperbandSearchCV
>>> from dask_ml.datasets import make_classification
>>> from sklearn.linear_model import SGDClassifier
>>>
>>> X, y = make_classification(chunks=20)
>>> est = SGDClassifier(tol=1e-3)
>>> param_dist = {'alpha': np.logspace(-4, 0, num=1000),
>>>               'loss': ['hinge', 'log', 'modified_huber', 'squared_hinge'],
>>>               'average': [True, False]}
>>>
>>> search = HyperbandSearchCV(est, param_dist)
>>> search.fit(X, y, classes=np.unique(y))
>>> search.best_params_
{'loss': 'log', 'average': False, 'alpha': 0.0080502}

相关用法


注:本文由纯净天空筛选整理自dask.org大神的英文原创作品 dask_ml.model_selection.HyperbandSearchCV。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。