本站原创文章,转载请说明来自《老饼讲解-机器学习》www.bbbdata.com
变量分箱指的是对连续变量进行分组,它可以使变量离散化,增强模型泛化能力与方便分析
本文介绍常见的变量自动分箱方法,例如等频分箱、等距分箱、决策树分箱、卡方分箱与KS分箱等等
通过本文,可以了解变量分箱是什么,常用的变量自动分箱算法有哪些,以及它们的原理与效果
本节介绍变量自动分箱是什么,以及有哪些常用的自动分箱方法
什么是自动分箱
在机器学习中,变量分箱是指将连续的数值变量进行分组,使它成为离散变量
而自动分箱,则是指通过算法或规则,将连续变量自动地分组,即自动离散化
按规则进行自动分箱是比较基本的分箱方法,常用的自动分箱规则有:
1. 等频分箱
2. 等距分箱
除了等频、等距分箱外,还有自动分箱的算法,常用的自动分箱算如下:
1. 决策树分箱
2. KS分箱
3. 卡方分箱
自动分箱可以使变量自动离散化,在一些模型的“建模自动化”中成为必不可少的环节
自动规则分箱(等频等距)一般软件中( 例如python)都会有自带的函数或包,
而算法分箱(决策树分箱、KS分箱、卡方分箱)则一般没有官方的包,需要自己写代码实现
本节介绍等频与等距两种常用的自动分箱规则,以及它们的代码实现
等频分箱
什么是等频分箱
等频分箱是指按相等频数进行分箱,即分组后每组的样本一样多,如下所示:
例如共50个样本,,频数设为10
则每10个样本为一箱,分箱结果为:
什么是等距分箱
等距分箱是指按固定距离进行分箱,每组的组距一致,如下所示:
即设定好组距后,根据组距,最后分出多少个箱就多少个箱
例如范围在, 组距为1,则按分为10个箱
等频等距分箱-代码实现
在python中可以利用pandas来实现等频、等距分箱
具体代码如下:
import pandas as pd
from sklearn.datasets import load_iris
# 实现等频、等距分箱
iris = load_iris() # 加载iris数据
x = iris.data[:,0] # 取第0个变量作为分箱变量
# 实现等频分箱
freq_bins = pd.qcut(x , q=5) # 对x进行等频分箱
print("\n等频-分箱结果:", freq_bins.categories) # 分箱结果
print("\n等频-样本箱号:", freq_bins.codes) # 分箱后样本的箱号
# 实现等距分箱
bins = pd.cut(x , bins=5) # 对x进行等距分箱
print("\n等距-分箱结果:", bins.categories) # 分箱结果
print("\n等距-样本箱号:", bins.codes) # 分箱后样本的箱号
代码运行结果如下:
在python中使用pandas的qcut、cut就可以等频、等距分箱
如图所示,等频分箱后每个组内的样本是一样多的,而等距分箱后的每个箱的组距一样
本节介绍决策树分箱、最大KS分箱、卡方分箱等自动分箱算法是什么
决策树分箱
决策树分箱是指用变量x与y构建决策树,使用决策树最后的叶子节点作为分箱结果
如下,使用x、y构建决策树,叶子节点就是分箱的结果
最后得到三个分箱:【<=5.45 】、(5.45,6.15】、【>6.15】
备注:详细算法流程与代码实现可参考《一篇入门之-决策树分箱》
最大KS分箱
最大KS分箱是基于KS值来进行分箱的一种方法,它只用于二分类
它先把所有样本初始化为一个分箱,然后根据KS点对分箱不断切割,直到数据分为n个分箱
如下,KS分箱就是根据最大KS值所在处,将分箱不断一分为二,直到达到目标分箱个数
备注:详细算法流程与代码实现可参考《KS分箱》
卡方分箱
卡方分箱是基于卡方值进行分箱的一种方法
卡方分箱先初始化m个分箱,然后不断合并分箱,直到分箱数只剩n个
那么,每次合并哪两个分箱?
卡方分箱用卡方值判断哪两个分箱的类别分布最没区分度,就合并哪两个分箱。
如下,卡方分箱先初始化多个分箱,然后根据卡方值不断进行合并,直到只乘目标分箱个数
备注:详细算法流程与代码实现可参考《一篇入门之-卡方分箱》
好了,以上就是等频等距分箱,以及其它自动分箱算法的介绍了~
End