什么是分层抽样?
分层采样正在从数据集中获取样品,并保留了两种拆分(训练和测试)中类的比例。例如:
如果我们的30%数据来自A类休息来自b;分层我们的培训和测试拆分也应具有相同的比例(例如。30%从一种-70%从b)。当然,这是分类问题中的一个例子,这是非常关键的如果我们有失衡在我们的数据中。如果我们在不使用分层的情况下分配数据,我们可能有非常不平衡的分裂,这并不能正确地代表我们的模型的概括能力,也不会给它甚至有机会学习少数群体。
那回归呢?
当我们处理分类问题时,我们的数据中有类标签,并且我们知道如何处理这些数据。但是回归呢?也许我们可以将此类比例的定义映射到回归问题的分布比例。如果我们将每个值视为单独的类别怎么办?让我们看看。我们将使用“住房价格竞争”来自Kaggle。
这将给出以下结果:
唯一标签计数:663
数据长度:1460行
如果我们这样做,我们将拥有663不同的课程,我们只有1460我们的数据中的行。这将非常稀疏,我们应该实施更聪明的东西。让我们看一下标签的分布:
我们有一个正确的偏斜分布,如果我们只是随机拆分这些数据,似乎有些折叠会冒险。但是,让我们尝试作为基准。
让我们创建5不同的全随机kflold分裂与不同的种子并检查它们:
我们可以明确地看到这些分裂中的分布差异:
- 种子0-拆分3
- 种子2 - 分裂2
- 种子4-拆分3
他们彼此之间差异很大,这种情况可以在我们的模型上引起这些折叠的不稳定性能。让我们对回归数据实施更普遍的分层。
回归分层
如我们所见,将每个连续价值视为单独的类是不明智的。但是我们可以使用Binning对它们进行分组。我们可以将标签拆分为k等同于大小的间隔,并将每个间隔定义为唯一类。这里,k是我们应该解决问题的高参数。
我们只是要使用。切()功能来自熊猫图书馆。通过查看其最小值和最大值,它将我们的数据分为相等的间隔。由于我们的分布偏斜,因此我认为使用基于分数的封装的风险。如果您认为自己的分布适合此,则可以简单地更改。切()和.qcut()。
让我们看看当我们使用分层连续分裂时将拥有什么:
似乎我们避免使用不同的分布比例分裂数据。我们仍然有差异,但是我认为这是可以接受的,因为我们的数据仅具有〜1K行。
这就是为回归问题生成分层的折叠!这确实是一种制作我们想要的东西的天真方法,当然我们可能会尝试实施不同的方法来做到这一点,但这是我能想到的最简单的方法!