隨機搜尋交叉驗證 (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
中的折疊數。一個可迭代的對象,產生 (訓練, 測試) 分割,以索引陣列的形式呈現。
對於整數/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_time
、std_fit_time
、mean_score_time
和std_score_time
的單位皆為秒。對於多指標評估,所有評分器的分數都可以在
cv_results_
字典中找到,鍵會以該評分器的名稱結尾('_<scorer_name>'
),而不是上面顯示的'_score'
。(例如,'split0_test_precision'、'mean_train_precision' 等)- best_estimator_估計器
由搜尋選取的估計器,也就是在留出資料上給出最高分數(或如果已指定,則為最小損失)的估計器。如果
refit=False
,則不可用。對於多指標評估,只有在指定
refit
時,此屬性才存在。請參閱
refit
參數,以取得有關允許值的詳細資訊。- best_score_浮點數
最佳估計器的平均交叉驗證分數。
對於多指標評估,如果
refit
為False
,則此屬性不可用。請參閱refit
參數,以取得更多資訊。如果
refit
是函數,則此屬性不可用。- best_params_字典
在保留資料上給出最佳結果的參數設定。
對於多指標評估,如果
refit
為False
,則此屬性不可用。請參閱refit
參數,以取得更多資訊。- best_index_整數
與最佳候選參數設定對應的索引(在
cv_results_
陣列中)。在
search.cv_results_['params'][search.best_index_]
的字典提供最佳模型(給出最高平均分數search.best_score_
)的參數設定。對於多指標評估,如果
refit
為False
,則此屬性不可用。請參閱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
的類陣列,則它將與X
和y
一起透過交叉驗證分割。例如,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_transform
且refit=True
時才可用。- 參數:
- X可索引物件,長度為 n_samples
必須符合底層估計器的輸入假設。
- Xt可索引,長度為 n_samples
必須符合底層估計器的輸入假設。
自 1.5 版本起已棄用:
Xt
在 1.5 版本中已棄用,將在 1.7 版本中移除。請改用X
。
- 回傳:
- X形狀為 (n_samples, n_features) 的 {ndarray, 稀疏矩陣}
根據最佳參數的估計器,
Xt
的inverse_transform
函數結果。
- 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
方法。