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)[原始碼]#

針對估計器指定的參數值進行窮舉搜尋。

重要的成員是 fit、predict。

GridSearchCV 實作了「fit」和「score」方法。如果估計器中實作了「score_samples」、「predict」、「predict_proba」、「decision_function」、「transform」和「inverse_transform」,則它也會實作這些方法。

用於套用這些方法的估計器參數是透過在參數網格上進行交叉驗證網格搜尋來最佳化。

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

參數:
estimator估計器物件

假設這實作了 scikit-learn 估計器介面。估計器需要提供 score 函數,或必須傳遞 scoring

param_grid字典或字典列表

字典,其鍵為參數名稱 (str),值為要嘗試的參數設定列表;或是此類字典的列表,在此情況下,會探索列表中每個字典所跨越的網格。這可以搜尋任何參數設定序列。

scoringstr、可呼叫物件、列表、元組或字典,預設值為 None

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

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

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

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

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

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

有關範例,請參閱指定多個度量來進行評估

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_index_ 設定 best_estimator_best_params_,而 best_score_ 屬性將不可用。

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

此外,對於多個度量評估,只有在設定 refit 時,才會提供屬性 best_index_best_score_best_params_,並且所有這些屬性都將相對於此特定評分器確定。

若要了解多個度量評估的詳細資訊,請參閱 scoring 參數。

請參閱使用交叉驗證的網格搜尋的自訂重新擬合策略,以了解如何透過 refit 使用可呼叫物件設計自訂選取策略。

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

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

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

  • 無。使用預設的 5 折交叉驗證。

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

  • CV 分割器,

  • 一個可迭代物件,產生 (訓練, 測試) 分割,作為索引陣列。

對於整數/無輸入,如果估算器是分類器,且 y 是二元或多類別,則使用 StratifiedKFold。 在所有其他情況下,則使用 KFold。 這些分割器會使用 shuffle=False 來實例化,因此分割將在各個呼叫中保持相同。

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

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

verboseint

控制詳細程度:值越高,訊息越多。

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

  • >2 : 也會顯示分數;

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

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

控制在並行執行期間分派的作業數量。當分派的作業多於 CPU 可以處理的作業時,減少此數字有助於避免記憶體消耗激增。此參數可以是

  • None,在此情況下,會立即建立並產生所有作業。對於輕量且快速執行的作業,請使用此選項,以避免因隨需產生作業而造成延遲

  • 一個 int,給定所產生作業的確切總數

  • 一個 str,給定一個表示式,作為 n_jobs 的函式,例如 '2*n_jobs'

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

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}, ...],
}

注意

'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_float

best_estimator 的平均交叉驗證分數

對於多指標評估,只有在指定 refit 時才會出現。

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

best_params_dict

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

對於多指標評估,只有在指定 refit 時才會出現。

best_index_int

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

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

對於多指標評估,只有在指定 refit 時才會出現。

scorer_函式或字典

用於在保留資料中選擇模型最佳參數的評分器函式。

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

n_splits_int

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

refit_time_float

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

僅當 refit 不是 False 時才會出現。

在 0.20 版本中新增。

multimetric_bool

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

classes_形狀為 (n_classes,) 的 ndarray

類別標籤。

n_features_in_int

fit 期間看到的特徵數量。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

fit 期間看到的特徵名稱。僅當定義了 best_estimator_ 時才定義(如需更多詳細資訊,請參閱 refit 參數的文件),並且當 fit 時,best_estimator_ 會公開 feature_names_in_

在 1.0 版本中新增。

另請參閱

ParameterGrid

產生超參數網格的所有組合。

train_test_split

將資料分割成可用於擬合 GridSearchCV 實例的開發集,以及用於最終評估的評估集的實用函式。

sklearn.metrics.make_scorer

從效能指標或損失函式建立評分器。

注意事項

選取的參數是最大化保留資料分數的參數,除非傳遞了明確的分數,在這種情況下,則會改用該分數。

如果 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']
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) 的類陣列 (array-like)

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

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

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

**paramsstr -> object 的字典

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

如果 fit 參數是一個長度等於 num_samples 的類陣列,那麼它將與 Xy 一起通過交叉驗證進行分割。例如,sample_weight 參數會被分割,因為 len(sample_weights) = len(X)。但是,此行為不適用於通過建構子的 cv 參數配置的分割器所傳遞的 groups。因此,groups 用於*執行分割*並確定哪些樣本被分配到分割的每一側。

傳回值:
self物件

已擬合估計器的實例。

get_metadata_routing()[原始碼]#

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

請查看 使用者指南,了解路由機制如何運作。

在 1.4 版中新增。

傳回值:
routingMetadataRouter

封裝路由資訊的 MetadataRouter

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

取得此估計器的參數。

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

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

傳回值:
params字典

參數名稱對應到其值的字典。

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

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

只有在底層估計器實作 inverse_transformrefit=True 時才可用。

參數:
X可索引,長度 n_samples

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

Xt可索引的 (indexable),長度為 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) 的類陣列 (array-like)

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

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

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

**params字典

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

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

傳回值:
score浮點數

如果提供了 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> 形式的參數,因此可以更新巢狀物件的每個組件。

參數:
**params字典

估算器參數。

傳回值:
self估算器實例

估算器實例。

transform(X)[原始碼]#

使用找到的最佳參數,在估算器上呼叫 transform。

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

參數:
X可索引,長度 n_samples

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

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

X 根據具有最佳找到參數的估算器,在新空間中轉換後的結果。