dask_ml.model_selection.IncrementalSearchCV

dask_ml.model_selection.IncrementalSearchCV

class dask_ml.model_selection.IncrementalSearchCV(estimator, parameters, n_initial_parameters=10, decay_rate=<object object>, test_size=None, patience=False, tol=0.001, fits_per_score=1, max_iter=100, random_state=None, scoring=None, verbose=False, prefix='', scores_per_fit=None, predict_meta=None, predict_proba_meta=None, transform_meta=None)[源代码]

在支持 partial_fit 的模型上逐步搜索超参数

这个增量超参数优化类首先在少量数据上使用多个超参数训练模型,然后只继续训练那些表现良好的模型。

更多信息请参见 用户指南

参数
估计器估计器对象。

每个初始超参数组合都会实例化该类型的一个对象。假设这实现了 scikit-learn 估计器接口。估计器需要提供一个 score 函数,或者必须传递 scoring。估计器必须实现 partial_fitset_params,并且能够与 clone 良好配合。

参数dict

包含参数名称(字符串)作为键和要尝试的分布或参数列表的字典。分布必须提供用于采样的 rvs 方法(例如来自 scipy.stats.distributions 的那些)。如果给定一个列表,则均匀采样。

n_initial_parametersint, 默认=10

采样的参数设置数量。这需要在运行时间和解决方案质量之间进行权衡。

或者,您可以将此设置为 "grid" 以进行完整的网格搜索。

衰减率float, 默认值 1.0

减少部分未来适应调用次数的速度。

v1.4.0 版后已移除: 这个使用 decay_rate 的自适应算法实现已经移至 InverseDecaySearchCV

耐心int, 默认 False

如果指定,当分数在 patience 次调用 partial_fit 后没有增加 tol 时,训练将停止。默认关闭。

fits_per_scoreint, 可选, 默认=1

如果使用 patience ,则在 score 调用之间 partial_fit 调用的最大次数。

每次拟合的分数int, 默认值为 1

如果使用 patience ,则在 score 调用之间 partial_fit 调用的最大次数。

v1.4.0 版后已移除: 重命名为 fits_per_score

tolfloat, 默认值 0.001

考虑停止对该模型训练所需的改进水平。最新分数必须最多比该模型的所有先前 patience 分数好 tol。增加 tol 往往会减少训练时间,但代价是模型性能更差。

max_iterint, 默认 100

每个模型的部分拟合调用最大次数。

test_size浮动

用于计算测试分数的数据集部分。默认为输入训练集单个分区的尺寸。

备注

训练数据集应能适应单台机器的内存。根据需要调整 test_size 参数以实现这一点。

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

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

评分字符串, 可调用对象, 列表/元组, 字典 或 None, 默认: None

一个单一的字符串(参见 The scoring parameter: defining model evaluation rules)或一个可调用的对象(参见 Defining your scoring strategy from metric functions),用于评估测试集上的预测。

对于评估多个指标,可以提供一个字符串列表(唯一)或一个字典,其中键为名称,值为可调用对象。

注意,当使用自定义评分器时,每个评分器应返回一个单一值。返回值列表/数组的度量函数可以包装成多个评分器,每个评分器返回一个值。

参见 Specifying multiple metrics for evaluation 示例。

如果为 None,则使用估计器的默认评分器(如果可用)。

详细bool, float, int, optional, default: False

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

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

如果是浮点数,则大约在 verbose 的时间比例内打印/记录。

前缀str, 可选, 默认=””

在记录日志时,为每条消息添加 prefix

predict_meta: pd.Series, pd.DataFrame, np.array 默认: None(推断)

一个空的 pd.Seriespd.DataFramenp.array,与估计器的 predict 调用的输出类型匹配。这对于某些估计器与 dask.dataframedask.array 一起工作是必要的。

predict_proba_meta: pd.Series, pd.DataFrame, np.array 默认: None(推断)

一个空的 pd.Seriespd.DataFramenp.array,与估计器的 predict_proba 调用的输出类型匹配。对于某些估计器与 dask.dataframedask.array 一起工作,此元数据是必要的。

transform_meta: pd.Series, pd.DataFrame, np.array 默认: None(推断)

一个空的 pd.Seriespd.DataFramenp.array,与估计器的 transform 调用的输出类型匹配。这对于某些估计器与 dask.dataframedask.array 一起工作是必要的。

属性
cv_results_np.ndarrays 的字典

这个字典有键

  • 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} ,其中 keyparams 中的每一个键。

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

model_history_字典列表的字典

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

这些数据具有 {model_id: hist} 的结构,其中 histhistory_ 的子集,而 model_id 是模型标识符。

history_字典列表

每次 partial_fit 调用后每个模型的信息。每个字典的键

  • partial_fit_time

  • score_time

  • score

  • model_id

  • params

  • partial_fit_calls

  • elapsed_wall_time

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

best_estimator_BaseEstimator

在“逆衰减”算法保留的所有模型中,验证得分最高的模型。

best_score_浮动

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

最佳索引_整数

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

best_params_dict

在保留数据上找到的最佳参数的字典。

scorer_

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

n_splits_整数

交叉验证的分裂次数。

multimetric_布尔

此交叉验证搜索是否使用多个指标。

示例

连接到客户端并创建数据

>>> from dask.distributed import Client
>>> client = Client()
>>> import numpy as np
>>> from dask_ml.datasets import make_classification
>>> X, y = make_classification(n_samples=5000000, n_features=20,
...                            chunks=100000, random_state=0)

我们的底层估计器是一个 SGDClassifier。我们为估计器的每个克隆指定一些通用参数。

>>> from sklearn.linear_model import SGDClassifier
>>> model = SGDClassifier(tol=1e-3, penalty='elasticnet', random_state=0)

我们将从中采样的参数分布。

>>> params = {'alpha': np.logspace(-2, 1, num=1000),
...           'l1_ratio': np.linspace(0, 1, num=1000),
...           'average': [True, False]}
>>> search = IncrementalSearchCV(model, params, random_state=0)
>>> search.fit(X, y, classes=[0, 1])
IncrementalSearchCV(...)

或者,您可以提供关键词以开始使用更多超参数,但停止那些似乎不会随着更多数据而改善的参数。

>>> search = IncrementalSearchCV(model, params, random_state=0,
...                              n_initial_parameters=1000,
...                              patience=20, max_iter=100)

通常,额外的训练在训练结束时会导致分数几乎没有或没有增加。在这些情况下,停止训练是有益的,因为更多的训练没有带来收益,并且所需的计算量更少。两个参数控制检测“几乎没有或没有收益”:patiencetol。如果在最近的 patience 次调用 model.partial_fit 中,至少有一个分数比其他分数高出 tol 以上,则训练继续。

例如,设置 tol=0patience=2 意味着在两次连续调用 model.partial_fit 没有改进后,或者在达到 max_iter 次总调用 model.partial_fit 时,训练将停止。

方法

decision_function(X)

fit(X[, y])

找到特定模型的最佳参数。

get_metadata_routing()

获取此对象的元数据路由。

get_params([deep])

获取此估计器的参数。

inverse_transform(Xt)

predict(X)

预测 X。

predict_log_proba(X)

概率估计的日志。

predict_proba(X)

概率估计。

score(X[, y])

返回给定数据的分数。

set_params(**params)

设置此估计器的参数。

set_score_request(*[, compute])

传递给 score 方法的请求元数据。

transform(X)

对dask输入进行块转换或分区转换。

partial_fit

__init__(estimator, parameters, n_initial_parameters=10, decay_rate=<object object>, test_size=None, patience=False, tol=0.001, fits_per_score=1, max_iter=100, random_state=None, scoring=None, verbose=False, prefix='', scores_per_fit=None, predict_meta=None, predict_proba_meta=None, transform_meta=None)[源代码]