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
中的折數。一個可迭代物件,產生 (訓練, 測試) 分割,作為索引陣列。
對於整數/無輸入,如果估算器是分類器,且
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_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
參數以取得有關允許值的更多資訊。- 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
的類陣列,那麼它將與X
和y
一起通過交叉驗證進行分割。例如,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_transform
且refit=True
時才可用。- 參數:
- X可索引,長度 n_samples
必須符合底層估算器的輸入假設。
- Xt可索引的 (indexable),長度為 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) 的類陣列 (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
方法。