分箱方法是一种简单常用的预处理方法。所谓“分箱”,实际上就是按照属性值划分的子区间(箱子),把待处理的数据(某列属性值)按照一定的规则放进子区间中。在采用分箱技术时,需要确定的两个主要问题就是:如何分箱以及如何对每个箱子中的数据进行平滑处理。
方法 | 说明 | |
---|---|---|
无监督分箱 | 等宽分箱 | 将变量的取值范围分为k个等宽的区间,每个区间当作一个分箱。即每个箱的区间范围是一个常量,称为箱子宽度。 |
等频分箱 | 把观测值按照从小到大的顺序排列,根据观测的个数等分为k部分,每部分当作一个分箱。比如说 N=10 ,每个区间应该包含大约10%的实例。 | |
自定义分箱 | 用户可以根据需要自定义区间 | |
聚类分箱 | ||
有监督分箱 | Best-KS分箱 | |
卡方分箱 | 有效的特征,不同箱体之间应该具有不同的类分布。卡方分箱就是自底向上,合并类分布相似的相邻箱体,即合并卡方值较小的箱体 | |
最小熵分箱 | 分箱后达到最小熵。使得总体信息的不确定性降到最低 |
分箱的重要性
- 离散特征便于维护,易于模型的迭代
- 离散化后,特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。
卡方分箱
对于精确的离散化,不同箱体内的类分布应该不同。例如按照年龄判断人群是否喜欢打游戏,将年龄划分为年轻人与老年人;如果年轻人有80%的人喜欢打游戏,老年人有20%的喜欢打游戏,所以按照年龄判断人群是否喜欢打游戏是有意义的,如果一个人是年轻人,则他有80%的可能性喜欢打游戏;如果年轻人与老年人都有80%的可能性喜欢打游戏,所以按照年龄判断人群是否喜欢打游戏是没有意义的,因为无论年龄多大他都有80%的可能性喜欢打游戏。
有效的特征,应该是不同箱体之间具有不同的类分布;卡方分箱就是自底向上,合并类分布相似的相邻箱体。如果两个相邻的区间具有非常类似的类分布,则这两个区间可以合并;否则,它们应当保持分开。而低卡方值表明它们具有相似的类分布。
计算步骤
- 初始化
- 卡方分箱就是自底向上,合并类分布相似的相邻箱体
- 构建最初的离散化,即把每一个单独的值视为一个箱体。这样做的目的就是想从每个单独的个体开始逐渐合并。
- 合并:自底向上的合并,直到满足停止条件。
- 计算所有相邻分箱的卡方值:也就是说如果有1,2,3,4个分箱,那么就需要绑定相邻的两个分箱,共三组:12,23,34。然后分别计算三个绑定组的卡方值。
- 从计算的卡方值中找出最小的一个,并把这两个分箱合并:比如,23是卡方值最小的一个,那么就将2和3合并,本轮计算中分箱就变为了1,23,4。
停止条件:
卡方停止的阈值:
分箱数目的限制:
卡方检验
$χ^2$检验是以$χ^2$分布为基础的一种假设检验方法,主要用于分类变量之间的独立性检验。基本思想是根据样本数据推断总体分布与期望分布是否有显著性差异,或者推断两个分类变量是否相关或者独立。一般可以设原假设$H_0$为 :观察频数与期望频数没有差异,或者两个变量相互独立不相关。
其中$A$为观察水平的频数,$E$为期望的频数。当样本比较多的时候$χ^2$服从$k-1个自由度的卡方分布。
计算实例
实际(观察) | 类别1 | 类别2 | 合计 |
---|---|---|---|
分箱1 | $A_{11}$ | $A_{12}$ | $R_1$ |
分箱2 | $A_{21}$ | $A_{22}$ | $R_2$ |
合计 | $C_1$ | $C_2$ | $N$ |
期望频数 | 类别1 | 类别2 |
---|---|---|
分箱1 | $E_{11} = R_1 \times \frac{C_1}{N}$ | $E_{12} = R_1 \times \frac{C_2}{N}$ |
分箱2 | $E_{21} = R_2 \times \frac{C_1}{N}$ | $E_{22} = R_2 \times \frac{C_2}{N}$ |
如果计算结果是所有卡方值中最小的,说明:这组中两个分箱具有最相似的类分布,因此把它们合并。
最小熵分箱
分箱之后,总体信息的不确定性降到最低 。使得分箱后达到最小熵(minimumentropy)
假设样本的
label
可取为$1,…,k$。令$p_{ij}$表示第$i$个分箱内label
取值为$j$的观测的比例,那么第$i$个分箱的熵值为$\sum_{i=1}^k -p_{ij}×log(p_{ij})$。如果第$i$个分箱内样本各类别label
的比例相等,即$p_{11}=p_{12}=p_{1J}=1/J$,那么第$i$个分箱的熵值达到最大值;如果第$i$个分箱内因变量只有一种取值,即某个$p_{ij}$等于1而其他类别的比例等于0,那么第$i$个分箱的熵值达到最小值。令$r_i$表示第$i$个分箱的观测数占所有观测数的比例;那么总熵值为$\sum_{i=0}^k\sum_{j=0}^J(-p_{ij}×logp_{ij})$。需要使总熵值达到最小,也就是使分箱能够最大限度地区分因变量的各类别。
注意:熵的定义是$p \times log \; p$
最小熵分箱与信息增益的联系
信息增益
信息熵表示的是不确定度。均匀分布时,不确定度最大,此时熵就最大。当选择某个特征对数据集进行分类时,分类后的数据集信息熵会比分类前的小,其差值表示为信息增益。信息增益可以衡量某个特征对分类结果的影响大小。信息增益=信息熵-条件熵;换句话说,信息增益代表了在一个条件下,信息复杂度(不确定性)减少的程度
- $g(D,A)$:特征 $A$ 对训练数据集 $D$ 的信息增益
- $H(D)$ :定义为集合 $D$ 的信息熵
- $H(D|A)$:特征 $A$ 给定条件下 $D$ 的条件熵
计算过程
设训练数据集为 $D$,$|D|$ 表示其样本容量,即样本个数。设有 $K$ 个类 $C_k,k=1,2,…,K$ ,$|C_k|$ 为属于类 $C_k$ 的样本个数。设特征 $A$ 有 $n$ 个不同的取值 ${a_1,a_2,…,a_n}$ ,根据特征 $A$ 的取值将 $D$ 划分为$n$个子集 $D_1,D_2,…,D_n$,$|D_i|$ 为 $D_i$ 的样本个数,$\sum_{i=1}^{n}|D_i|=|D|$。记子集 $D_i$ 中属于类 $C_k$ 的样本的集合为 $D_{ik}$,即 $D_{ik}=D_i⋂C_k$,$|D_{ik}|$ 为 $D_{ik}$ 的样本个数。于是信息增益的算法如下:
输入:训练数据集$D$和特征$A$;
输出:特征$A$对训练数据集$D$的信息增益$g(D,A)$。
计算数据集$D$的信息熵$H(D)$
计算特征$A$对数据集$D$的经验条件熵$H(D|A)$
总结
最小熵分箱计算的是$\sum_{j=0}^J\sum_{i=0}^k(-p_{ij}×logp_{ij})$
信息增益计算的是$g(D,A)=H(D)-H(D|A)=H(D)-(-\sum_{i=1}^{n}\frac{|D_i|}{|D|}\sum_{k=1}^{K}\frac{|D_{ik}|}{|D_i|}log_2\frac{|D_{ik}|}{|D_i|})=H(D)+(\sum_{j=1}^{J}\frac{|D_i|}{|D|}\sum_{k=1}^{K}(-p_{ij}×logp_{ij}))$
- 由于$H(D)$是定值,所以最小熵分箱与信息增益只差系数$\frac{|D_i|}{|D|}$
信息增益常用于决策树