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 的模型上增量搜索超参数
此增量超参数优化类开始在一个少量数据上训练许多超参数的模型,然后只继续训练那些表现良好的模型。
有关更多信息,请参阅用户指南。
- 参数
- estimator估计器对象。
为每个初始超参数组合实例化该类型的对象。假设此对象实现了 scikit-learn 估计器接口。估计器需要提供一个
score
函数,或者必须传递scoring
。估计器必须实现partial_fit
、set_params
,并且与clone
配合良好。- parametersdict
字典,键为参数名称 (string),值为要尝试的分布或参数列表。分布必须提供一个用于采样的
rvs
方法(例如 scipy.stats.distributions 中的方法)。如果给定列表,则进行均匀采样。- n_initial_parametersint, default=10
采样的参数设置数量。这权衡了运行时和解决方案质量。
或者,您可以将其设置为
"grid"
以执行完整的网格搜索。- decay_ratefloat, default 1.0
减少未来部分拟合调用次数的速度。
自 v1.4.0 版本起已弃用: 此使用
decay_rate
的自适应算法实现已移至InverseDecaySearchCV
。- patienceint, default False
如果指定,当得分在
patience
次partial_fit
调用后没有提高tol
时停止训练。默认关闭。- fits_per_scoreint, optional, default=1
如果使用
patience
,这是在两次score
调用之间最大允许的partial_fit
调用次数。- scores_per_fitint, default 1
如果使用
patience
,这是在两次score
调用之间最大允许的partial_fit
调用次数。自 v1.4.0 版本起已弃用: 已重命名为
fits_per_score
。- tolfloat, default 0.001
停止训练该模型所需改进的水平。最近的得分必须比该模型在前
patience
次得分中的所有得分至少好tol
。增加tol
通常会减少训练时间,但代价是模型可能变差。- max_iterint, default 100
每个模型的部分拟合调用的最大次数。
- test_sizefloat
用于计算测试得分的数据集分数。默认为输入训练集单个分区的尺寸。
注意
训练数据集应能装入单个机器的内存中。根据需要调整
test_size
参数以达到此目的。- random_stateint, RandomState instance 或 None, optional, default: None
如果为 int,random_state 用作随机数生成器的种子;如果为 RandomState 实例,random_state 为随机数生成器;如果为 None,则使用
np.random
的 RandomState 实例作为随机数生成器。- scoringstring, callable, list/tuple, dict 或 None, default: None
单个字符串(参见评分参数:定义模型评估规则)或一个可调用函数(参见评分)用于评估在测试集上的预测结果。
要评估多个指标,请提供一个由(唯一)字符串组成的列表,或者一个键为名称、值为可调用函数的字典。
注意:使用自定义评分器时,每个评分器应返回一个单一值。返回列表/数组值的指标函数可以包装成多个评分器,每个返回一个值。
参见为评估指定多个指标了解示例。
如果为 None,则使用估计器的默认评分器(如果可用)。
- verbosebool, float, int, optional, default: False
如果为 False(默认),不打印日志(或将其输出到标准输出)。但是,仍将使用标准日志记录。
如果为 True,打印日志并使用标准日志记录。
如果为 float,大约每隔
verbose
时间打印/记录一次。- prefixstr, optional, default=””
日志记录时,在每条消息前添加
prefix
。- predict_meta: pd.Series, pd.DataFrame, np.array deafult: None(infer)
一个空的
pd.Series
、pd.DataFrame
、np.array
,其类型与估计器predict
调用的输出类型匹配。此元数据对于某些估计器与dask.dataframe
和dask.array
配合使用是必需的。- predict_proba_meta: pd.Series, pd.DataFrame, np.array deafult: None(infer)
一个空的
pd.Series
、pd.DataFrame
、np.array
,其类型与估计器predict_proba
调用的输出类型匹配。此元数据对于某些估计器与dask.dataframe
和dask.array
配合使用是必需的。- transform_meta: pd.Series, pd.DataFrame, np.array deafult: None(infer)
一个空的
pd.Series
、pd.DataFrame
、np.array
,其类型与估计器transform
调用的输出类型匹配。此元数据对于某些估计器与dask.dataframe
和dask.array
配合使用是必需的。
- 属性
- cv_results_dict of 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}
,其中key
是params
中的每个键。
test_score
键中的值对应于模型在保留数据集上获得的最后得分。model_id
键对应于history_
。此字典可以导入到 Pandas 中。- model_history_dict of lists of dict
每个模型历史的字典。这是对
history_
的重组:信息相同但按模型组织。此数据结构为
{model_id: hist}
,其中hist
是history_
的子集,model_id
是模型标识符。- history_list of dicts
每次
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_float
在最后一次
partial_fit
调用后,best_estimator_
在验证集上获得的得分。- best_index_int
指示
cv_results_
中哪个估计器对应最高得分的索引。- best_params_dict
在保留数据上找到的最佳参数字典。
- scorer_
用于评估模型的函数,其调用签名为
scorer_(estimator, X, y)
。- n_splits_int
交叉验证分割的数量。
- multimetric_bool
此交叉验证搜索是否使用多个指标。
示例
连接到客户端并创建数据
>>> 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)
通常,在训练结束时,额外的训练只会带来很少或没有得分的提升。在这种情况下,停止训练是有益的,因为更多的训练没有收益,而且所需的计算量更少。有两个参数控制检测“很少或没有收益”:
patience
和tol
。如果在最近的patience
次model.partial_fit
调用中至少有一个得分比其他得分高出tol
,训练将继续。例如,设置
tol=0
和patience=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)¶