學習曲線#

sklearn.model_selection.learning_curve(estimator, X, y, *, groups=None, train_sizes=array([0.1, 0.33, 0.55, 0.78, 1.]), cv=None, scoring=None, exploit_incremental_learning=False, n_jobs=None, pre_dispatch='all', verbose=0, shuffle=False, random_state=None, error_score=nan, return_times=False, fit_params=None, params=None)[原始碼]#

學習曲線。

確定不同訓練集大小的交叉驗證訓練和測試分數。

交叉驗證產生器將整個資料集分割 k 次為訓練和測試資料。將使用具有不同大小的訓練集子集來訓練估算器,並將計算每個訓練子集大小和測試集的分數。之後,對於每個訓練子集大小,分數將在所有 k 次執行中進行平均。

請參閱使用者指南以瞭解更多資訊。

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

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

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

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

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

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

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

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

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

train_sizes形狀為 (n_ticks,) 的類陣列,預設值為 np.linspace(0.1, 1.0, 5)

將用於產生學習曲線的訓練樣本的相對或絕對數目。如果 dtype 為 float,則會將其視為訓練集最大大小的一部分(由選定的驗證方法決定),也就是說,它必須在 (0, 1] 內。否則,會將其解譯為訓練集的絕對大小。請注意,對於分類,樣本數量通常必須夠大,才能包含每個類別中至少一個樣本。

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

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

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

  • int,指定 (Stratified)KFold 中的摺疊數,

  • CV 分割器,

  • 產生 (train, test) 分割的可迭代物件,作為索引陣列。

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

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

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

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

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

exploit_incremental_learningbool,預設值為 False

如果估算器支援增量學習,則會使用此功能來加速不同訓練集大小的擬合。

n_jobsint,預設值為 None

要並行執行的工作數量。估算器的訓練和分數的計算會針對不同的訓練和測試集進行並行化。None 表示 1,除非在 joblib.parallel_backend 內容中。-1 表示使用所有處理器。請參閱詞彙表以瞭解更多詳細資訊。

pre_dispatchint 或 str,預設值為 'all'

用於並行執行的預先分派工作數目(預設值為 all)。此選項可以減少配置的記憶體。str 可以是類似 '2*n_jobs' 的運算式。

verboseint,預設值為 0

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

shufflebool,預設值為 False

是否在根據 ``train_sizes`` 取得其前綴之前,對訓練資料進行隨機排序。

random_stateint、RandomState 實例或 None,預設值為 None

shuffle 為 True 時使用。傳遞 int 以在多個函式呼叫之間產生可重現的輸出。請參閱詞彙表

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

如果估算器擬合時發生錯誤,則將分配給分數的值。如果設定為 'raise',則會引發錯誤。如果給定數值,則會引發 FitFailedWarning。

在 0.20 版本中新增。

return_timesbool,預設值為 False

是否回傳擬合(fit)與評分(score)所需的時間。

fit_paramsdict,預設值為 None

要傳遞給估算器(estimator)的 fit 方法的參數。

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

paramsdict,預設值為 None

要傳遞給估算器的 fit 方法和評分器(scorer)的參數。

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

  • 如果 enable_metadata_routing=True:參數會安全地路由到估算器的 fit 方法。請參閱 中繼資料路由使用者指南 以取得更多詳細資訊。

在 1.6 版本中新增。

回傳值:
train_sizes_abs形狀為 (n_unique_ticks,) 的陣列

用於產生學習曲線的訓練樣本數量。請注意,刻度數(n_ticks)可能小於 n_ticks,因為重複的條目將會被移除。

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

訓練集上的分數。

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

測試集上的分數。

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

擬合所花費的時間,以秒為單位。只有在 return_times 為 True 時才會出現。

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

評分所花費的時間,以秒為單位。只有在 return_times 為 True 時才會出現。

範例

>>> from sklearn.datasets import make_classification
>>> from sklearn.tree import DecisionTreeClassifier
>>> from sklearn.model_selection import learning_curve
>>> X, y = make_classification(n_samples=100, n_features=10, random_state=42)
>>> tree = DecisionTreeClassifier(max_depth=4, random_state=42)
>>> train_size_abs, train_scores, test_scores = learning_curve(
...     tree, X, y, train_sizes=[0.3, 0.6, 0.9]
... )
>>> for train_size, cv_train_scores, cv_test_scores in zip(
...     train_size_abs, train_scores, test_scores
... ):
...     print(f"{train_size} samples were used to train the model")
...     print(f"The average train accuracy is {cv_train_scores.mean():.2f}")
...     print(f"The average test accuracy is {cv_test_scores.mean():.2f}")
24 samples were used to train the model
The average train accuracy is 1.00
The average test accuracy is 0.85
48 samples were used to train the model
The average train accuracy is 1.00
The average test accuracy is 0.90
72 samples were used to train the model
The average train accuracy is 1.00
The average test accuracy is 0.93