分箱(也称为分桶)是一种
特征工程
将不同的数值子范围分组到分箱或
存储分区。
在许多情况下,分箱会将数值数据转换为分类数据。
例如,假设某个功能
名为 X
,其最小值为 15;
最高值为 425借助分箱,您可以使用X
以下五个分箱:
- 分箱 1:15 到 34
- 分箱 2:35 到 117
- 分箱 3:118 到 279
- 分箱 4:280 到 392
- 分箱 5:393 到 425
分箱 1 的范围为 15 到 34,因此 X
的每个介于 15 到 34 之间的值
最终出现在分箱 1 中。在这些分箱上训练的模型不会有任何不同
更改为 X
值 17 和 29,因为这两个值都位于分箱 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
视为五个独立的特征。因此,模型学习
单独的权重。
- 特征与 label 弱或不存在。
- 对特征值进行聚类时。
分箱可能会让人感觉不合常理,因为 上一个示例以相同方式处理值 37 和 115。但当 因此,对于某个特征,分箱比线性特征 代表数据。
分箱示例:购物者数量与温度的关系
假设您要创建一个模型来预测 这里显示了 与购物者数量进行比较:
![图 9.包含 45 个点的散点图。45 积分是天生的
分为三个组](https://developers.google.cn/static/machine-learning/crash-course/images/binning_temperature_vs_shoppers.png?authuser=2&hl=nb)
该曲线图显示,当初在 Google Play 上购物时, 温度将最为舒适。
您可以将特征表示为原始值: 则特征向量中的特征向量为 35.0。这个想法最好吗?
训练期间,线性回归模型会针对每个单词的 功能。因此,如果将温度表示为单个特征,则 35.0 的 5 倍(即 35.0 的五分之一) 则预测为 7.0。然而,图表并不 标签和标签之间的线性关系 特征值。
图表推荐了以下子范围中的三个聚类:
- 分箱 1 的温度范围为 4-11。
- 分箱 2 的温度范围为 12-26。
- 分箱 3 的温度范围为 27-36。
![图 10。上述散点图包含 45 个点
但加上竖线,以使分箱更明显。](https://developers.google.cn/static/machine-learning/crash-course/images/binning_temperature_vs_shoppers_divided_into_3_bins.png?authuser=2&hl=nb)
模型会为每个分箱学习单独的权重。
虽然可以创建三个以上的分箱, 通常不适合这么做,原因如下:
- 只有当分箱和标签之间存在关联时,模型才能学习 有足够的样本。在给定的示例中,3 个分箱中 包含至少 10 个样本,这可能足以满足训练需求。 共有 33 个单独的分箱 没有分箱包含足够的样本供模型进行训练。
- 为每种温度设置单独的分箱,结果如下: 33 个独立的温度功能。不过,您通常应该尽可能减小 模型中的特征数量。
练习:检查您的理解情况
下面的曲线图显示了每 0.2 度的房价中位数 神话国家自由岛的纬度:
![图 11. 每个纬度的房屋价值图。最低的房屋
约为 327,最大值为 712。纬度跨度 41.0
44.8 之间,其中有一个点表示每
纬度 0.2 度。模式很不规则,
两个不同的星团(一个星团介于纬度 41.0 和 41.8 之间,
和另一个星团在纬度 42.6 到 43.4 之间)。](https://developers.google.cn/static/machine-learning/crash-course/images/MedianHouseValueByLatitude.png?authuser=2&hl=nb)
图中显示了住宅值和纬度之间的非线性模式, 因此将纬度表示为浮点值可能没有什么帮助 使模型能够做出良好的预测。也许对纬度进行分桶 想法?
- 41.0 至 41.8
- 42.0 至 42.6
- 42.8 至 43.4
- 43.6 至 44.8
分位数分桶
分桶可创建分桶边界, 或每个分桶中的样本数完全匹配或几乎相等。分位数分桶 大部分情况下隐藏离群值。
为了说明分位数分桶所解决的问题,请考虑以下 如下图所示的等间距分区,其中每个分区 10 个存储分区中的 10 个表示正好 10,000 美元的跨度。 请注意,范围从 0 到 10,000 包含数十个样本 但 50,000 到 60,000 的分桶只包含 5 个样本。 因此,模型有足够的样本来使用 0 到 10000 个 但对于 50,000 到 60,000 个存储分区,没有足够的样本进行训练。
![图 13。汽车价格与汽车销售量的对比情况
价格。汽车销量最高达到 6000 辆。
在 6,000 辆以上的价格上
降低,以 40, 000 到 4,000 之间的汽车售价非常少
6 万。曲线图分为 6 个大小相等的存储分区,每个存储分区
10,000 之间的数字。第一个存储分区包含了所有售出的汽车
介于价格 0 和 10,000 之间时
包含价格在 10,001 到 10,000 之间的所有汽车
20,000 等。第一个存储分区包含许多样本;每
后续存储分区包含的样本较少。](https://developers.google.cn/static/machine-learning/crash-course/images/NeedsQuantileBucketing.png?authuser=2&hl=nb)
相比之下,下图则使用分位数分桶来划分汽车价格 分箱,每个分桶中的样本数量大致相同。 请注意,有些分箱的价格范围较窄,而其他分箱的价格范围较窄 价格范围很广。
![图 14.与上图相同,但分位数分桶除外。
也就是说,分桶现在具有不同的大小。第一个存储分区
包含从 0 到 4,000 的销售汽车,第二个存储分区包含
汽车销量为 4,001 到 6,000 辆第六个存储分区包含
汽车销量为 25,001 到 60,000 辆。每个分桶中的汽车数量
大致相同](https://developers.google.cn/static/machine-learning/crash-course/images/QuantileBucketing.png?authuser=2&hl=nb)