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中的折叠数,一个可迭代对象,产生索引数组形式的 (训练集, 测试集) 拆分。
对于
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