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, 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})

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

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

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

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

  • CV 分割器,

  • 一个可迭代对象,以索引数组的形式生成(训练集,测试集)拆分。

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

传递一个整数以确保样本间 y 值排列的可重现输出。请参阅术语表

verboseint,默认为 0

详细程度。

scoringstr 或 callable,默认为 None

用于评估验证集上预测的分数方法。

fit_paramsdict,默认为 None

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

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

paramsdict,默认为 None

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

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

  • 如果 enable_metadata_routing=True:参数安全地路由到估计器、cv 对象和 scorerfit 方法。有关更多详细信息,请参阅元数据路由用户指南

在 1.6 版本中添加。

返回:
scorefloat

未排列目标时的真实分数。

permutation_scores形状为 (n_permutations,) 的数组

每次排列获得的分数。

pvaluefloat

p 值,它近似于该分数偶然获得的概率。计算公式为

(C + 1) / (n_permutations + 1)

其中 C 是分数大于或等于真实分数排列的数量。

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

注意

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

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