首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将不平衡数据集分割和重采样成列车、验证和测试

如何将不平衡数据集分割和重采样成列车、验证和测试
EN

Data Science用户
提问于 2019-10-10 10:21:42
回答 3查看 7.2K关注 0票数 4

我想了解如何用二进制目标变量分割不平衡的数据集,其中87%的样本为负,13%的样本为正。现在,我知道,在进行任何类型的重采样以避免信息泄漏之前,您应该始终将数据分割成训练和测试集,但是怎样才能提供更好的结果--随机train_test_splitStratifiedShuffleSplit?普遍的看法是,在数据集不平衡的情况下,后者的表现似乎优于前者。顺便问一下,StratifiedShuffleSplit是如何工作的?

此外,如何考虑交叉验证集和如何处理它?

它是否还应包含相同数量的阳性和阴性样本,按照在培训集上进行的抽样?

EN

回答 3

Data Science用户

回答已采纳

发布于 2019-10-29 22:07:08

Grzegorz的答案找到了问题的根源--如果未来的数据--这个模型将用于对其进行预测--具有相同的分布,那么按类%分层是有意义的。

我想添加的一件事是,我通常使用普通的train_test_split函数,只需将类标签传递给它的分层参数,如下所示:

代码语言:javascript
运行
复制
train_test_split(X, y, random_state=0, stratify=y, shuffle=True)

这将对数据集进行洗牌,并匹配train_test_split结果中类的%s。

票数 4
EN

Data Science用户

发布于 2019-10-10 17:50:41

这都取决于你的目标是什么。例如,如果您部署了一个模型,您希望测试数据(例如流数据)具有相同的pos/neg分布,那么对您的拆分进行分层是有意义的。这样,你就偏袒你的学习过程,把更多的东西贴上负面的标签。另一方面,如果你被告知给出更多的权重来检测稀疏的正例子,那么你可能想要尝试一个相等的分布。

票数 0
EN

Data Science用户

发布于 2019-10-30 03:09:41

对于大型数据集,非分层分裂通常是可以的。您必须考虑在测试集和训练集之间存在显着差异的可能性。对我来说,数以千计的记录中有13%可能没有问题,但在100份记录中,有13%可能是问题。

马克的回答解释了分层是如何运作的。StratifiedShuffleSplit只是在交叉验证的上下文中通过创建一个生成器来多次拆分它,从而简化了这一点。您还可以将random_state传递给它,以便在每次迭代中分块保持一致,这对于超参数调优非常重要。查看文档中的示例。

票数 0
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/61549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档