前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一日一学--如何对数值型特征进行分桶

一日一学--如何对数值型特征进行分桶

作者头像
kbsc13
发布2020-02-26 11:05:07
7.9K0
发布2020-02-26 11:05:07
举报
文章被收录于专栏:AI 算法笔记AI 算法笔记

120 篇文章,本文大约 1200 字,阅读大约需要 3 分钟

今天这篇文章主要是介绍在特征工程中,对数值型特征进行分桶操作的方法。


简介

分桶是离散化的常用方法,将连续型特征离线化为一系列 0/1 的离散特征;

当数值特征跨越不同的数量级的时候,模型可能会只对大的特征值敏感,这种情况可以考虑分桶操作。

分桶操作可以看作是对数值变量的离散化,之后通过二值化进行 one-hot 编码。

分桶的数量和宽度可以根据业务领域的经验来指定,但也有一些常规的做法:

  1. 等距分桶。每个桶的宽度是固定的,即值域范围是固定的,比如是 0-99,100-199,200-299等;这种适合样本分布比较均匀的情况,避免出现有的桶的数量很少,而有的桶数量过多的情况;
  2. 等频分桶,也称为分位数分桶。也就是每个桶有一样多的样本,但可能出现数值相差太大的样本放在同个桶的情况;
  3. 模型分桶。使用模型找到最佳分桶,比如聚类,将特征分成多个类别,或者树模型,这种非线性模型天生具有对连续型特征切分的能力,利用特征分割点进行离散化。

分桶的优点

  • 分桶后得到的稀疏向量,内积乘法运算速度更快,计算结果更方便存储;
  • 对异常数据有很强的鲁棒性

需要注意的是

  • 要让桶内的属性取值变化对样本标签的影响基本在一个不大的范围,即不能出现单个桶内,样本标签输出变化很大的情况;
  • 每个桶内都有足够的样本,如果样本太少,随机性太大,不具有统计意义上的说服力;
  • 每个桶内的样本进行分布均匀;
等距分桶

对于等距分桶的操作:

  • 当数字跨越多个数量级时,最好用10个幂(或任何常数的幂)来分组:0-9、10-99、100-999、100-9999等。
  • 容器宽度呈指数增长,从O(10)、O(100)到O(1000)和以上。要从计数映射到bin,取计数的log值

对数变换是处理具有重尾分布的正数的有力工具。(重尾分布在尾部范围内的概率比高斯分布的概率大)。它将分布在高端的长尾压缩成较短的尾部,并将低端扩展成较长的头部。

下面是展示的代码例子:

数值较少的例子:

代码语言:javascript
复制
import numpy as np
# 生成 20 个 0-99 之间的随机整数
small_counts = np.random.randint(0, 100, 20)

# 进行分箱操作, 通过对数据除以 10 分到 0-9 总共 9 个箱里,
# 返回的结果就是对应数据应该划分到的箱的编号
np.floor_divide(small_counts, 10)

数据之间的间隔较大的例子:

代码语言:javascript
复制
# 构造一个间隔更大的数组例子,可以通过取对数 log10 来进行分箱
large_counts = [296, 8286, 64011, 80, 3, 725, 867, 2215, 7689, 11495, 91897, 44, 28, 7971, 926, 122, 22222]
np.floor(np.log10(large_counts))
等频分桶

对于等频分桶,也称为按分位数分桶,为了计算分位数和映射数据到分位数箱,我们可以使用 Pandas 库。pandas.DataFrame.quantilepandas.Series.quantile 用于计算分位数。pandas.qcut 将数据映射到所需数量的分位数。

代码例子如下:

代码语言:javascript
复制
large_counts = [296, 8286, 64011, 80, 3, 725, 867, 2215, 7689, 11495, 91897, 44, 28, 7971, 926, 122, 22222]
# 将数据映射到所需数量的分位数
pd.qcut(large_counts, 4, labels=False)
# 计算指定分位数点的数据
large_counts_series = pd.Series(large_counts)
large_counts_series.quantile([0.25, 0.5, 0.75])

参考文章:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法猿的成长 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 等距分桶
  • 等频分桶
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档