为啥我的训练集也应该因为我的测试集偏斜而在类分布的数量上偏斜
Posted
技术标签:
【中文标题】为啥我的训练集也应该因为我的测试集偏斜而在类分布的数量上偏斜【英文标题】:Why should my training set also be skewed in terms of number of class distribution just because my test set is skewed为什么我的训练集也应该因为我的测试集偏斜而在类分布的数量上偏斜 【发布时间】:2015-10-02 19:37:44 【问题描述】:我的问题是,当我的测试集也有偏差时,为什么我的训练集也应该有偏差(正面类别的实例数量比负面类别少得多)。我读到重要的是要在训练和测试集中保持类之间的分布相同以获得最真实的性能。例如,如果我的测试集有 90%-10% 的类实例分布,我的训练集是否也应该具有相同的比例?
我发现很难理解为什么保持训练集中类实例的比例与测试集中存在的比例一样重要。
我觉得难以理解的原因是我们不希望分类器只学习两个类中的模式吗?那么,仅仅因为测试集偏斜就保持训练集偏斜是否重要?
任何想法都会有所帮助
【问题讨论】:
您在第一段中给出了充分的理由,但没有详细说明为什么您觉得 他们 难以相信。这样做,这样人们就不会回答你已经知道的事情了。 数据集相对于什么有偏差?如果它是相对于真实分布的,那么你可能有一个 GIGO 的情况。如果不是,那么您只需要确保训练数据相对于测试数据(=> 也是真实数据)没有倾斜。 @AmiTavory 能否详细说明一下 GIGO 的情况?你的意思是垃圾在垃圾外的情况吗?我稍微编辑了这个问题来解释这里的偏度是什么。基本上就是训练集中类实例比例的差异。 @AbhishekShivkumar 是的,我指的是 GIGO,就像你说的那样。无论如何,在澄清你的问题之后,我试图回答。希望对您有所帮助。 【参考方案1】:IIUC,您在询问使用 Stratified Sampling 的理由(例如,在 Scikit's StratifiedKFold
中使用的)。
将数据划分为训练集和测试集后,您需要考虑三个数据集:
-
“真实世界”集,您的分类器将在其上真正运行
火车套装,您将在其中学习模式
测试集,您将使用它来评估分类器的性能
(所以使用 2. + 3. 实际上只是为了估计事情在 1 上的运行方式,包括可能的调整参数。)
假设您的数据中的某个类表示远非统一 - 假设如果类将统一生成,那么它出现的次数只有 5%。此外,您认为这不是 GIGO 案例——在现实世界中,此类的概率约为 5%。
当你分成 2. + 3. 时,你就有机会相对于 1. 倾斜:
这个类很可能不会出现 5% 的次数(在训练集或测试集中),而是或多或少。
很有可能该类的某些特征实例在训练集或测试集中相对于 1 会出现偏差。
在这些情况下,当您根据 2. + 3. 组合做出决定时,可能无法很好地表明对 1. 的影响,而这正是您真正想要的。
顺便说一句,我不认为重点在于调整训练以适应测试,而是使训练和测试每个都适合整个采样数据。
【讨论】:
感谢您的回答。因此,如果我理解正确,您总结的是,训练集是否具有两个类的相等比例并不重要。更重要的是它学习了两个类的模式,对吧?感谢您解释 StratifiedKFold 背后的理由。 ... 这应该意味着可以有一个平衡的训练集,然后在不平衡的测试集上对其进行测试。对吗? @AbhishekShivkumar 我同意你的前一点,但不同意后者。理想情况下,每个集合都应该尽可能代表真实世界的集合(分层采样只是试图在您第一次采样数据集时做到这一点,然后将其分解为训练 + 测试)。其他任何事情都可能发生:1. 导致分类器错误地学习模式,2. 给出预测分类器性能的错误反馈,或者 3. 两者兼而有之。以上是关于为啥我的训练集也应该因为我的测试集偏斜而在类分布的数量上偏斜的主要内容,如果未能解决你的问题,请参考以下文章