数值数据:分箱

分箱(也称为分桶)是一种特征工程技术,可将不同的数值子范围分组到中。在许多情况下,分箱会将数值数据转换为分类数据。例如,假设有一个名为 X特征,其最低值为 15,最高值为 425。使用分箱,您可以使用以下 5 个箱来表示 X

  • 分箱 1:15 至 34
  • Bin 2:35 到 117
  • Bin 3:118 至 279
  • Bin 4:280 至 392
  • 箱 5:393 至 425

箱 1 的范围为 15 到 34,因此介于 15 到 34 之间的每个 X 值最终都会进入箱 1。基于这些箱训练的模型对 17 和 29 的 X 值做出的反应不会有任何不同,因为这两个值都位于箱 1 中。

特征向量表示五个箱,如下所示:

分箱编号Range特征向量
1 15-34 [1.0, 0.0, 0.0, 0.0, 0.0]
2 35-117 [0.0, 1.0, 0.0, 0.0, 0.0]
3 118-279 [0.0, 0.0, 1.0, 0.0, 0.0]
4 280-392 [0.0, 0.0, 0.0, 1.0, 0.0]
5 393-425 [0.0, 0.0, 0.0, 0.0, 1.0]

尽管 X 是数据集中的单列,但分箱会导致模型将 X 视为 5 个单独的特征。因此,模型会为每个箱学习单独的权重。

如果满足以下任一条件,分箱是缩放剪切的理想替代方案:

  • 特征与标签之间的总体线性关系较弱或不存在。
  • 当特征值聚类时。

鉴于上例中的模型将值 37 和 115 视为相同的值,分箱可能看起来有悖直觉。但如果某个特征的分布比线性分布更集中,那么分箱是表示数据的更好方式。

分箱示例:购物者数量与温度

假设您要创建一个模型,根据当天的室外温度预测购物者人数。下图显示了温度与购物者数量之间的关系:

图 9. 由 45 个点构成的散点图。这 45 个点自然聚类为三组。
图 9. 由 45 个点构成的散点图。

该图显示,毫不意外的是,当温度最舒适时,购物者数量最多。

您可以将特征表示为原始值:数据集中的温度 35.0 在特征向量中将为 35.0。这是最好的主意吗?

在训练期间,线性回归模型会为每个特征学习一个权重。因此,如果温度表示为单个特征,那么 35.0 的温度在预测中的影响力将是 7.0 的温度的五倍(或五分之一)。不过,该图并未真正显示标签与特征值之间的任何线性关系。

该图表显示了以下子范围内的三个聚类:

  • 箱 1 是温度范围 4-11。
  • 箱 2 是指温度范围 12-26。
  • 箱 3 是温度范围 27-36。
图 10。与上图相同的 45 点散点图,但添加了竖线以使箱更明显。
图 10. 分为三个箱的散点图。

模型会为每个箱学习单独的权重。

虽然可以创建三个以上的箱,甚至为每个温度读数创建一个单独的箱,但出于以下原因,这通常不是一个好主意:

  • 只有当某个箱中有足够的示例时,模型才能学习箱与标签之间的关联。在给定的示例中,3 个箱中每个箱都包含至少 10 个示例,这可能足以用于训练。如果使用 33 个单独的箱,则没有一个箱会包含足够的样本供模型进行训练。
  • 每个温度都使用单独的箱,这样会产生 33 个单独的温度特征。不过,您通常应尽量减少模型中的特征数量。

练习:检查您的理解情况

下图显示了虚构国家弗里多尼亚每 0.2 度纬度的住宅价格中位数:

图 11. 每个纬度的住宅价值曲线图。最低房屋价值约为 327,最高约为 712。纬度范围为 41.0 到 44.8,每个点表示每 0.2 度纬度的房屋价值中位数。该模式非常不规则,但有两个明显的聚类(一个聚类位于纬度 41.0 到 41.8 之间,另一个聚类位于纬度 42.6 到 43.4 之间)。
图 11. 每 0.2 度纬度的住宅价值中位数。

该图显示了房屋价值与纬度之间的非线性关系,因此将纬度表示为浮点值不太可能有助于模型做出良好的预测。或许对纬度进行分桶处理会更好?

哪种分桶策略最好?
不进行分桶。
鉴于大多数情节的随机性,这可能是最好的策略。
创建四个分桶:
  • 41.0 至 41.8
  • 42.0 至 42.6
  • 42.8 至 43.4
  • 43.6 至 44.8
对于包含少量示例的第二个箱或第四个箱中的所有住宅,模型很难找到一个预测性权重。
将每个数据点都放在自己的分桶中。
只有当训练集包含足够多的纬度(每 0.2 度)示例时,这种方法才有用。一般来说,住宅往往聚集在城市附近,而在其他地方则相对稀疏。

分位数分桶

分位数分桶会创建分桶边界,使每个桶中的样本数量完全或几乎相等。分位数分桶主要用于隐藏离群值。

为了说明分位数分桶解决的问题,请考虑下图所示的等间距分桶,其中每个桶代表的范围正好是 10,000 美元。请注意,0 到 10,000 的区间包含数十个示例,而 50,000 到 60,000 的区间仅包含 5 个示例。因此,模型有足够的示例来训练 0 到 10,000 区间,但没有足够的示例来训练 50,000 到 60,000 区间。

图 13。汽车价格与以该价格售出的汽车数量的对比图。汽车销量在价格为 6,000 时达到峰值。
            价格高于 6,000 时,汽车销量通常会下降,价格在 40,000 到 60,000 之间的汽车销量非常少。该图表分为 6 个大小相等的分桶,每个分桶的范围为 10,000。因此,第一个分桶包含所有售价介于 0 到 10,000 之间的汽车,第二个分桶包含所有售价介于 10,001 到 20,000 之间的汽车,依此类推。第一个分桶包含许多示例;每个后续分桶包含的示例数量都较少。
图 13. 有些分桶包含的汽车数量很多,而有些分桶包含的汽车数量很少。

相比之下,下图使用分位数分桶将汽车价格划分为若干个箱,每个箱中包含的样本数量大致相同。请注意,有些箱涵盖的价格范围较窄,而有些箱涵盖的价格范围非常广。

图 14.与上图相同,但采用分位数分桶。
            也就是说,各个分桶的大小现在各不相同。第一个分桶包含销量为 0 到 4,000 的汽车,第二个分桶包含销量为 4,001 到 6,000 的汽车。第六个分桶包含售出 25,001 至 60,000 辆的汽车。现在,每个分桶中的车辆数量大致相同。
图 14. 分位数分桶可确保每个桶中的汽车数量大致相同。