置換檢定分數#
- 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
中的折數,可迭代物件,產生 (train, test) 分割,作為索引陣列。
對於
int
/None
輸入,如果估計器是分類器且y
是二元或多類別,則使用StratifiedKFold
。在所有其他情況下,使用KFold
。這些分割器使用shuffle=False
進行實例化,因此分割在多次呼叫中會保持不變。請參閱 使用者指南,了解此處可使用的各種交叉驗證策略。
在 0.22 版本中變更: 如果
cv
為None
時的預設值,已從 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