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, params=None)[源代码]#

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

通过打乱目标变量来生成“随机数据”,并计算特征和目标变量之间独立性的零假设的经验 p 值。

p 值表示在随机生成的数据集中,估计器表现得与原始数据一样好或更好的比例。较低的 p 值表明特征和目标变量之间存在真实的依赖关系,估计器利用了这种依赖关系来给出准确的预测。较高的 p 值可能是由于特征和目标变量之间缺乏真实的依赖关系,或者估计器未能利用这种依赖关系来给出准确的预测。

用户指南 中阅读更多内容。

参数:
estimator实现 'fit' 方法的估计器对象

用于拟合数据的对象。

X至少二维的 array-like

用于拟合的数据。

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, cross-validation generator or an iterable, default=None

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

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

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

  • CV 分割器,

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

对于 int/None 输入,如果估计器是分类器且 y 是二元或多类,则使用 StratifiedKFold。在所有其他情况下,则使用 KFold。这些分割器会以 shuffle=False 进行实例化,因此分割在不同调用之间是相同的。

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

版本 0.22 中已更改: cv 默认为 None 时,从 3 折更改为 5 折。

n_permutationsint, default=100

y 置换的次数。

n_jobsint, default=None

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

random_stateint, RandomState instance or None, default=0

传入一个整数以获得样本之间 y 值置换的可重现输出。请参阅 术语表

verboseint, default=0

详细程度。

scoringstr 或可调用对象,默认=None

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

  • str: 有关选项,请参阅 String name scorers

  • callable:一个可调用的评分器对象(例如,函数),其签名如下:scorer(estimator, X, y),它应该只返回一个值。有关详细信息,请参阅 可调用评分器

  • None:使用 estimator默认评估标准

paramsdict, 默认=None

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

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

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

版本 1.6 中新增。

返回:
scorefloat

不置换目标变量的真实分数。

permutation_scoresshape 为 (n_permutations,) 的数组

每次置换获得的分数。

pvaluefloat

p 值,它近似表示分数可能由偶然获得的概率。计算方法如下:

(C + 1) / (n_permutations + 1)

其中 C 是分数大于或等于真实分数的置换次数。

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

注意事项

此函数实现了 Test 1,出自:

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