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
中的折数,一个可迭代对象,生成 (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