前言
学习这个离散化算法的契机是因为身边有个朋友过来问,但网上相关资料又不太多,所以只能死磕论文。具体的论文是:Multi-Interval Discretization of Continuous-Valued Attributes for Classification Learning.
Introduction
对连续变量离散化有以下几个好处,一,避免异常值的影响;二,容易做交叉特征。一般对连续变量进行离散化,有两种比较简单易实施的无监督方法:等频和等距。但是这两种方法都比较粗暴,等距还会受到异常值的影响。
- 等频分箱:按照观测个数均分为 N 等分,每个分箱里面的观测数量基本一致;
- 等距分箱:把观测值从最小值到最大值之间均分为 N 等份,每个区间当作一个分箱;
以上两种无监督的离散方法或多或少都有一些问题,这时,有监督的离散化方法就有了用武之地了。接下来主要介绍一下 MDLP 的思路。
二分离散 (Binary Discretization)
在建立一棵决策树的过程中,连续特征会被逐渐被二分(如果该特征被选中是最佳分割点),这样的方法被应用于 ID3 以及它的变体 GID3*, CART 等中。
依据划分前后熵的变化,选出最佳分割点。对集合 S S S,熵的定义如下:
E n t ( S ) = − ∑ i = 1 k P ( C i , S ) l o g ( P ( C i , S ) ) , Ent(S) = -\sum_{i=1}^k P(C_i, S)log(P(C_i, S)), Ent(S)=−i=1∑kP(Ci,S)log(P(Ci,S)),
其中, C i C_i Ci 是数据集中第 i i i 个类, P ( C i , S ) P(C_i, S) P(Ci,S) 是第 i i i 个类在集合 S S S 中的比例。
当 l o g log log 的底数是 2 时, E n t ( S ) Ent(S) Ent(S) 衡量了表达 S S S 中包含的类所需要的信息量,单位是 bits。
假设选中最佳分割点后,集合 S S S 被分割成子集 S 1 S_1 S1 和 S 2 S_2 S2,则分割后的熵是子集熵的加权平均,如下:
E ( A , T ; S ) = ∣ S 1 ∣ ∣ S ∣ E n t ( S 1 ) + ∣ S 2 ∣ S E n t ( S 2 ) 。 E(A,T;S) = \frac{|S_1|}{|S|} Ent(S_1) + \frac{|S_2|}{S}Ent(S_2)。 E(A,T;S)=∣S∣∣S1∣Ent(S1)+S∣S2∣Ent(S2)。
其中, A A A 是特征, T T