置换检验评分#

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)[source]#

使用置换检验评估交叉验证分数的显著性。

对目标变量进行置换以生成“随机数据”,并计算针对特征和目标变量相互独立的零假设的经验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})

cv整数、交叉验证生成器或迭代器,默认为 None

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

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

  • 整数,指定 (Stratified)KFold 中的折叠数;

  • CV 分割器,

  • 一个迭代器,产生 (train, test) 拆分作为索引数组。

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

有关此处可使用的各种交叉验证策略,请参阅 用户指南

0.22版本中的变更: 如果 cvNone,则默认值已从 3 折更改为 5 折。

n_permutations整数,默认为 100

y 进行置换的次数。

n_jobs整数,默认为 None

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

random_state整数、RandomState 实例或 None,默认为 0

传递整数以获得样本之间 y 值置换的可重复输出。参见 词汇表

verbose整数,默认为 0

详细程度。

scoring字符串或可调用对象,默认为 None

用于评估测试集上预测结果的单个字符串(参见 评分参数:定义模型评估规则)或可调用对象(参见 可调用评分器)。

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

fit_params字典,默认为 None

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

自 1.6 版本起已弃用: 此参数已弃用,并将在 1.6 版本中删除。请改用 params

params字典,默认为 None

传递给估计器的 fit 方法、评分器和 cv 分割器的参数。

  • 如果 enable_metadata_routing=False(默认):参数直接传递到估计器的 fit 方法。

  • 如果 enable_metadata_routing=True:参数安全地路由到估计器的 fit 方法、cv 对象和 scorer。更多详情请参见 元数据路由用户指南

版本 1.6 中新增。

返回:
score浮点数

未进行目标置换的真实得分。

permutation_scores形状为 (n_permutations,) 的数组

每次置换获得的分数。

pvalue浮点数

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

(C + 1) / (n_permutations + 1)

其中 C 是得分 >= 真实得分的置换次数。

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

备注

此函数实现了以下文献中的测试 1:

Ojala 和 Garriga. 用于研究分类器性能的置换检验. 机器学习研究杂志 (2010) 第 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