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


Python sklearn GridSearchCV用法及代碼示例


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

用法:

class sklearn.model_selection.GridSearchCV(estimator, param_grid, *, scoring=None, n_jobs=None, refit=True, cv=None, verbose=0, pre_dispatch='2*n_jobs', error_score=nan, return_train_score=False)

對估計器的指定參數值進行詳盡搜索。

重要成員是合適的,預測。

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

用於應用這些方法的估計器的參數由 cross-validated grid-search 在參數網格上進行優化。

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

參數

estimator估計器對象

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

param_grid字典或字典列表

以參數名稱 (str) 作為鍵的字典和要嘗試作為值的參數設置列表,或此類字典的列表,在這種情況下,將探索列表中每個字典跨越的網格。這可以搜索任何參數設置序列。

scoringstr, callable, list, tuple or dict, default=None

評估cross-validated模型在測試集上的性能的策略。

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

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

  • 唯一字符串的列表或元組;
  • 一個可調用的返回一個字典,其中鍵是指標名稱,值是指標分數;
  • 以度量名稱作為鍵和可調用值的字典。

有關示例,請參閱指定多個指標進行評估。

n_jobs整數,默認=無

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

refitbool, str, or callable, default=True

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

對於多指標評估,這需要是一個str,表示將用於找到最後重新擬合估計器的最佳參數的記分器。

在選擇最佳估計器時除了最大分數之外還有其他考慮因子,可以將 refit 設置為返回所選 best_index_ 給定 cv_results_ 的函數。在這種情況下,best_estimator_best_params_ 將根據返回的best_index_ 設置,而best_score_ 屬性將不可用。

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

此外,對於多指標評估,屬性 best_index_best_score_best_params_ 僅在設置了 refit 時可用,並且所有這些屬性都將根據這個特定的記分器來確定。

請參閱scoring 參數以了解有關多指標評估的更多信息。

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

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

  • 無,使用默認的 5 折交叉驗證,
  • 整數,指定 (Stratified)KFold 中的折疊數,
  • CV分配器,
  • 一個可迭代的 yield (train, test) 拆分為索引數組。

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

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

verboseint

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

  • >1:顯示每個折疊和參數候選的計算時間;
  • >2:分數也顯示;
  • >3:折疊和候選參數索引也與計算的開始時間一起顯示。
pre_dispatchint 或 str,默認 ='2*n_jobs'

控製在並行執行期間分派的作業數。當調度的作業多於 CPU 可以處理的數量時,減少此數字有助於避免內存消耗的爆炸式增長。該參數可以是:

  • 無,在這種情況下,所有作業都會立即創建和生成。將此用於輕量級和 fast-running 作業,以避免由於生成作業 on-demand 造成的延遲

  • 一個 int,給出產生的總作業的確切數量

  • 一個 str,給出一個表達式作為 n_jobs 的函數,如 ‘2*n_jobs’

error_score‘raise’ 或數字,默認=np.nan

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

return_train_score布爾,默認=假

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

屬性

cv_results_numpy(屏蔽)ndarrays的字典

一個帶有鍵作為列標題和值作為列的字典,可以導入到 pandas DataFrame 中。

例如下麵給出的表格

param_kernel

param_gamma

param_degree

split0_test_score

rank_t…

‘poly’

-

2

0.80

2

‘poly’

-

3

0.70

4

‘rbf’

0.1

-

0.80

3

‘rbf’

0.2

-

0.93

1

將由 cv_results_ 字典表示:

{
'param_kernel': masked_array(data = ['poly', 'poly', 'rbf', 'rbf'],
                             mask = [False False False False]...)
'param_gamma': masked_array(data = [-- -- 0.1 0.2],
                            mask = [ True  True False False]...),
'param_degree': masked_array(data = [2.0 3.0 -- --],
                             mask = [False False  True  True]...),
'split0_test_score'  : [0.80, 0.70, 0.80, 0.93],
'split1_test_score'  : [0.82, 0.50, 0.70, 0.78],
'mean_test_score'    : [0.81, 0.60, 0.75, 0.85],
'std_test_score'     : [0.01, 0.10, 0.05, 0.08],
'rank_test_score'    : [2, 4, 3, 1],
'split0_train_score' : [0.80, 0.92, 0.70, 0.93],
'split1_train_score' : [0.82, 0.55, 0.70, 0.87],
'mean_train_score'   : [0.81, 0.74, 0.70, 0.90],
'std_train_score'    : [0.01, 0.19, 0.00, 0.03],
'mean_fit_time'      : [0.73, 0.63, 0.43, 0.49],
'std_fit_time'       : [0.01, 0.02, 0.01, 0.01],
'mean_score_time'    : [0.01, 0.06, 0.04, 0.04],
'std_score_time'     : [0.00, 0.00, 0.00, 0.01],
'params'             : [{'kernel': 'poly', 'degree': 2}, ...],
}

NOTE

'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 參數。

best_score_浮點數

best_estimator 的平均 cross-validated 得分

對於多指標評估,僅當指定refit 時才存在。

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

best_params_dict

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

對於多指標評估,僅當指定refit 時才存在。

best_index_int

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

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

對於多指標評估,僅當指定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_

注意

選擇的參數是那些最大化遺漏數據分數的參數,除非傳遞了明確的分數,在這種情況下使用它來代替。

如果 n_jobs 設置為大於 1 的值,則會為網格中的每個點複製數據(而不是 n_jobs 次)。如果單個作業花費的時間很少,這樣做是出於效率原因,但如果數據集很大並且沒有足夠的內存可用,則可能會引發錯誤。在這種情況下,一種解決方法是設置 pre_dispatch 。然後,內存隻複製pre_dispatch多次。 pre_dispatch 的合理值為 2 * n_jobs

例子

>>> from sklearn import svm, datasets
>>> from sklearn.model_selection import GridSearchCV
>>> iris = datasets.load_iris()
>>> parameters = {'kernel':('linear', 'rbf'), 'C':[1, 10]}
>>> svc = svm.SVC()
>>> clf = GridSearchCV(svc, parameters)
>>> clf.fit(iris.data, iris.target)
GridSearchCV(estimator=SVC(),
             param_grid={'C': [1, 10], 'kernel': ('linear', 'rbf')})
>>> sorted(clf.cv_results_.keys())
['mean_fit_time', 'mean_score_time', 'mean_test_score',...
 'param_C', 'param_kernel', 'params',...
 'rank_test_score', 'split0_test_score',...
 'split2_test_score', ...
 'std_fit_time', 'std_score_time', 'std_test_score']

相關用法


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