本文簡要介紹python語言中 sklearn.model_selection.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”,它還實現了它們。
用於應用這些方法的估計器的參數通過 cross-validated 搜索參數設置進行優化。
與 GridSearchCV 相比,並非所有參數值都被嘗試,而是從指定分布中采樣固定數量的參數設置。嘗試的參數設置數量由 n_iter 給出。
如果所有參數都以列表形式呈現,則執行無替換采樣。如果至少有一個參數作為分布給出,則使用帶放回抽樣。強烈建議對連續參數使用連續分布。
在用戶指南中閱讀更多信息。
- estimator:估計器對象
為每個網格點實例化該類型的對象。假設這實現了scikit-learn 估計器接口。估計器需要提供
score
函數,或者必須傳遞scoring
。- param_distributions:字典或字典列表
以參數名稱 (
str
) 作為鍵和分布或要嘗試的參數列表的字典。發行版必須提供rvs
抽樣方法(例如來自 scipy.stats.distributions 的抽樣方法)。如果給出一個列表,則對其進行均勻采樣。如果給定一個字典列表,首先對字典進行均勻采樣,然後使用該字典對參數進行采樣,如上所述。- n_iter:整數,默認=10
采樣的參數設置數。 n_iter 權衡運行時間與解決方案的質量。
- scoring:str, callable, list, tuple or dict, default=None
評估cross-validated模型在測試集上的性能的策略。
如果
scoring
表示單個分數,則可以使用:- 單個字符串(參見評分參數:定義模型評估規則);
- 一個可調用的(見從度量函數定義你的評分策略) 返回單個值。
如果
scoring
代表多個分數,可以使用:- 唯一字符串的列表或元組;
- 一個可調用的返回一個字典,其中鍵是指標名稱,值是指標分數;
- 以度量名稱作為鍵和可調用值的字典。
有關示例,請參閱指定多個指標進行評估。
如果沒有,則使用估計器的評分方法。
- n_jobs:整數,默認=無
並行運行的作業數。
None
表示 1,除非在joblib.parallel_backend
上下文中。-1
表示使用所有處理器。有關詳細信息,請參閱詞匯表。- refit:bool, str, or callable, default=True
使用整個數據集上找到的最佳參數重新擬合估計器。
對於多指標評估,這需要是一個
str
,表示將用於找到最後重新擬合估計器的最佳參數的記分器。在選擇最佳估計器時除了最大分數之外還有其他考慮因子,可以將
refit
設置為返回所選best_index_
給定cv_results
的函數。在這種情況下,best_estimator_
和best_params_
將根據返回的best_index_
設置,而best_score_
屬性將不可用。重新安裝的估計器在
best_estimator_
屬性中可用,並允許直接在此RandomizedSearchCV
實例上使用predict
。此外,對於多指標評估,屬性
best_index_
、best_score_
和best_params_
僅在設置了refit
時可用,並且所有這些屬性都將根據這個特定的記分器來確定。請參閱
scoring
參數以了解有關多指標評估的更多信息。- cv:int,交叉驗證生成器或可迭代的,默認=無
確定交叉驗證拆分策略。 cv 的可能輸入是:
- 無,使用默認的 5 折交叉驗證,
- 整數,指定
(Stratified)KFold
中的折疊數, - CV分配器,
- 一個可迭代的 yield (train, test) 拆分為索引數組。
對於整數/無輸入,如果估計器是分類器並且
y
是二進製或多類,則使用StratifiedKFold
。在所有其他情況下,使用KFold
。這些拆分器使用shuffle=False
實例化,因此拆分在調用之間將是相同的。有關可在此處使用的各種交叉驗證策略,請參閱用戶指南。
- verbose:int
控製詳細程度:越高,消息越多。
- pre_dispatch:int 或 str,默認 ='2*n_jobs'
控製在並行執行期間分派的作業數。當調度的作業多於 CPU 可以處理的數量時,減少此數字有助於避免內存消耗的爆炸式增長。該參數可以是:
無,在這種情況下,所有作業都會立即創建和生成。將此用於輕量級和 fast-running 作業,以避免由於生成作業 on-demand 造成的延遲
一個 int,給出產生的總作業的確切數量
一個 str,給出一個表達式作為 n_jobs 的函數,如 ‘2*n_jobs’
- random_state:int、RandomState 實例或無,默認=無
偽隨機數生成器狀態用於從可能值列表中隨機均勻抽樣,而不是 scipy.stats 分布。傳遞 int 以獲得跨多個函數調用的可重現輸出。請參閱詞匯表。
- error_score:‘raise’ 或數字,默認=np.nan
如果在估計器擬合中發生錯誤,則分配給分數的值。如果設置為‘raise’,則會引發錯誤。如果給出數值,則引發FitFailedWarning。此參數不影響改裝步驟,這將始終引發錯誤。
- return_train_score:布爾,默認=假
如果
False
,則cv_results_
屬性將不包括訓練分數。計算訓練分數用於深入了解不同的參數設置如何影響過擬合/欠擬合權衡。然而,在訓練集上計算分數可能在計算上很昂貴,並且不嚴格要求選擇產生最佳泛化性能的參數。
- cv_results_:numpy(屏蔽)ndarrays的字典
一個帶有鍵作為列標題和值作為列的字典,可以導入到 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}, ...], }
NOTE
鍵
'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_:浮點數
best_estimator 的平均 cross-validated 得分。
對於多指標評估,如果
refit
是False
則不可用。有關詳細信息,請參閱refit
參數。如果
refit
是函數,則此屬性不可用。- best_params_:dict
在保留數據上給出最佳結果的參數設置。
對於多指標評估,如果
refit
是False
則不可用。有關詳細信息,請參閱refit
參數。- best_index_:int
對應於最佳候選參數設置的索引(
cv_results_
數組)。search.cv_results_['params'][search.best_index_]
處的 dict 給出了最佳模型的參數設置,它給出了最高的平均分數 (search.best_score_
)。對於多指標評估,如果
refit
是False
則不可用。有關詳細信息,請參閱refit
參數。- scorer_:函數或字典
用於保留數據的記分器函數為模型選擇最佳參數。
對於多指標評估,此屬性包含經過驗證的
scoring
dict,它將記分器鍵映射到記分器可調用。- 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 數據的評分最大化的參數。
如果
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': 2..., 'penalty': 'l1'}
相關用法
- Python sklearn RandomTreesEmbedding用法及代碼示例
- Python sklearn RandomForestClassifier用法及代碼示例
- Python sklearn RandomForestRegressor用法及代碼示例
- Python sklearn RadiusNeighborsTransformer用法及代碼示例
- Python sklearn RadiusNeighborsRegressor.radius_neighbors_graph用法及代碼示例
- Python sklearn RadiusNeighborsClassifier用法及代碼示例
- Python sklearn RadiusNeighborsTransformer.radius_neighbors_graph用法及代碼示例
- Python sklearn RadiusNeighborsRegressor用法及代碼示例
- Python sklearn RadiusNeighborsTransformer.radius_neighbors用法及代碼示例
- Python sklearn RadiusNeighborsRegressor.radius_neighbors用法及代碼示例
- Python sklearn RadiusNeighborsClassifier.radius_neighbors_graph用法及代碼示例
- Python sklearn RadiusNeighborsClassifier.radius_neighbors用法及代碼示例
- Python sklearn RationalQuadratic用法及代碼示例
- Python sklearn RocCurveDisplay用法及代碼示例
- Python sklearn RFE用法及代碼示例
- Python sklearn RidgeCV用法及代碼示例
- Python sklearn RegressorChain用法及代碼示例
- Python sklearn RANSACRegressor用法及代碼示例
- Python sklearn RobustScaler用法及代碼示例
- Python sklearn RepeatedStratifiedKFold用法及代碼示例
- Python sklearn RocCurveDisplay.from_estimator用法及代碼示例
- Python sklearn RBF用法及代碼示例
- Python sklearn Ridge用法及代碼示例
- Python sklearn RocCurveDisplay.from_predictions用法及代碼示例
- Python sklearn RidgeClassifierCV用法及代碼示例
注:本文由純淨天空篩選整理自scikit-learn.org大神的英文原創作品 sklearn.model_selection.RandomizedSearchCV。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。