隨機搜尋交叉驗證 (RandomizedSearchCV)#

class sklearn.model_selection.RandomizedSearchCV(estimator, param_distributions, *, n_iter=10, scoring=None, n_jobs=None, refit=True, cv=None, verbose=0, pre_dispatch='2*n_jobs', random_state=None, error_score=nan, return_train_score=False)[原始碼]#

對超參數進行隨機搜尋。

RandomizedSearchCV 實現了 “fit” 和 “score” 方法。 如果在使用的估計器中實現了 “score_samples”、“predict”、“predict_proba”、“decision_function”、“transform” 和 “inverse_transform”,它也實現這些方法。

用於應用這些方法的估計器參數通過交叉驗證搜尋參數設定來優化。

與 GridSearchCV 不同,不是所有參數值都會嘗試,而是從指定的分布中採樣固定數量的參數設定。嘗試的參數設定的數量由 n_iter 給出。

如果所有參數都以列表形式呈現,則執行無放回採樣。 如果至少一個參數以分布形式給出,則使用有放回採樣。 強烈建議對連續參數使用連續分布。

使用者指南中閱讀更多內容。

在版本 0.14 中加入。

參數:
estimator估計器物件

為每個網格點實例化該類型的物件。 這假定實現 scikit-learn 估計器介面。 估計器需要提供 score 函數,或者必須傳遞 scoring

param_distributions字典或字典列表

字典,以參數名稱 (str) 作為鍵,以及要嘗試的分布或參數列表。分布必須提供用於採樣的 rvs 方法 (例如來自 scipy.stats.distributions 的方法)。如果給定列表,則進行均勻採樣。如果給定字典列表,則首先均勻採樣一個字典,然後使用該字典作為上述方式採樣一個參數。

n_iterint,預設=10

採樣的參數設定數量。 n_iter 在執行時間與解決方案品質之間進行權衡。

scoringstr、可呼叫物件、list、tuple 或 dict,預設=None

評估交叉驗證模型在測試集上效能的策略。

如果 scoring 代表單個分數,則可以使用

如果 scoring 代表多個分數,則可以使用

  • 唯一字串的列表或元組;

  • 返回字典的可呼叫物件,其中鍵是度量名稱,值是度量分數;

  • 字典,其中度量名稱作為鍵,可呼叫物件作為值。

請參閱指定多個度量以進行評估以取得範例。

如果為 None,則使用估計器的 score 方法。

n_jobsint,預設=None

要平行執行的任務數。 None 表示 1,除非在 joblib.parallel_backend 內容中。-1 表示使用所有處理器。請參閱詞彙表以取得更多詳細資訊。

在版本 v0.20 中變更: n_jobs 預設值從 1 變更為 None

refitbool、str 或可呼叫物件,預設=True

在整個數據集上使用找到的最佳參數重新擬合估計器。

對於多個度量評估,這需要是 str,表示在最後將用於尋找最佳參數以重新擬合估計器的評分器。

如果選擇最佳估計器時考慮的因素不只是最大分數,則可以將 refit 設定為一個函數,該函數返回給定 cv_results_ 的選定 best_index_。在這種情況下,best_estimator_best_params_ 將根據返回的 best_index_ 進行設定,而 best_score_ 屬性將不可用。

重新擬合的估計器在 best_estimator_ 屬性中提供,並允許直接在此 RandomizedSearchCV 實例上使用 predict

同樣,對於多個度量評估,只有在設定 refit 的情況下,屬性 best_index_best_score_best_params_ 才可用,並且它們都將根據此特定評分器確定。

請參閱 scoring 參數以瞭解更多有關多個度量評估的資訊。

在版本 0.20 中變更: 新增對可呼叫物件的支援。

cvint、交叉驗證產生器或可迭代物件,預設=None

決定交叉驗證分割策略。 cv 的可能輸入為

  • None,使用預設的 5 折交叉驗證,

  • 整數,用於指定 (Stratified)KFold 中的折疊數。

  • CV 分割器,

  • 一個可迭代的對象,產生 (訓練, 測試) 分割,以索引陣列的形式呈現。

對於整數/None 輸入,如果估計器是分類器且 y 是二元或多類別,則使用 StratifiedKFold。在所有其他情況下,則使用 KFold。這些分割器會以 shuffle=False 進行實例化,因此分割在不同呼叫之間將保持一致。

請參閱 使用者指南,了解此處可以使用的各種交叉驗證策略。

在 0.22 版本中變更: 如果 cv 為 None,則 cv 的預設值從 3 折改為 5 折。

verboseint

控制詳細程度:數值越高,顯示的訊息越多。

  • >1 : 顯示每個折疊和參數候選的計算時間;

  • >2 : 也會顯示分數;

  • >3 : 除了計算的開始時間,也會顯示折疊和候選參數索引。

pre_dispatchint 或 str,預設值為 '2*n_jobs'

控制在平行執行期間分派的任務數量。當分派的任務多於 CPU 可以處理時,減少此數字有助於避免記憶體消耗爆炸。此參數可以是:

  • None,在此情況下,所有任務都會立即建立並衍生。對於輕量級和快速執行的任務,請使用此選項,以避免因按需衍生任務而導致的延遲

  • 一個整數,表示衍生的任務總數

  • 一個字串,表示 n_jobs 的函數運算式,例如 '2*n_jobs'

random_stateint、RandomState 實例或 None,預設值為 None

用於從可能的數值清單中隨機均勻採樣的虛擬亂數產生器狀態,而不是使用 scipy.stats 分佈。傳遞一個整數,以便在多個函數呼叫中產生可重複的輸出。請參閱 詞彙表

error_score’raise’ 或數值,預設值為 np.nan

如果在估計器擬合時發生錯誤,要指派給分數的值。如果設定為 'raise',則會引發錯誤。如果給定一個數值,則會引發 FitFailedWarning。此參數不會影響 refit 步驟,該步驟始終會引發錯誤。

return_train_scorebool,預設值為 False

如果 False,則 cv_results_ 屬性將不包含訓練分數。計算訓練分數可用於深入了解不同的參數設定如何影響過度擬合/欠擬合的權衡。然而,計算訓練集的分數可能在計算上很耗時,並且並非嚴格需要選取產生最佳泛化效能的參數。

在 0.19 版本中新增。

在 0.21 版本中變更: 預設值從 True 變更為 False

屬性:
cv_results_numpy (遮罩) ndarray 的字典

一個字典,其中鍵為欄標題,值為欄,可以匯入 pandas 的 DataFrame 中。

例如,以下給定的表格

param_kernel

param_gamma

split0_test_score

rank_test_score

‘rbf’

0.1

0.80

1

‘rbf’

0.2

0.84

3

‘rbf’

0.3

0.70

2

將由 cv_results_ 字典表示

{
'param_kernel' : masked_array(data = ['rbf', 'rbf', 'rbf'],
                              mask = False),
'param_gamma'  : masked_array(data = [0.1 0.2 0.3], mask = False),
'split0_test_score'  : [0.80, 0.84, 0.70],
'split1_test_score'  : [0.82, 0.50, 0.70],
'mean_test_score'    : [0.81, 0.67, 0.70],
'std_test_score'     : [0.01, 0.24, 0.00],
'rank_test_score'    : [1, 3, 2],
'split0_train_score' : [0.80, 0.92, 0.70],
'split1_train_score' : [0.82, 0.55, 0.70],
'mean_train_score'   : [0.81, 0.74, 0.70],
'std_train_score'    : [0.01, 0.19, 0.00],
'mean_fit_time'      : [0.73, 0.63, 0.43],
'std_fit_time'       : [0.01, 0.02, 0.01],
'mean_score_time'    : [0.01, 0.06, 0.04],
'std_score_time'     : [0.00, 0.00, 0.00],
'params'             : [{'kernel' : 'rbf', 'gamma' : 0.1}, ...],
}

注意

'params' 用於儲存所有參數候選的參數設定字典清單。

mean_fit_timestd_fit_timemean_score_timestd_score_time 的單位皆為秒。

對於多指標評估,所有評分器的分數都可以在 cv_results_ 字典中找到,鍵會以該評分器的名稱結尾('_<scorer_name>'),而不是上面顯示的 '_score'。(例如,'split0_test_precision'、'mean_train_precision' 等)

best_estimator_估計器

由搜尋選取的估計器,也就是在留出資料上給出最高分數(或如果已指定,則為最小損失)的估計器。如果 refit=False,則不可用。

對於多指標評估,只有在指定 refit 時,此屬性才存在。

請參閱 refit 參數,以取得有關允許值的詳細資訊。

best_score_浮點數

最佳估計器的平均交叉驗證分數。

對於多指標評估,如果 refitFalse,則此屬性不可用。請參閱 refit 參數,以取得更多資訊。

如果 refit 是函數,則此屬性不可用。

best_params_字典

在保留資料上給出最佳結果的參數設定。

對於多指標評估,如果 refitFalse,則此屬性不可用。請參閱 refit 參數,以取得更多資訊。

best_index_整數

與最佳候選參數設定對應的索引(在 cv_results_ 陣列中)。

search.cv_results_['params'][search.best_index_] 的字典提供最佳模型(給出最高平均分數 search.best_score_)的參數設定。

對於多指標評估,如果 refitFalse,則此屬性不可用。請參閱 refit 參數,以取得更多資訊。

scorer_函數或字典

在保留資料上使用的評分函數,以選擇模型的最佳參數。

對於多指標評估,此屬性會保留已驗證的 scoring 字典,該字典會將評分器鍵對應至評分器可呼叫物件。

n_splits_整數

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

refit_time_浮點數

在整個資料集上重新擬合最佳模型所用的秒數。

只有在 refit 不是 False 時,才會存在此屬性。

在 0.20 版本中新增。

multimetric_bool

評分器是否計算多個指標。

classes_形狀為 (n_classes,) 的 ndarray

類別標籤。

n_features_in_整數

fit 期間看到的特徵數量。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

fit 期間看到的特徵名稱。只有在定義 best_estimator_(請參閱 refit 參數的文件以取得更多詳細資訊)且 best_estimator_ 在擬合時公開 feature_names_in_ 時才定義。

在 1.0 版本中新增。

另請參閱

GridSearchCV

在參數網格上執行詳盡的搜尋。

ParameterSampler

一個參數設定的產生器,從 param_distributions 建構而成。

注意

選取的參數是根據評分參數最大化保留資料分數的參數。

如果 n_jobs 設定為大於 1 的值,則會複製每個參數設定的資料(而非複製 n_jobs 次)。如果個別任務耗費的時間非常少,這樣做是為了效率,但如果資料集很大且沒有足夠的記憶體可用,則可能會引發錯誤。在這種情況下的解決方法是設定 pre_dispatch。然後,記憶體只會複製 pre_dispatch 次。 pre_dispatch 的合理值為 2 * n_jobs

範例

>>> from sklearn.datasets import load_iris
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.model_selection import RandomizedSearchCV
>>> from scipy.stats import uniform
>>> iris = load_iris()
>>> logistic = LogisticRegression(solver='saga', tol=1e-2, max_iter=200,
...                               random_state=0)
>>> distributions = dict(C=uniform(loc=0, scale=4),
...                      penalty=['l2', 'l1'])
>>> clf = RandomizedSearchCV(logistic, distributions, random_state=0)
>>> search = clf.fit(iris.data, iris.target)
>>> search.best_params_
{'C': np.float64(2...), 'penalty': 'l1'}
property classes_#

類別標籤。

僅當 refit=True 且估計器為分類器時才可用。

decision_function(X)[來源]#

使用找到的最佳參數在估計器上呼叫 decision_function。

僅當 refit=True 且底層估計器支援 decision_function 時才可用。

參數:
X可索引物件,長度為 n_samples

必須符合底層估計器的輸入假設。

回傳:
y_score形狀為 (n_samples,) 或 (n_samples, n_classes) 或 (n_samples, n_classes * (n_classes-1) / 2) 的 ndarray

根據最佳參數的估計器,X 的決策函數結果。

fit(X, y=None, **params)[原始碼]#

使用所有參數組合執行 fit。

參數:
X類陣列,形狀為 (n_samples, n_features) 或 (n_samples, n_samples)

訓練向量,其中 n_samples 是樣本數,n_features 是特徵數。對於預先計算的核矩陣或距離矩陣,X 的預期形狀為 (n_samples, n_samples)。

y類陣列,形狀為 (n_samples, n_output) 或 (n_samples,),預設值為 None

相對於 X 的分類或迴歸目標;對於非監督式學習則為 None。

**paramsdict,字串 -> 物件

傳遞給估計器、評分器和 CV 分割器的 fit 方法的參數。

如果 fit 參數是一個長度等於 num_samples 的類陣列,則它將與 Xy 一起透過交叉驗證分割。例如,sample_weight 參數會被分割,因為 len(sample_weights) = len(X)。然而,此行為不適用於 groups,它會被傳遞給透過建構函式的 cv 參數設定的分割器。因此,groups 用於*執行分割*並決定哪些樣本被分配到分割的每一側。

回傳:
self物件

已擬合估計器的實例。

get_metadata_routing()[原始碼]#

取得此物件的中繼資料路由。

請查閱 使用者指南,了解路由機制的運作方式。

在 1.4 版本中新增。

回傳:
routingMetadataRouter

一個封裝路由資訊的 MetadataRouter

get_params(deep=True)[原始碼]#

取得此估計器的參數。

參數:
deep布林值,預設值為 True

如果為 True,將傳回此估計器和包含的子物件(即估計器)的參數。

回傳:
paramsdict

參數名稱對應到它們的值。

inverse_transform(X=None, Xt=None)[原始碼]#

使用最佳參數在估計器上呼叫 inverse_transform。

僅當底層估計器實作 inverse_transformrefit=True 時才可用。

參數:
X可索引物件,長度為 n_samples

必須符合底層估計器的輸入假設。

Xt可索引,長度為 n_samples

必須符合底層估計器的輸入假設。

自 1.5 版本起已棄用: Xt 在 1.5 版本中已棄用,將在 1.7 版本中移除。請改用 X

回傳:
X形狀為 (n_samples, n_features) 的 {ndarray, 稀疏矩陣}

根據最佳參數的估計器,Xtinverse_transform 函數結果。

property n_features_in_#

fit 期間看到的特徵數量。

僅當 refit=True 時才可用。

predict(X)[原始碼]#

使用最佳參數在估計器上呼叫 predict。

僅當 refit=True 且底層估計器支援 predict 時才可用。

參數:
X可索引物件,長度為 n_samples

必須符合底層估計器的輸入假設。

回傳:
y_pred形狀為 (n_samples,) 的 ndarray

根據最佳參數的估計器,X 的預測標籤或值。

predict_log_proba(X)[原始碼]#

使用最佳參數在估計器上呼叫 predict_log_proba。

僅當 refit=True 且底層估計器支援 predict_log_proba 時才可用。

參數:
X可索引物件,長度為 n_samples

必須符合底層估計器的輸入假設。

回傳:
y_pred形狀為 (n_samples,) 或 (n_samples, n_classes) 的 ndarray

根據最佳參數的估計器,X 的預測類別對數機率。類別的順序對應到已擬合屬性 classes_ 中的順序。

predict_proba(X)[原始碼]#

使用最佳參數在估計器上呼叫 predict_proba。

僅當 refit=True 且底層估計器支援 predict_proba 時才可用。

參數:
X可索引物件,長度為 n_samples

必須符合底層估計器的輸入假設。

回傳:
y_pred形狀為 (n_samples,) 或 (n_samples, n_classes) 的 ndarray

根據最佳參數的估計器,X 的預測類別機率。類別的順序對應到已擬合屬性 classes_ 中的順序。

score(X, y=None, **params)[原始碼]#

如果已重新擬合估計器,則傳回給定資料的分數。

如果提供,則使用 scoring 定義的分數,否則使用 best_estimator_.score 方法。

參數:
X類陣列,形狀為 (n_samples, n_features)

輸入資料,其中 n_samples 是樣本數,n_features 是特徵數。

y類陣列,形狀為 (n_samples, n_output) 或 (n_samples,),預設值為 None

相對於 X 的分類或迴歸目標;對於非監督式學習則為 None。

**paramsdict

要傳遞給底層評分器的參數。

在 1.4 版本中新增: 僅當 enable_metadata_routing=True 時才可用。請參閱 中繼資料路由使用者指南,以取得更多詳細資訊。

回傳:
scorefloat

如果提供,則為 scoring 定義的分數,否則為 best_estimator_.score 方法。

score_samples(X)[原始碼]#

使用最佳參數在估計器上呼叫 score_samples。

僅當 refit=True 且底層估計器支援 score_samples 時才可用。

在 0.24 版本中新增。

參數:
X可迭代

要預測的資料。必須滿足底層估計器的輸入要求。

回傳:
y_score形狀為 (n_samples,) 的 ndarray

best_estimator_.score_samples 方法。

set_params(**params)[原始碼]#

設定此估計器的參數。

此方法適用於簡單的估計器以及巢狀物件(例如 Pipeline)。後者具有 <component>__<parameter> 形式的參數,因此可以更新巢狀物件的每個元件。

參數:
**paramsdict

估計器參數。

回傳:
self估計器實例

估計器實例。

transform(X)[原始碼]#

使用找到的最佳參數對估算器執行轉換 (transform)。

僅當底層估算器支援 transformrefit=True 時才可用。

參數:
X可索引物件,長度為 n_samples

必須符合底層估計器的輸入假設。

回傳:
Xt形狀為 (n_samples, n_features) 的 {ndarray, 稀疏矩陣}

基於使用最佳參數的估算器,在新的空間中轉換的 X