permutation_test_score#

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)#

评估通过排列验证分数的显著性。

通过排列目标生成“随机化数据”并计算经验 p值,以检验特征和目标独立的零假设。

p值表示在随机化数据集中,估计器表现与原始数据中一样好或更好的比例。一个小的 p值表明特征和目标之间存在真实的依赖关系,估计器利用这种依赖关系给出了良好的预测。一个大的 p值可能是由于特征和目标之间缺乏真实的依赖关系,或者估计器未能利用这种依赖关系给出良好的预测。

更多信息请参阅 用户指南

Parameters:
estimator实现 ‘fit’ 方法的估计器对象

用于拟合数据的估计器对象。

X至少二维的类数组

用于拟合的数据。

y类数组,形状为 (n_samples,) 或 (n_samples, n_outputs) 或 None

在监督学习的情况下,尝试预测的目标变量。

groups类数组,形状为 (n_samples,),默认=None

标签用于在组内约束排列,即 y 值在具有相同组标识符的样本之间进行排列。 未指定时, y 值在所有样本之间进行排列。

当使用分组交叉验证器时,组标签也会传递给交叉验证器的 split 方法。交叉验证器使用它们在拆分数据集为训练/测试集时进行样本分组。

cvint, 交叉验证生成器或可迭代对象,默认=None

确定交叉验证拆分策略。 cv 的可能输入包括:

  • None ,使用默认的 5 折交叉验证,

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

  • CV splitter

  • 一个可迭代对象,生成 (train, test) 拆分作为索引数组。

对于 int / None 输入,如果估计器是分类器且 y 是二分类或多分类,则使用 StratifiedKFold 。在所有其他情况下,使用 KFold 。这些拆分器实例化时使用 shuffle=False ,因此拆分在多次调用中将保持一致。

请参阅 用户指南 以了解可以在此处使用的各种交叉验证策略。

Changed in version 0.22: cv 默认值如果为 None 则从 3 折改为 5 折。

n_permutationsint, 默认=100

排列 y 的次数。

n_jobsint, 默认=None

并行运行的作业数。训练估计器和计算交叉验证分数在排列上并行化。 None 表示 1,除非在 joblib.parallel_backend 上下文中。 -1 表示使用所有处理器。有关更多详细信息,请参阅 Glossary

random_stateint, RandomState 实例或 None, 默认=0

传递一个 int 以在样本之间排列 y 值时获得可重复的输出。请参阅 Glossary

verboseint, 默认=0

详细级别。

scoringstr 或 callable, 默认=None

一个单一的 str(参见 scoring_parameter )或一个 callable(参见 从指标函数定义您的评分策略 ),用于评估测试集上的预测。

如果为 None ,则使用估计器的 score 方法。

fit_paramsdict, 默认=None

传递给估计器 fit 方法的参数。

Added in version 0.24.

Returns:
scorefloat

不排列目标的真实分数。

permutation_scores形状为 (n_permutations,) 的数组

每个排列获得的分数。

pvaluefloat

p值,近似表示通过偶然获得分数的概率。计算公式为:

(C + 1) / (n_permutations + 1)

其中 C 是得分 >= 真实分数的排列次数。

最好的 p值是 1/(n_permutations + 1),最坏的是 1.0。

Notes

此函数实现了以下测试:

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

Examples

>>> 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