数据预处理的分箱操作
介绍
我们在建立模型前,一般需要对特征变量进行离散化,特征离散化后,模型会更稳定,降低模型过拟合的风险。尤其是采用 logsitic 建立评分卡模型时,必须对连续变量进行离散化。而特征离散化处理通常采用的就是分箱法,数据分箱(也称为离散分箱或分段)是一种数据预处理技术,用于减少次要观察误差的影响,提高泛化性。
数据分箱又分为有监督分箱和无监督分箱,是否使用标签进行离散化(分箱)决定了有监督还是无监督的离散化方法。
知识点
- 无监督分箱
- split 分箱
- merge 分箱
无监督分箱
这里为了实验,我们就随机生成了一些实验数据,下面先来看下具体详情:
import pandas as pd
import numpy as npdata = pd.read_csv("data.csv")
data.shape
(252939, 88)
data.head()
datetime | category_1 | category_14 | category_77 | category_21 | category_13 | category_62 | category_68 | category_42 | category_28 | ... | category_71 | category_3 | category_34 | category_58 | category_47 | category_25 | category_48 | y | category_74 | category_79 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2020-06-13 | 0.495720 | 11638800 | 90 | -999 | 1 | 0 | 0 | 0 | 6 | ... | 0 | 100007 | 0.574799 | 3 | 1 | 0.560708 | 1.0 | 0 | -1.0 | 79 |
1 | 2020-10-22 | 0.517549 | 734893200 | 38 | -999 | 2 | 0 | 0 | 6 | 5 | ... | 1 | 100008 | 0.390684 | 5 | 1 | 0.495632 | 1.0 | 0 | 100.0 | 132 |
2 | 2020-09-11 | 0.435992 | 860778000 | 21 | 9 | 1 | 0 | 0 | 11 | 229 | ... | 1 | 200000 | 0.473826 | 37 | 2 | 0.462364 | 1.0 | 1 | 400.0 | 20 |
3 | 2020-05-05 | 0.504451 | 872010000 | 143 | -999 | 1 | 0 | 0 | 4 | 33 | ... | 1 | 100008 | 0.491736 | 34 | 2 | 0.440723 | 1.0 | 1 | -1.0 | 53 |
4 | 2020-05-13 | 0.511435 | 846349200 | 56 | -999 | 2 | 0 | 0 | 3 | 0 | ... | 1 | 100008 | 0.529865 | 0 | 1 | 0.474624 | 1.0 | 1 | 400.0 | 83 |
其中 datetime 表示数据日期;y 表示标签值,取值1、0;category_1 ~ category_86 表示用户的特征数据。
等频法:
等频法属于自动分箱,每个箱内的样本数量是相同的,假设有 10000 个样本,设置频数为 100,则按照数值排序后,就会分成 100 个箱子。等频法在 python 中的实现如下所示。
"""
qcut函数是根据数据本身的数量来对数据进行分割
:param X: 原始数据,只接收1维矩阵或Series
:param q: 整数,当q为整数时,代表分箱数
:param duplicates: 默认值为raise,如果X中有重复值时会报错。当duplicates='drop'时,X中有重复值时会对分箱合并
:param labels: 接收array型或False型数据,当labels=False时,只返回分箱的索引。当labels为array时,其长度要和q相等
"""
equal_frequency_cut = pd.qcut(data.category_34, q=5, duplicates="drop", labels = range(0, 5))
下面是分箱后的结果,我们可以看到分箱后的数据基本是均匀分布的(最后两个柱子不均匀是因为有重复数据,在分箱时进行了数据合并)。
import pandas as pd
from sklearn import datasetsequal_frequency_cut.hist()
等距法:
等距法同样属于自动分箱,可以理解为每个箱子中的数据极差是相同的,也就是区间的距离是一致的。等距法在 python 中的实现如下所示。
"""
cut函数是根据数据的值来对数据进行分割
:param X: 原始数据,只接收1维矩阵或Series
:param bins: 为整数时,代表分箱数,和qcut的q参数一样
:param labels: 接收array型或False型数据,当labels=False时,只返回分箱的索引。当labels为array时,其长度要和bins相等
"""
equal_distance_cut = pd.cut(data.category_34, 5, labels = range(0, 5))
同样的我们再来看下分箱完的结果,此时分箱后的数据就不再均匀分布。
equal_distance_cut.hist()
自定义法:
通常在业务中,会根据经验,对分箱规则做出定义。这里的经验既可以是专业人员的之前经验,也可以是数据探索性分析中得出的结论。自定义法在 python 中的实现如下所示。
"""
cut函数是根据数据的值来对数据进行分割
:param X: 原始数据,只接收1维矩阵或Series
:param bins: 为array时,代表自定义分箱区间,默认左开右闭
:param labels: 接收array型或False型数据,当labels=False时,只返回分箱的索引。当labels为array时,其长度要和bins相等
"""
user_defined_cut = pd.cut(data.category_34, [0, 0.5, 0.6, 1], labels = ['(0, 0.5]', '(0.5, 0.6]', '(0.6, 1]'])
下面是划分结果
user_defined_cut.hist()
<matplotlib.axes._subplots.AxesSubplot at 0x27b1500ea88>
聚类法:
分箱其实就是一个聚类的应用,我们希望具有相同特征的数据点能够被放置在同一个箱子中,因此可以通过聚类的方式找到具有相同属性的类别。聚类分箱就是用 python 中的 k-means 函数进行划分。
from sklearn.cluster import KMeansnum_clusters = 3 km_cluster = KMeans(n_clusters=num_clusters, max_iter=300, n_init=40,init='k-means++',n_jobs=-1)
result = km_cluster.fit_predict(np.array(data.category_34).reshape(-1,1))
cluster_cut = pd.DataFrame({'Data':np.array(data.category_34),"Categories":result})
cluster_cut.head()
Data | Categories | |
---|---|---|
0 | 0.574799 | 1 |
1 | 0.390684 | 2 |
2 | 0.473826 | 0 |
3 | 0.491736 | 0 |
4 | 0.529865 | 0 |
下面是用聚类方式划分的分布情况
cluster_cut.Categories.hist()
同时在聚类分析中还有一个对聚类效果的评价,这里简单介绍一下,常用的聚类效果评价标准。
对于每个点
数据预处理的分箱操作相关推荐
- mysql 分组排序_Python、PowerBI、Excel、MySQL,都能做?搞清楚数据聚合与分箱
阅读提示 本内容为日常频繁使用的数据处理操作,不涉及底层技术问题,烦请爱钻牛角的杠精绕行. 本内容尽量简单直白.步骤详细,适合数据分析入门.特别喜欢技术语言的大佬们,可自行跳过. 上一篇:数据更新删除 ...
- 【Python】使用Pandas对数值进行分箱操作的4种方法
使用Pandas对数值进行分箱操作的4种方法 方法1:between & loc 方法2:cut 方法3:qcut 方法4:value_counts 补充材料 分箱是一种常见的数据预处理技术, ...
- python 数据处理之分箱操作
什么是分箱? 简单点说就是将不同的东西,按照特定的条件放到一个指定容器里,比如水果 把绿色的放一个篮子里,红色一个篮子等等,这个篮子就是箱,而水果就是数据 颜色就是条件 什么样式的数据要进行分箱 数据 ...
- Pandas 对数值进行分箱操作的4种方法总结对比
分箱是一种常见的数据预处理技术有时也被称为分桶或离散化,他可用于将连续数据的间隔分组到"箱"或"桶"中.在本文中,我们将讨论使用 python Pandas 库 ...
- 三、数据预处理——处理分类型数据:编码与哑变量
三.处理分类型特征:编码与哑变量 点击标题即可获取文章相关的源代码文件哟! 在机器学习中,大多数算法,譬如逻辑回归,支持向量机SVM,k近邻算法等都只能够处理数值型数据,不能处理文字,在sklearn ...
- 6 机器学习 IV与WOE 分箱 过抽样与欠抽样
机器学习 1 IV与WOE 1.1 IV IV,Information Value,指的是信息价值或者信息量. IV可以理解为特征筛选的量化指标, 用于衡量数据特征的预测能力或者在模型预测过程中对预测 ...
- mysql内数据离散化,R语言数据预处理操作——离散化(分箱)
一.项目环境 开发工具:RStudio R:3.5.2 相关包:infotheo,discretization,smbinning,dplyr,sqldf 二.导入数据 # 这里我们使用的是鸢尾花数据 ...
- 数据科学猫:数据预处理 之 数据分箱(Binning)
进击的橘子猫正式改名上线啦! 我的CSDN主页:https://blog.csdn.net/Orange_Spotty_Cat 也欢迎大家搜索微信公众号"进击的橘子猫",我也会定期 ...
- R语言数据预处理——离散化(分箱)
R语言数据预处理--离散化(分箱) 一.项目环境 开发工具:RStudio R:3.5.2 相关包:infotheo,discretization,smbinning,dplyr,sqldf 二.导入 ...
最新文章
- 006_Ajax发送POST请求
- mysql异步非阻塞方式_如何理解swoole异步非阻塞?
- eolinker使用初体验(一)
- protobuf导出golang,调整默认tag的方法
- python中class什么意思_【转载】在python的class中的,self到底是什么?
- 计算机类中外合作办学情况,郑州大学2021年河南省本科一批各专业录取分数统计...
- YOLO v3网络结构分析
- 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(上海),签到题G	Fibonacci
- HTML图片跟随鼠标移动代码,网页怎么实现图片跟随鼠标移动
- project.management.cattle.io not found
- Android高手笔记 - 网络优化
- mac远程连接腾讯云虚拟机
- 激战和ErgoDex DX1
- DataFrame详解——缺失数据处理
- pbootcms开发助手3.15 下载地址
- 金立手机电话录音在哪里找
- 院士领衔,BAT齐聚,世界区块链大会·武汉早鸟票被“秒光”
- html 小程序开发 搭建,云开发(小程序端,web端+博客搭建部署)
- python输出字符串居中_字符串函数第一个大写以及字符串居中显示打印金字塔
- 无线局域网基础知识(一)
热门文章
- minio图片展示(minio图片上传地址为内网,展示时为外网)
- 药物相关 PK(药代动力) 、PD(药效)指标知识
- [DP解题] 切割钢锯条问题
- CNN简单实战:PyTorch搭建CNN对猫狗图片进行分类
- VSCode python 路径设置为 anaconda 路径
- 单面机51小车程序_车辆工程学院举行“51单片机智能小车”电子设计成果答辩展示...
- 互联网、云大数据相关书籍推荐
- HTML:链接的使用
- 本地linux安装php环境,linux安装php环境
- 数据库中的数据完整性(实体完整性、域完整性、引用完整性)