用法:
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_fit
,set_params
,并与clone
一起工作。- parameters:dict
以参数名称(字符串)作为键和分布或要尝试的参数列表的字典。发行版必须提供
rvs
抽样方法(例如来自 scipy.stats.distributions 的抽样方法)。如果给出一个列表,则对其进行均匀采样。- max_iter:int
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_state:int,RandomState 实例或 None,可选,默认值:None
如果是int,random_state是随机数生成器使用的种子;如果RandomState实例,random_state是随机数生成器;如果为 None,则随机数生成器是
np.random
使用的 RandomState 实例。- scoring:字符串,可调用,列表/元组,字典或无,默认值:无
单个字符串(参见评分参数:定义模型评估规则)或可调用的(见从度量函数定义你的评分策略) 来评估对测试集的预测。
如果没有,则使用估计器的默认记分器(如果可用)。
- verbose:bool,float,int,可选,默认值:False
如果为 False(默认),则不打印日志(或将它们通过管道传输到标准输出)。但是,仍将使用标准日志记录。
如果为 True,则打印日志并使用标准日志记录。
如果浮点数,打印/记录大约
verbose
部分时间。- prefix:str,可选,默认=””
记录时,将
prefix
添加到每条消息。- predict_meta: pd.Series, pd.DataFrame, np.array deafult: None(infer):
与估计器
predict
调用的输出类型匹配的空pd.Series
、pd.DataFrame
、np.array
。对于某些估算器使用dask.dataframe
和dask.array
而言,此元是必需的- predict_proba_meta: pd.Series, pd.DataFrame, np.array deafult: None(infer):
与估计器
predict_proba
调用的输出类型匹配的空pd.Series
、pd.DataFrame
、np.array
。对于某些估算器使用dask.dataframe
和dask.array
而言,此元是必需的- transform_meta: pd.Series, pd.DataFrame, np.array deafult: None(infer):
与估计器
transform
调用的输出类型匹配的空pd.Series
、pd.DataFrame
、np.array
。对于某些估算器使用dask.dataframe
和dask.array
而言,此元是必需的
- metadata and metadata_:dict[str, Union(int, dict)]
这些字典说明了在
metadata
进行计算之前或在metadata_
进行计算之后执行的计算。这些字典都有键n_models
,一个 int 表示将创建/创建多少模型。partial_fit_calls
,一个 int 代表多少次partial_fit
将被/被调用。
brackets
,Hyperband 运行的括号列表。每个括号具有不同的训练时间重要性和超参数重要性值。除了n_models
和partial_fit_calls
之外,此列表中的每个元素都有键bracket
,一个 int 括号 ID。每个括号对应于不同级别的训练时间重要性。对于括号 0,训练时间很重要。对于最高级别,训练时间并不重要,模型会被积极地杀死。SuccessiveHalvingSearchCV params
,用于创建不同括号的字典。它不包括estimator
或parameters
参数。decisions
,partial_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, ...]}
结构,其中h1
、h2
和h3
是history_
的元素,而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_iter
和X
和y
的块大小,需要估计- 至少一个模型将看到的示例数量(
n_examples
)。如果最长的训练模型需要 10 次遍历数据,n_examples = 10 * len(X)
。 - 要采样多少个 hyper-parameter 组合(
n_params
)
这些可能是粗略的猜测。要确定块大小和
max_iter
,让块大小为
chunk_size = n_examples / n_params
让
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}
相关用法
- Python dask_ml.model_selection.GridSearchCV用法及代码示例
- Python dask_ml.model_selection.train_test_split用法及代码示例
- Python dask_ml.model_selection.IncrementalSearchCV用法及代码示例
- Python dask_ml.model_selection.RandomizedSearchCV用法及代码示例
- Python dask_ml.metrics.mean_squared_log_error用法及代码示例
- Python dask_ml.metrics.r2_score用法及代码示例
- Python dask_ml.metrics.mean_squared_error用法及代码示例
- Python dask_ml.metrics.accuracy_score用法及代码示例
- Python dask_ml.metrics.mean_absolute_error用法及代码示例
- Python dask_ml.metrics.log_loss用法及代码示例
- Python dask_ml.wrappers.ParallelPostFit用法及代码示例
- Python dask_ml.feature_extraction.text.CountVectorizer用法及代码示例
- Python dask_ml.preprocessing.MinMaxScaler用法及代码示例
- Python dask_ml.preprocessing.Categorizer用法及代码示例
- Python dask_ml.linear_model.LinearRegression用法及代码示例
- Python dask_ml.preprocessing.BlockTransformer用法及代码示例
- Python dask_ml.wrappers.Incremental用法及代码示例
- Python dask_ml.preprocessing.OrdinalEncoder用法及代码示例
- Python dask_ml.feature_extraction.text.FeatureHasher用法及代码示例
- Python dask_ml.preprocessing.LabelEncoder用法及代码示例
- Python dask_ml.compose.ColumnTransformer用法及代码示例
- Python dask_ml.ensemble.BlockwiseVotingClassifier用法及代码示例
- Python dask_ml.decomposition.PCA用法及代码示例
- Python dask_ml.feature_extraction.text.HashingVectorizer用法及代码示例
- Python dask_ml.preprocessing.PolynomialFeatures用法及代码示例
注:本文由纯净天空筛选整理自dask.org大神的英文原创作品 dask_ml.model_selection.HyperbandSearchCV。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。