决策树(decision tree) 是一种基于树结构进行决策的机器学习算法。从逻辑角度来看,决策树是许多“if-else”语句的组合;从几何角度出发,决策树就是基于某种准则划分特征空间。而其最终目的是尽可能地是样本分类越分越“纯”。
一般的,一棵决策树包含一个根结点、若干内部结点核若干叶结点;根结点包含样本全集,而叶结点对应于决策结果。其它每个结点对应于一个属性测试,结点中所包含的样本就是根据属性测试的结果划分而来的。从根结点到每个叶结点的路径对应于一个测试序列。
信息熵(information entropy) 是度量样本集合纯度的一种常用指标。若当前样本集合D中第k类样本所占比例为 p k ( k = 1 , 2 , . . . , ∣ Y ∣ ) p_k(k=1,2,...,| \mathcal{Y}|) pk(k=1,2,...,∣Y∣),则集合D的信息熵定义如下:
E n t ( D ) = − ∑ k = 1 ∣ Y ∣ p k log b p k ( b 可取值如 2 , e 等 ) Ent(D)=-\sum_{k=1}^{|\mathcal{Y}|}p_k\log_bp_k \qquad(b可取值如2,e等) Ent(D)=−k=1∑∣Y∣pklogbpk(b可取值如2,e等)
信息熵是自信息 I ( x ) = − log b p ( x ) I(x)=-\log_bp(x) I(x)=−logbp(x) 的期望,能度量变量x的不确定性。 E n t ( D ) Ent(D) Ent(D)的值越小,则D的纯度越高,不确定性越小。
首先简单的给出条件熵的相关概念。条件熵讲的是在变量X给定的情况下,变量Y条件概率分布的信息熵关于X的期望,其度量的是已知随机变量X的条件下随机变量Y的不确定性。条件熵数学表达为: E n t ( Y ∣ X ) = ∑ x i ∈ X p ( x ) E n t ( Y ∣ X = x i ) Ent(Y|X)=\sum\limits_{x_i\in X}p(x)Ent(Y|X=x_i) Ent(Y∣X)=xi∈X∑p(x)Ent(Y∣X=xi)。
接下来,假定离散属性a有 V V V个可能却只 a 1 , a 2 , . . . , a V {a^1,a^2,...,a^V} a1,a2,...,aV,当采用a对集合D进行划分时,将数量 V V V个分支结点,其中第 v v v个分支结点包含D中所有属性a上所有取值为 a v a^v av的样本,记为 D v D^v Dv。根据信息熵的定义式可以得到 D v D^v Dv的信息熵,考虑到不同分支结点所含样本的数量不一样,因此采用赋予权重 ∣ D v ∣ ∣ D ∣ \frac{|D^v|}{|D|} ∣D∣∣Dv∣的方法。将各个分支结点的加权信息熵求和,其实得到的就是集合D在变量属性取 V V V中各个值后的总的信息熵: ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) \sum_{v=1}^{V}\frac{|D^v|}{|D|}Ent(D^v) ∑v=1V∣D∣∣Dv∣Ent(Dv),这其实也就是集合D关于属性a的条件熵。
所以,可计算用属性a划分样本集D进行划分所得的信息增益,也就是划分前后的信息熵之差: G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) Gain(D,a)=Ent(D)-\sum_{v=1}^{V}\frac{|D^v|}{|D|}Ent(D^v) Gain(D,a)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)
信息增益值代表着在已知属性(特征)a的取值后D的不确定性减少量或纯度提升量,一般来说,信息增益值越大,获得的纯度提升也就越大,因此其可以作为决策树算法选择用来划分样本集的属性的依据。
定义为: G a i n r a t i o ( D , a ) = G a i n ( D , a ) I V ( a ) Gain_ratio(D,a)=\frac{Gain(D,a)}{IV(a)} Gainratio(D,a)=IV(a)Gain(D,a)
其中 I V ( a ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ log 2 ∣ D v ∣ ∣ D ∣ IV(a)=-\sum_{v=1}^{V}\frac{|D^v|}{|D|}\log_2\frac{|D^v|}{|D|} IV(a)=−∑v=1V∣D∣∣Dv∣log2∣D∣∣Dv∣称为a的**“固有值”(intrinsic value)** ,当a的可能取值越多,V越大,IV(a)越大,一定程度上减小增益率。
数据集D的基尼指数定义为: G i n i ( D ) = ∑ k = 1 ∣ Y ∣ ∑ k ′ ≠ k p k p k ′ ≠ k = ∑ k = 1 ∣ Y ∣ p k ( 1 − p k ) = 1 − ∑ k = 1 ∣ Y ∣ p k 2 Gini(D)=\sum\limits_{k=1}^{|\mathcal Y|}\sum\limits_{k' \neq k}p_kp_{k' \neq k}=\sum\limits_{k=1}^{|\mathcal Y|}p_k(1-p_k)=1-\sum\limits_{k=1}^{|\mathcal Y|}{p_k}^2 Gini(D)=k=1∑∣Y∣k′=k∑pkpk′=k=k=1∑∣Y∣pk(1−pk)=1−k=1∑∣Y∣pk2,其反映了从样本集中随机抽取两个样本的类别标记不一致的概率。即 G i n i ( D ) Gini(D) Gini(D)值越小,数据集D纯度越高。
数据集D中属性a的基尼指数定义为: G i n i _ i n d e x ( D , a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ G i n i ( D v ) Gini\_index(D,a)=\sum\limits_{v=1}^{V}\frac{|D^v|}{|D|}Gini(D^v) Gini_index(D,a)=v=1∑V∣D∣∣Dv∣Gini(Dv)
剪枝(pruning) 是决策树算法缓解“过拟合”的主要手段,通过主动去掉一些分支来减少把训练集的一些特点当作所有数据都具有的一般性质情况的出现,有 “预剪枝”(prepruning) 和 “后剪枝”(postpruning) 两种基本策略。
d个属性构成一个d维空间,对样本分类意味着在这个坐标空间中寻找不同类样本之间的分类边界。而决策数所形成的分类边界的明显特点:轴平行(axis-parallel),即其分类边界由若干个与坐标轴平行的分段组成。
“多变量决策数”(multivariate decision tree) 使用斜的划分边界。该类决策树中,非叶节点不再是仅对某个属性,而是对属性的线性组合进行测试。学习过程中,不是为每一个非叶结点寻找一个最优划分属性,而是试图建立一个合适的线性分类器。