置換檢定分數#

sklearn.model_selection.permutation_test_score(estimator, X, y, *, groups=None, cv=None, n_permutations=100, n_jobs=None, random_state=0, verbose=0, scoring=None, fit_params=None, params=None)[原始碼]#

使用置換來評估交叉驗證分數的顯著性。

置換目標變數以生成「隨機化數據」,並計算相對於特徵和目標變數獨立的零假設的經驗 p 值。

p 值表示隨機化數據集中,估計器表現與原始數據一樣好或更好的比例。小的 p 值表示特徵和目標變數之間存在真實的依賴關係,估計器已利用此關係做出良好的預測。大的 p 值可能是由於特徵和目標變數之間缺乏真實的依賴關係,或者估計器無法利用此依賴關係做出良好的預測。

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

參數:
estimator實作「fit」的估計器物件

用於擬合數據的物件。

X形狀至少為 2D 的類陣列

要擬合的數據。

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

在監督式學習中要嘗試預測的目標變數。

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

用於約束群組內置換的標籤,即 y 值在具有相同群組識別符的樣本之間置換。未指定時,y 值會在所有樣本之間置換。

當使用群組交叉驗證器時,群組標籤也會傳遞到交叉驗證器的 split 方法。交叉驗證器在將數據集分割為訓練/測試集時會使用它們來分組樣本。

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

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

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

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

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

  • CV 分割器,

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

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

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

在 0.22 版本中變更: 如果 cvNone 時的預設值,已從 3 折變更為 5 折。

n_permutationsint,預設為 100

置換 y 的次數。

n_jobsint,預設為 None

要平行執行的作業數。訓練估計器和計算交叉驗證分數會在置換中平行處理。None 表示 1,除非在 joblib.parallel_backend 環境中。-1 表示使用所有處理器。請參閱 詞彙表 以了解更多詳細資訊。

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

傳遞 int 以便在樣本之間置換 y 值時產生可重現的輸出。請參閱 詞彙表

verboseint,預設為 0

詳細程度。

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

單一 str(請參閱 評分參數:定義模型評估規則)或可呼叫物件(請參閱 可呼叫評分器),以評估測試集上的預測。

如果為 None,則使用估計器的 score 方法。

fit_paramsdict,預設為 None

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

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

paramsdict,預設為 None

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

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

  • 如果 enable_metadata_routing=True:參數會安全地路由至估算器 (estimator) 的 fit 方法、cv 物件和 scorer。 詳情請參閱Metadata Routing 使用者指南

於 1.6 版本新增。

回傳:
scorefloat

未置換目標的真實分數。

permutation_scores形狀為 (n_permutations,) 的陣列

每次置換獲得的分數。

pvaluefloat

p 值,用來近似分數以隨機方式獲得的機率。計算方式如下:

(C + 1) / (n_permutations + 1)

其中 C 是分數 >= 真實分數的置換次數。

最佳 p 值為 1/(n_permutations + 1),最差為 1.0。

注意事項

此函數實作了以下文獻中的測試 1:

Ojala 和 Garriga. Permutation Tests for Studying Classifier Performance. The Journal of Machine Learning Research (2010) vol. 11

範例

>>> from sklearn.datasets import make_classification
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.model_selection import permutation_test_score
>>> X, y = make_classification(random_state=0)
>>> estimator = LogisticRegression()
>>> score, permutation_scores, pvalue = permutation_test_score(
...     estimator, X, y, random_state=0
... )
>>> print(f"Original Score: {score:.3f}")
Original Score: 0.810
>>> print(
...     f"Permutation Scores: {permutation_scores.mean():.3f} +/- "
...     f"{permutation_scores.std():.3f}"
... )
Permutation Scores: 0.505 +/- 0.057
>>> print(f"P-value: {pvalue:.3f}")
P-value: 0.010