我们是否需要关注训练中的目标变量分布以及回归问题中的验证集?

时间:2019-03-03 04:52:13

标签: machine-learning scikit-learn

在分类问题中,我们关心标签在训练和验证集中的分布。在sklearn中,stratify中有train_test_split选项,以确保标签在训练和验证集中的分布相似。

在回归问题中,假设我们要基于一系列功能来预测房价。我们是否需要关注火车和验证集中的房价分布?

如果是,我们如何在sklearn中实现这一目标?

2 个答案:

答案 0 :(得分:0)

强制功能在您的培训和验证集中具有相似的分布,假定您高度信任必须代表实际生活中遇到的数据(例如,在生产环境中为 的数据)的数据。 ),通常情况并非如此。

与测试分数相比,这样做实际上可以提高您的验证分数。

我建议您执行交叉验证(在sklearn中),而不是调整训练和验证集中的特征分布,这可能更能代表测试情况。

答案 1 :(得分:0)

book('A。Geron,使用Scikit-Learn和TensorFlow进行动手机器学习,O'Reilly,2017年)在第2章中对此进行了出色的介绍性讨论。释义:

通常对于大型数据集,您不需要执行分层抽样:训练集应该可以公平地表示观察到的实例范围(当然,这是例外)。对于较小的数据集,如果您执行随机抽样并且适当地需要分层抽样,则可以引入抽样偏差(即,仅从预期目标属性预期范围的特定区域不成比例地记录数据)。

实际上,您需要通过合并此连续功能来创建新的分类功能。然后,您可以对该分类功能执行分层抽样。在训练数据之前,请确保删除此新的分类功能!

但是,要做到这一点,您需要对自己的特征有一个很好的了解,我怀疑对弱预测能力的特征进行分层采样是否有很多意义。我猜如果通过执行非随机采样在数据中引入一些意外偏差,甚至可能会造成危害。

带回家消息:

我的直觉是,连续特征的分层采样应始终是信息和理解的先导。就是说,如果您知道某个功能是目标变量的有力预测指标,并且还知道跨其值的采样是不均匀的,则您可能希望执行分层采样以确保在训练和验证集。