當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python sklearn HalvingRandomSearchCV用法及代碼示例


本文簡要介紹python語言中 sklearn.model_selection.HalvingRandomSearchCV 的用法。

用法:

class sklearn.model_selection.HalvingRandomSearchCV(estimator, param_distributions, *, n_candidates='exhaust', factor=3, resource='n_samples', max_resources='auto', min_resources='smallest', aggressive_elimination=False, cv=5, scoring=None, refit=True, error_score=nan, return_train_score=True, random_state=None, n_jobs=None, verbose=0)

超參數的隨機搜索。

搜索策略開始使用少量資源評估所有候選者,並使用越來越多的資源迭代地選擇最佳候選者。

候選者從參數空間中隨機抽樣,抽樣候選者的數量由n_candidates確定。

在用戶指南中閱讀更多信息。

注意

這個估計器仍然實驗目前:預測和 API 可能會在沒有任何棄用周期的情況下發生變化。要使用它,您需要顯式導入enable_halving_search_cv

>>> # explicitly require this experimental feature
>>> from sklearn.experimental import enable_halving_search_cv # noqa
>>> # now you can import normally from model_selection
>>> from sklearn.model_selection import HalvingRandomSearchCV

參數

estimator估計器對象

假設這實現了scikit-learn 估計器接口。估計器需要提供score 函數,或者必須傳遞scoring

param_distributionsdict

以參數名稱(字符串)作為鍵和分布或要嘗試的參數列表的字典。發行版必須提供 rvs 抽樣方法(例如來自 scipy.stats.distributions 的抽樣方法)。如果給出一個列表,則對其進行均勻采樣。

n_candidatesint,默認='排氣'

在第一次迭代時要采樣的候選參數的數量。使用 ‘exhaust’ 將根據 min_resourcesmax_resourcesfactor 對足夠多的候選者進行采樣,以便最後一次迭代使用盡可能多的資源。在這種情況下,min_resources 不能是‘exhaust’。

factorint 或浮點數,默認=3

‘halving’ 參數,確定每次後續迭代選擇的候選者的比例。例如,factor=3 表示隻選擇了三分之一的候選者。

resource'n_samples' 或 str,默認='n_samples'

定義隨著每次迭代而增加的資源。默認情況下,資源是樣本數。它也可以設置為接受正整數值的基本估計器的任何參數,例如‘n_iterations’ 或 ‘n_estimators’ 用於梯度提升估計器。在這種情況下,max_resources 不能是 ‘auto’,必須明確設置。

max_resources整數,默認='自動'

允許任何候選者用於給定迭代的最大資源數。默認情況下,當resource='n_samples'(默認)時設置為n_samples,否則會引發錯誤。

min_resources{‘exhaust’, ‘smallest’} 或 int,默認 ='smallest'

允許任何候選者用於給定迭代的最小資源量。等效地,這定義了在第一次迭代中為每個候選者分配的資源量r0

  • ‘smallest’ 是一種將 r0 設置為較小值的啟發式算法:

    • n_splits * 2resource='n_samples' 用於回歸問題

    • n_classes * n_splits * 2resource='n_samples' 用於分類問題

    • 1resource != 'n_samples'

  • ‘exhaust’ 將設置r0使得最後的迭代使用盡可能多的資源。也就是說,最後一次迭代將使用小於的最大值max_resources這是兩者的倍數min_resourcesfactor.通常,使用‘exhaust’ 會導致更準確的估計器,但會稍微耗時一些。 ‘exhaust’ 在以下情況下不可用n_candidates='exhaust'.

請注意,每次迭代使用的資源量始終是 min_resources 的倍數。

aggressive_elimination布爾,默認=假

這僅適用於在最後一次迭代後沒有足夠資源將剩餘候選者減少到最多 factor 的情況。如果 True ,則搜索過程將根據需要進行 ‘replay’ 第一次迭代,直到候選的數量足夠少。默認情況下這是False,這意味著最後一次迭代可能評估超過factor 候選。有關詳細信息,請參閱積極消除候選人。

cvint,交叉驗證生成器或可迭代的,默認=5

確定交叉驗證拆分策略。 cv 的可能輸入是:

  • 整數,指定 (Stratified)KFold 中的折疊數,
  • CV分配器,
  • 一個可迭代的 yield (train, test) 拆分為索引數組。

對於整數/無輸入,如果估計器是分類器並且y 是二進製或多類,則使用 StratifiedKFold 。在所有其他情況下,使用 KFold 。這些拆分器使用 shuffle=False 實例化,因此拆分在調用之間將是相同的。

有關可在此處使用的各種交叉驗證策略,請參閱用戶指南。

注意

由於實現細節,cv 產生的折疊在多次調用 cv.split() 時必須相同。對於內置的 scikit-learn 迭代器,這可以通過停用改組 (shuffle=False) 或將 cvrandom_state 參數設置為整數來實現。

scoringstr,可調用,或無,默認=無

單個字符串(參見評分參數:定義模型評估規則)或可調用的(見從度量函數定義你的評分策略) 來評估對測試集的預測。如果沒有,則使用估計器的評分方法。

refit布爾,默認=真

如果為真,則使用整個數據集上找到的最佳參數重新擬合估計器。

重新安裝的估計器在best_estimator_ 屬性中可用,並允許直接在此HalvingRandomSearchCV 實例上使用predict

error_score‘raise’ 或數字

如果在估計器擬合中發生錯誤,則分配給分數的值。如果設置為‘raise’,則會引發錯誤。如果給出數值,則引發FitFailedWarning。此參數不影響改裝步驟,這將始終引發錯誤。默認為 np.nan

return_train_score布爾,默認=假

如果 False ,則 cv_results_ 屬性將不包括訓練分數。計算訓練分數用於深入了解不同的參數設置如何影響過擬合/欠擬合權衡。然而,在訓練集上計算分數可能在計算上很昂貴,並且不嚴格要求選擇產生最佳泛化性能的參數。

random_stateint、RandomState 實例或無,默認=無

resources != 'n_samples' 時用於對數據集進行二次采樣的偽隨機數生成器狀態。也用於從可能值列表而不是 scipy.stats 分布中隨機均勻抽樣。傳遞 int 以獲得跨多個函數調用的可重現輸出。請參閱詞匯表。

n_jobsint 或無,默認=無

並行運行的作業數。 None 表示 1,除非在 joblib.parallel_backend 上下文中。 -1 表示使用所有處理器。有關詳細信息,請參閱詞匯表。

verboseint

控製詳細程度:越高,消息越多。

屬性

n_resources_int列表

每次迭代使用的資源量。

n_candidates_int列表

在每次迭代中評估的候選參數的數量。

n_remaining_candidates_int

最後一次迭代後剩餘的候選參數的數量。它對應於ceil(n_candidates[-1] / factor)

max_resources_int

允許任何候選者用於給定迭代的最大資源數。請注意,由於每次迭代使用的資源數量必須是 min_resources_ 的倍數,因此最後一次迭代使用的實際資源數量可能小於 max_resources_

min_resources_int

在第一次迭代中為每個候選者分配的資源量。

n_iterations_int

實際運行的迭代次數。這等於 n_required_iterations_ 如果 aggressive_eliminationTrue 。否則,這等於 min(n_possible_iterations_, n_required_iterations_)

n_possible_iterations_int

min_resources_ 資源開始且不超過 max_resources_ 的可能迭代次數。

n_required_iterations_int

在最後一次迭代中以少於 factor 的候選者結束所需的迭代次數,從 min_resources_ 資源開始。當沒有足夠的資源時,這將小於n_possible_iterations_

cv_results_numpy(屏蔽)ndarrays的字典

一個帶有鍵作為列標題和值作為列的字典,可以導入到 pandas DataFrame 中。它包含大量用於分析搜索結果的信息。詳情請參閱用戶指南。

best_estimator_估計器或聽寫器

搜索選擇的估計器,即在遺漏數據上給出最高分數(或最小損失,如果指定)的估計器。如果 refit=False 則不可用。

best_score_浮點數

best_estimator 的平均 cross-validated 得分。

best_params_dict

在保留數據上給出最佳結果的參數設置。

best_index_int

對應於最佳候選參數設置的索引(cv_results_ 數組)。

search.cv_results_['params'][search.best_index_] 處的 dict 給出了最佳模型的參數設置,它給出了最高的平均分數 (search.best_score_)。

scorer_函數或字典

用於保留數據的記分器函數為模型選擇最佳參數。

n_splits_int

交叉驗證拆分(折疊/迭代)的數量。

refit_time_浮點數

用於在整個數據集上重新擬合最佳模型的秒數。

僅當 refit 不為 False 時才存在。

multimetric_bool

記分員是否計算多個指標。

classes_ndarray 形狀 (n_classes,)

類標簽。

n_features_in_int

擬合期間看到的特征數。

feature_names_in_ndarray 形狀(n_features_in_,)

擬合期間看到的特征名稱。僅在定義了 best_estimator_ 時才定義(有關更多詳細信息,請參閱 refit 參數的文檔)並且 best_estimator_ 在適合時公開 feature_names_in_

注意

根據評分參數,選擇的參數是使held-out 數據的評分最大化的參數。

例子

>>> from sklearn.datasets import load_iris
>>> from sklearn.ensemble import RandomForestClassifier
>>> from sklearn.experimental import enable_halving_search_cv  # noqa
>>> from sklearn.model_selection import HalvingRandomSearchCV
>>> from scipy.stats import randint
>>> import numpy as np
...
>>> X, y = load_iris(return_X_y=True)
>>> clf = RandomForestClassifier(random_state=0)
>>> np.random.seed(0)
...
>>> param_distributions = {"max_depth": [3, None],
...                        "min_samples_split": randint(2, 11)}
>>> search = HalvingRandomSearchCV(clf, param_distributions,
...                                resource='n_estimators',
...                                max_resources=10,
...                                random_state=0).fit(X, y)
>>> search.best_params_  
{'max_depth': None, 'min_samples_split': 10, 'n_estimators': 9}

相關用法


注:本文由純淨天空篩選整理自scikit-learn.org大神的英文原創作品 sklearn.model_selection.HalvingRandomSearchCV。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。