用法:
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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。