模型分数是否高于随机标签?用 permutation_test_score 做教学置换检验

一个分类器在交叉验证中得到较高分数,还需要问:它是否只是碰巧利用了这批样本的标签排列?permutation_test_score 保持特征与验证方案不变,反复打乱标签,形成“标签与特征无关联”时的分数对照。下面用人工合成数据执行一次教学检验。

一个分类器在交叉验证中得到较高分数,还需要问:它是否只是碰巧利用了这批样本的标签排列?permutation_test_score 保持特征与验证方案不变,反复打乱标签,形成“标签与特征无关联”时的分数对照。下面用人工合成数据执行一次教学检验。

准备环境与教学数据

以下代码已在 Windows 的 Python 3.11 独立环境运行。文中数据是人为构造或库自带的教学样本,不代表任何业务系统的效果;例子不调用在线大模型。

模型分数是否高于随机标签?用 permutation_test_score 做教学置换检验

在空目录安装依赖,把完整代码保存为 demo.py,运行 python demo.py。使用现有 Python 环境时,先核对依赖版本。

python -m pip install numpy==2.4.6 scikit-learn==1.9.1

先固定比较对象

代码用 make_classification 生成90条二分类样本和4个数值特征,设定明显信号、固定随机种子。LogisticRegression 与3折 StratifiedKFold 在实际标签和100次随机置换中使用同一评分设置。置换次数只有100,p值分辨率有限;真实研究不能根据一次小样本教学输出宣布模型具有可部署价值。

permutation_test_score 返回真实分数、置换分数数组和 p 值。它检验的是在指定数据、模型、交叉验证与“标签可交换”的假设下,当前分数是否异常高,不是任何特征的因果证明。多个记录来自同一用户或受时间依赖时,直接打乱单行标签可能破坏数据结构,需重新设计置换单位。

看分数分布与失败边界

打印真实交叉验证准确率、置换分数的均值、最大值和 p 值。代码断言数组有100项、p 值落在0到1之间,不强行要求本例达到某个显著性阈值;读者应根据实际输出解释。

如果真实分数与置换分数接近,先检查标签与特征是否错位、模型是否欠拟合、分组方式是否合理。即使真实分数显著高于置换分数,仍要保留独立测试、错误类型和部署成本评估。

完整可运行代码

import numpy as np
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import StratifiedKFold, permutation_test_score

X, y = make_classification(
    n_samples=90, n_features=4, n_informative=3,
    n_redundant=0, n_clusters_per_class=1,
    class_sep=2.0, flip_y=0, random_state=4)
cv = StratifiedKFold(n_splits=3, shuffle=True, random_state=9)
model = LogisticRegression(max_iter=1000)
score, shuffled, pvalue = permutation_test_score(
    model, X, y, cv=cv, scoring="accuracy",
    n_permutations=100, random_state=6, n_jobs=1)
assert len(shuffled) == 100 and 0 < pvalue <= 1
print("actual_cv_accuracy", round(float(score), 3))
print("permuted_mean_max", round(float(np.mean(shuffled)), 3),
      round(float(np.max(shuffled)), 3))
print("permutation_pvalue", round(float(pvalue), 4))

运行结果与核对

下列是本文代码在上述环境的实际输出。更换运行环境时,先核对输入、代码和断言,再比较输出数值。

actual_cv_accuracy 0.989
permuted_mean_max 0.502 0.7
permutation_pvalue 0.0099

先核对100次置换分数的均值和最大值,再看实际分数与 p 值。若更换数据后 p 值不小,不要用“再多跑几次直到显著”挑结果;应预先定义假设和验证设计,并检查是否需要分组置换。

适用边界

这是90条合成且有意放入可分信号的数据。检验依赖标签置换在零假设下合理;时间、组依赖或反复试模型都会改变解释。p 值不是模型有用概率,也不表示生产环境效果。

常见问题

100次置换够用于正式结论吗?

通常需要按目标精度与计算预算决定次数;100次只能做教学演示。置换次数增加会让尾部概率估计更细,但无法修复错误的数据划分或不合理的置换单位。

参考资料

以下接口行为依据官方文档核对于 2026 年 10 月 1 日;本文的运行结果仅覆盖上述教学输入。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31760.html

赞 (0)
AI小管家的头像AI小管家
同一模型为什么出现两种准确率?用 sample_weight 核对加权与未加权评估
上一篇 2026年10月1日 下午9:26
回归模型对哪些业务组误差大?按预定义分组计算 MAE 与样本数
下一篇 2026年10月1日 下午9:26

相关推荐

  • Claude数学建模如何从问题拆解到模型构建

    Claude数学建模的价值,不是直接生成一组看似完整的公式,而是帮助使用者把自然语言问题转换成可分析、可计算、可验证的结构。面对“如何提高效率”“如何合理分配资源”这类表述,第一步应先明确研究对象、决策目标、可用数据、限制条件和最终评价标准。

    11小时前
    200
  • claude教学:从提问到整理资料的AI使用步骤

    Claude更适合承担需要阅读、比较、归纳和改写的工作。面对一份较长的会议记录、调研材料、项目文档或多轮沟通内容,它可以帮助你提炼主题、识别章节结构、抽取关键事实,并将零散信息重新组织成摘要、提纲、表格或行动清单。它也适合用于邮件改写、报告初稿、问答整理和不同语气之间的转换。

    11小时前
    200
  • claude数学能解决哪些题型?从提问到验算的使用指南

    claude数学更适合被当作一个会解释、会追问、能协助检查的数学助手,而不是只负责吐出最终数字的计算器。它可以帮助用户读懂题意、整理已知条件、选择公式、展示推导步骤,也能根据用户提供的解答寻找计算或逻辑上的漏洞。

    11小时前
    200
  • claude教科书中的AI对话使用场景与操作步骤

    本文把“claude教科书”作为学习AI对话方法的主题表达,不把未提供的书籍章节、作者观点、官方功能或具体版本当作已知事实。真正值得掌握的,不是背下一句所谓万能提示词,而是建立一套可重复的对话流程:先明确目标,再补充背景,随后规定输出方式,最后检查结果。

    11小时前
    200
  • claude数学公式怎么用 从文字描述到规范公式的操作步骤

    使用Claude处理数学公式,关键不是直接输入“帮我写公式”,而是把题意中的变量、条件、运算关系和输出格式交代清楚。自然语言往往省略主语、范围或单位,如果这些信息没有说明,生成结果就可能在符号定义、括号范围或等号两侧的逻辑上出现偏差。

    11小时前
    200
联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部