我可以对训练和测试数据使用假设检验吗?

Posted

技术标签:

【中文标题】我可以对训练和测试数据使用假设检验吗?【英文标题】:Can I use hypothesis Testing on Train and Test data? 【发布时间】:2021-02-16 09:47:16 【问题描述】:

我想知道在拆分数据集后是否可以对训练和测试数据使用假设测试。

我的目标是检查两个数据样本组是否平衡、分布良好,因此将为要应用的 ML 模型提供一个良好的环境。

如果是这样,我希望 H0(零假设)被接受,即我希望测试数据是训练数据的“缩影”

或者

我希望 H1(替代假设)被接受,即为了检查我的 ML 环境的“基础”,我应该期望找到两个样本之间的差异?

假设我的数据点有超过 1000 个数据点,它们服从高斯分布并且是独立的,那么 Z 检验会是一个好的策略吗?

【问题讨论】:

【参考方案1】:

是的,您可以运行假设检验以基本上“验证”testtrain 的数据来自“相同的分布”。为此,您可以实现一个假设检验,该检验设置:

H_0: Train and test data come from the same distribution
H_1: Train and test data come do not come from the same distribution

为此,您不必对数据的形状做出假设(例如,它来自高斯分布),只需选择适合您正在处理的数据类型的测试(分类,数字连续,数字离散等)。例如,您可以应用Kolmogorov–Smirnov test 或Kruskal–Wallis test(两者都在scipy.stats 中实现,例如scipy.stats.kstest)。我不推荐 Z 检验(实际上是 t 检验),因为它通常用于比较两个样本的 means 是否相同,而不是它们来自同一个样本必须分配。

需要注意的是,虽然您提到testtrain 数据好像是在一个维度上比较它们,但如果您有多个特征/列,则应分别比较每对列。作为现实生活中的例子,从学校“可能随机”选择的一部分学生可能与其他学生具有相同的身高(或来自“相同的身高分布”),但他们的成绩可能与其他学生完全不同。他们。

最后,请注意,在正式的假设检验语言中,您不能“接受”零假设,而只能“拒绝拒绝它”(请参阅​​ Crossvalidated 上的 here)。

【讨论】:

感谢您的大力支持,@tania!如果我的模型应该预测一个单一的目标变量,那么在训练数据和测试数据中针对这个特定变量运行测试是否会出错? 啊,我明白了。我以为你的意思是 X 变量。是的,您可以运行一个测试,以完全相同的方式比较 Y 变量的分布。 我会接受您的友好和客观的解释。请允许我再问一件事好吗?在我的假设检验中,当 H0 和 H1 在训练和数据集上工作时,我是否可以做出任何其他假设,或者只有关于“相同分布”的假设?再次感谢您。 @jaymzleutz 您可以对 traintest 的任何其他统计数据做出假设,并相应地设计测试。例如,在 A/B 测试中,我们通常只比较两个样本的 mean 是否相同,但如果分布非常偏斜,这可能还不够。您可以假设标准差相同,中位数相同等。实际上,我提到的非参数检验采用“相同分布”来表示百分位数或等级相似。我建议您查找“先验概率偏移”或“标签偏移”以获取想法。

以上是关于我可以对训练和测试数据使用假设检验吗?的主要内容,如果未能解决你的问题,请参考以下文章

python数据划分并使用卡方检验查看训练数据和测试数据的统计分布的合理性因为数据中有个别分类变量缺失稀有水平信息(频率为0)检查并补齐训练集和测试集中的水平(至少保证有1个)之后再进行卡方检验

python尝试不同的随机数进行数据划分使用卡方检验依次计算不同随机数划分下训练接和测试集所有分类特征的卡方检验的p值,如果所有p值都大于0.05则训练集和测试集都具有统计显著性数据划分合理

训练集、验证集和测试集

AB测试原理(二)假设检验(参数方法)

python如何配对样本

有人可以解释为啥我们在将数据拆分为训练和测试时使用 random_state 吗? [复制]