驗證曲線#

sklearn.model_selection.validation_curve(estimator, X, y, *, param_name, param_range, groups=None, cv=None, scoring=None, n_jobs=None, pre_dispatch='all', verbose=0, error_score=nan, fit_params=None, params=None)[原始碼]#

驗證曲線。

決定不同參數值下的訓練和測試分數。

計算具有指定參數不同值的估計器的分數。這類似於使用單一參數的網格搜尋。然而,這也會計算訓練分數,僅僅是用於繪製結果的工具。

請參閱使用者指南以獲取更多資訊。

參數:
estimator實作「fit」方法的物件類型

此類型的物件,會針對每個驗證進行複製。它還必須實作「predict」,除非 scoring 是一個可呼叫的物件,該物件不依賴「predict」來計算分數。

X形狀為 (n_samples, n_features) 的類陣列或稀疏矩陣

訓練向量,其中 n_samples 是樣本數,而 n_features 是特徵數。

y形狀為 (n_samples,) 或 (n_samples, n_outputs) 的類陣列,或為 None

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

param_namestr

將要變動的參數名稱。

param_range形狀為 (n_values,) 的類陣列

將要評估的參數值。

groups形狀為 (n_samples,) 的類陣列,預設值為 None

在將資料集分割為訓練/測試集時使用的樣本的群組標籤。僅與「Group」cv 實例 (例如,GroupKFold) 結合使用。

變更於 1.6 版: 如果未透過 sklearn.set_config(enable_metadata_routing=True) 啟用中繼資料路由,則只能傳遞 groups。啟用路由時,請透過 params 引數傳遞 groups 以及其他中繼資料。例如:validation_curve(..., params={'groups': groups})

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

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

  • None,使用預設的 5 折交叉驗證,

  • int,以指定 (Stratified)KFold 中的折數,

  • CV 分割器,

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

對於 int/None 輸入,如果估計器是一個分類器,且 y 為二元或多類,則使用 StratifiedKFold。在所有其他情況下,則使用 KFold。這些分割器會以 shuffle=False 實例化,因此分割在不同呼叫中會相同。

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

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

scoringstr 或可呼叫的物件,預設值為 None

str (請參閱評分參數:定義模型評估規則) 或具有簽章 scorer(estimator, X, y) 的評分器可呼叫物件/函式。

n_jobsint,預設值為 None

要平行執行的工作數。估計器的訓練和分數計算會在每個參數值和每個交叉驗證分割的組合上平行化。None 表示 1,除非在 joblib.parallel_backend 環境中。-1 表示使用所有處理器。請參閱詞彙表以瞭解更多詳細資訊。

pre_dispatchint 或 str,預設值為 'all'

平行執行預先調度的工作數 (預設值為全部)。此選項可以減少配置的記憶體。此 str 可以是類似 '2*n_jobs' 的表達式。

verboseint,預設值為 0

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

error_score「raise」或數值,預設值為 np.nan

如果估計器擬合時發生錯誤,則要指定給分數的值。如果設定為「raise」,則會引發錯誤。如果給定數值,則會引發 FitFailedWarning。

在 0.20 版中新增。

fit_paramsdict,預設值為 None

要傳遞至估計器 fit 方法的參數。

自 1.6 版起已棄用: 此參數已棄用,將在 1.8 版中移除。請改用 params

paramsdict,預設值為 None

要傳遞至估計器、評分器和交叉驗證物件的參數。

  • 如果 enable_metadata_routing=False (預設值):直接傳遞至估計器 fit 方法的參數。

  • enable_metadata_routing=True:參數會安全地傳遞至估算器的 fit 方法、評分器以及交叉驗證物件。詳情請參閱Metadata Routing 使用者指南

1.6 版本新增。

回傳值:
train_scores形狀為 (n_ticks, n_cv_folds) 的陣列

在訓練集上的分數。

test_scores形狀為 (n_ticks, n_cv_folds) 的陣列

在測試集上的分數。

注意事項

請參閱模型正規化對訓練和測試誤差的影響

範例

>>> import numpy as np
>>> from sklearn.datasets import make_classification
>>> from sklearn.model_selection import validation_curve
>>> from sklearn.linear_model import LogisticRegression
>>> X, y = make_classification(n_samples=1_000, random_state=0)
>>> logistic_regression = LogisticRegression()
>>> param_name, param_range = "C", np.logspace(-8, 3, 10)
>>> train_scores, test_scores = validation_curve(
...     logistic_regression, X, y, param_name=param_name, param_range=param_range
... )
>>> print(f"The average train accuracy is {train_scores.mean():.2f}")
The average train accuracy is 0.81
>>> print(f"The average test accuracy is {test_scores.mean():.2f}")
The average test accuracy is 0.81