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

点击上方“算法猿的成长“,关注公众号,选择加“星标“或“置顶”

总第 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值

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

下面是展示的代码例子:

数值较少的例子:

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)

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

# 构造一个间隔更大的数组例子,可以通过取对数 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 将数据映射到所需数量的分位数。

代码例子如下:

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])

参考文章:

  • 浅谈微视推荐系统中的特征工程

  • http://fe4ml.apachecn.org/#/docs/2.简单数字的奇特技巧



精选AI文章

1. 机器学习入门学习资料推荐

2.初学者的机器学习入门实战教程!

3.常用机器学习算法汇总比较(完)

4.特征工程之数据预处理(上)

5.实战|手把手教你训练一个基于Keras的多标签图像分类器

精选python文章

1. Python 基础入门--简介和环境配置

2. python版代码整洁之道

3. 快速入门 Jupyter notebook

4. Jupyter 进阶教程

5. 10个高效的pandas技巧

精选教程资源文章

1. [资源分享] TensorFlow 官方中文版教程来了

2. [资源]推荐一些Python书籍和教程,入门和进阶的都有!

3. [Github项目推荐] 推荐三个助你更好利用Github的工具

4. Github上的各大高校资料以及国外公开课视频

5. GitHub上有哪些比较好的计算机视觉/机器视觉的项目?

欢迎关注我的微信公众号--算法猿的成长,或者扫描下方的二维码,大家一起交流,学习和进步!

 

如果觉得不错,在看、转发就是对小编的一个支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/408417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ThinkPHP分页链接支持数组参数的办法

这几天在用ThinkPHP做系统&#xff0c;搜索页有个数组参数提交 <input class"params_t" name"t[]" type"checkbox" value"email"> <input class"params_t" name"t[]" type"checkbox" value&qu…

常见的数据增强项目和论文介绍

点击上方“算法猿的成长“&#xff0c;关注公众号&#xff0c;选择加“星标“或“置顶”总第 121 篇文章&#xff0c;本文大约 1100 字&#xff0c;阅读大约需要 3 分钟在机器学习项目中&#xff0c;数据集对算法模型的性能是有很大的影响的&#xff0c;特别是现在深度学习&a…

PS网页设计教程XXIX——如何在PS中设计一个画廊布局

作为编码者&#xff0c;美工基础是偏弱的。我们可以参考一些成熟的网页PS教程&#xff0c;提高自身的设计能力。套用一句话&#xff0c;“熟读唐诗三百首&#xff0c;不会作诗也会吟”。 本系列的教程来源于网上的PS教程&#xff0c;都是国外的&#xff0c;全英文的。本人尝试翻…

RS(2)--从文本数据到用户画像

点击上方“算法猿的成长“&#xff0c;关注公众号&#xff0c;选择加“星标“或“置顶”总第 122 篇文章&#xff0c;本文大约 5100 字&#xff0c;阅读大约需要 15 分钟上一篇文章简单介绍了推荐系统的定义和应用&#xff0c;推荐系统第二篇&#xff0c;简单介绍用户画像的知…

word2003设置页码不从第一页开始的方法

问题描述&#xff1a;如果你想设置页码从第三四页开始&#xff0c;前边不要页码&#xff0c;或者前边的页码是不同类型的。那么这个时候就要用到&#xff1a;插入->分隔符模式。 如果你的页面中的各个标题是从样式和格式中选择的&#xff0c;既是你先设置好各种标题的样式和…

深度学习算法简要综述(上)

点击上方“算法猿的成长“&#xff0c;关注公众号&#xff0c;选择加“星标“或“置顶”总第 123 篇文章&#xff0c;本文大约 2300 字&#xff0c;阅读大约需要 7 分钟原文&#xff1a;https://theaisummer.com/Deep-Learning-Algorithms/作者&#xff1a;Sergios Karagianna…

react学习(26)---获取antdesign的form数据

this.props.form.validateFieldsAndScroll((err, values) > {}

深度学习算法简要综述(下)

点击上方“算法猿的成长“&#xff0c;关注公众号&#xff0c;选择加“星标“或“置顶”总第 124 篇文章&#xff0c;本文大约 3731 字&#xff0c;阅读大约需要 10 分钟原文&#xff1a;https://theaisummer.com/Deep-Learning-Algorithms/作者&#xff1a;Sergios Karagianna…

tar.gz 文件解压 (安装 netbean 时会用到)

sudo tar xvf jdk-7u45-linux-i586.tar.gz -C /usr/lib 参考文章 http://hi.baidu.com/xiaomeng008/item/5e787bef01d9b709560f1dba http://blog.csdn.net/baggio1006/article/details/6442609 转载于:https://www.cnblogs.com/vincedotnet/p/3383326.html

react学习(27)---antdesign设置默认值

{getFieldDecorator(activityTimeStamp, {rules: [{ required: true, message: 请选择活动时间 }],initialValue: [moment(updateDataSource.startTime),moment(updateDataSource.endTime),],})(<RangePicker format"YYYY-MM-DD HH:mm:ss" />)}

关于AI你可能不知道的5件事情

点击上方“算法猿的成长“&#xff0c;关注公众号&#xff0c;选择加“星标“或“置顶”总第 125 篇文章&#xff0c;本文大约 1400 字&#xff0c;阅读大约需要 7 分钟原文&#xff1a;https://www.blog.google/technology/ai/five-things-a-to-z-ai/作者&#xff1a;Gina Nef…

如何恢复被破坏的PowerDesigner pdm文件

刚好今天遇到了这个文件&#xff0c;如果没有备份的话&#xff0c;遇到这样的问题的确是非常心痛。 powerdesigner 的文件生成的有两个&#xff0c;pdb,pdm 两种格式&#xff0c; pdb 文件为实时备份&#xff0c;如果你的 pdm 文件坏了&#xff0c;直接把 pdb 文件改成 pdm 就可…

10个实用的机器学习建议

点击上方“算法猿的成长“&#xff0c;关注公众号&#xff0c;选择加“星标“或“置顶”总第 126 篇文章&#xff0c;本文大约 2500 字&#xff0c;阅读大约需要 10 分钟原文&#xff1a;https://medium.com/modern-nlp/10-great-ml-practices-for-python-developers-b089eefc1…

设计模式笔记——生成器模式(Builder Pattern)

一、概述在软件系统中&#xff0c;把构造对象实例的逻辑移到了类的外部&#xff0c;在这个类的外部定义了类的逻辑。它把一个复杂对象的构造过程从对象的表示中分离出来了&#xff0c;其直接效果是将一个复杂的对象简化为一个比较简单的目标对象。它强调的是产品构造过程。二、…

react学习(28)---react中componentWillReceiveProps

componentWillReceiveProps componentWillReceiveProps# void componentWillReceiveProps(object nextProps ) 当props发生变化时执行&#xff0c;初始化render时不执行&#xff0c;在这个回调函数里面&#xff0c;你可以根据属性的变化&#xff0c;通过调用this.setState()来…

python 学习资源推荐

总第 127 篇文章&#xff0c;本文大约 1500 字&#xff0c;阅读大约需要 7 分钟原文&#xff1a;https://forums.fast.ai/t/recommended-python-learning-resources/26888作者&#xff1a;Jeremy Howard首发于我的知乎专栏&#xff1a;https://zhuanlan.zhihu.com/p/128935536…

oracle-扫盲贴:存储过程实现增删改查

原文引入&#xff1a;http://blog.csdn.net/yangzhawen/article/details/8617179 oracle-扫盲贴&#xff1a;存储过程实现增删改查 分类&#xff1a; oracle2013-02-27 12:43 5382人阅读 评论(0) 收藏 举报为公司一个项目没有接触过oracle的程序员准备的一个oracle如何使用proc…