一、简介
决策树是一种基本的分类与回归方法,其主要优点是模型具有可读性,分类速度快。决策树的学习通常包括三个步骤:特征选择、决策树生成和决策树剪枝,常用的决策树算法有ID3, C4.5 和 CART,下面一一介绍。
二、ID3算法
1、特征选择
特征选择在于选取对训练数据具有分类能力的特征,直观地讲,特征选择的目的是确定训练数据集中哪一个特征作为当前构造决策树的内部节点,ID3 算法用信息增益完成特征选择,那么什么是信息增益呢?
首先介绍熵(entropy)的概念,设 X 是有限的离散随机变量,其概率分布为:
P ( X = x i ) = p i , i = 1 , 2 , . . . , n P(X={{x}_{i}})={{p}_{i}},\text{ }i=1,2,...,n P(X=xi)=pi, i=1,2,...,n (1)
则随机变量 X 的熵定义为:
H ( X ) = − ∑ i = 1 n p i log p i H(X)=-\sum\limits_{i=1}^{n}{{{p}_{i}}\log {{p}_{i}}} H(X)=−i=1∑npilogpi (2)
设(X,Y)为随机变量,其联合分布概率为:
P ( X = x i , Y = y i ) = p i j , i = 1 , 2 , . . . , n , j = 1 , 2 , . . . , m P(X={{x}_{i}},Y={{y}_{i}})={{p}_{ij}},\text{ }i=1,2,...,n,j=1,2,...,m P(X=xi,Y=yi)=pij, i=1,2,...,n,j=1,2,...,m (3)
条件熵 H(Y|X) 表示在已知随机变量 X 的条件下随机变量 Y 的确定性,定义为:
H ( Y ∣ X ) = ∑ i = 1 n p i H ( Y ∣ X = x i ) , p i = P ( X = x i ) , i = 1 , 2 , . . . , n H(Y|X)=\sum\limits_{i=1}^{n}{{{p}_{i}}}H(Y|X={{x}_{i}}),\text{ }{{p}_{i}}=P(X={{x}_{i}}),\text{ }i=1,2,...,n H(Y∣X)=i=1∑npiH(Y∣X=xi), pi=P(X=xi), i=1,2,...,n (4)
信息增益:特征 A 对训练数据集 D 的信息增益 g(D,A)为:
g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)−H(D∣A) (5)
表示集合 D 的熵 H (D)与给定特征 A 的条件下的条件熵 H(D|A) 之差。显然,对于数据集 D 来说,信息增益依赖于特征,不同的特征往往具有不同的信息增益,信息增益大的特征具有更强的分类能力。
ID3 算法中使用信心增益进行特征选择的方法是:对训练数据集 D ,计算其每个特征的信息增益,选择信息增益最大的特征作为当前特征。
2、决策树的生成
ID3 算法的核心是在决策树的各个节点上应用信息增益准则选择特征,递归的构造决策树,具体为:
- 从根节点开始,对样本计算所有特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子节点;
- 对子节点递归地调用以上方法,构建决策树,直到所有的特征的信息增益均很小或者没有特征可以选择为止。
注:ID3 算法只有树的生成,没有剪枝所以容易造成树的过拟合。
三、C4.5 算法
与 ID3 算法相比, C4.5 算法使用信息增益比代替信息增益,信息增益比 g R ( D , A ) {{g}_{R}}(D,A) gR(D,A)定义为:
g R ( D , A ) = g ( D , A ) H ( D ) {{g}_{R}}(D,A)=\frac{g(D,A)}{H(D)} gR(D,A)=H(D)g(D,A) (6)
其他与 ID3 算法无异,不再赘述。
四、CART 算法
分类与回归树(classification and regression tree, CART)模型既可用于分类也可用于回归,CART假设决策树是二叉树,内部节点的特征取值为 “是”或者“否”。CART 算法步骤如下:(在此只讨论分类树)
- 使用基尼指数进行特征选择,同时决定该特征的最优二值切分点;
- 基于训练数据集生成决策树,生成的决策树要尽量大;
- 用验证数据集对已生成的树进行剪枝并选择最有字数,使用损失函数最为剪枝的准则。
1、特征选择
由于 CART 假设决策树是二叉树,所以分类问题就是一个二分类问题,若样本属于第一个类别的概率为 p, 则概率分布的基尼指数为:
G i n i ( p ) = 2 p ( 1 − p ) Gini(p)=2p(1-p) Gini(p)=2p(1−p) (7)
给定样本训练集 D ,其基尼指数为:
G i n i ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 Gini(D)=1-\sum\limits_{k=1}^{K}{(\frac{|{{C}_{k}}|}{|D|}}{{)}^{2}} Gini(D)=1−k=1∑K(∣D∣∣Ck∣)2 (8)
其中 k 是类别数量,Ck是 D 中属于第 k 类的样本子集。如果样本 D 根据特征 A 某一个取值 A 可能被分成 D1 和 D2 两部分,那么在特征 A 条件下,集合 D 的基尼指数为:
G i n i ( D ∣ A ) = ∣ D 1 ∣ ∣ D ∣ G i n i ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ G i n i ( D 2 ) Gini(D|A)=\frac{|{{D}_{1}}|}{|D|}Gini({{D}_{1}})+\frac{|{{D}_{2}}|}{|D|}Gini({{D}_{2}}) Gini(D∣A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2) (9)
CART 算法使用基尼指数进行特征选择的方法是:对训练数据集 D ,计算其每个特征在每个取值下的基尼指数,选择基尼指数最小的特征作为当前特征。
2、决策树的生成
- 设训练数据集为 D ,计算现有特征对 D 的基尼指数,得到每个特征在每个取值下的基尼指数;
- 在所有的取值中选择最小值,将该特征作为最优特征,将该特征此时的取值作为最优切分点,依据最优特征和最优切分点生成两个节点,将训练集依据特征分配到这两个节点中去;
- 对这两个结点递归调用上述过程,直至节点中的样本数量小于阈值或者样本集的基尼指数小于阈值或者没有特征可以选为止。
3、CART 剪枝
- 首先从生产算法产生 的决策树 T0 底端开始不断剪枝,直到 T0 的根节点,行程一个子树序列{T0,T1,…,Tn};
- 通过交叉验证法在独立验证数据集上对子树序列进行测试,从中选择最优子树(基尼指数最小的决策时被认为是最优决策树)。
五、优缺点
优点:
- 简单直观,生成的决策树可以可视化,很直观,可解释性强;
- CART已经可以处理类别值、连续数值,不需要归一化;
- 可以处理多维度输出的分类问题;
缺点:
- 非常容易过拟合;
- 会因为样本发生一点点变化,树的结构发生剧烈变化;
- 寻找最优决策树是一个NP难题,一般采用启发式的方法,容易陷入局部最优;