决策树

分类模型,由结点和有向边组成,结点分为内部结点和叶子结点,分别代表特征和类别。用决策树进行预测的方法为将特征取值放入根结点,然后按取值分配到子结点上,直至到达叶子结点。

熵和信息增益:

用于表示离散随机变量的不确定性,假设离散随机变量X的取值集合和分布列分别为

\{x_i\}_{i=1}^k,\;\;\textup{P}(X=x_i)=p_i,

则X的熵定义为

\textup{H}(X)=-\sum\limits_{i=1}^{k}p_i\textup{log}(p_i),

log的底数是2或e,分别对应单位bit或nat,有H(X)∈[0,logn]。

条件熵表示一个随机变量在另一个随机变量已知的条件下的不确定性,假设另有离散随机变量Y(有l个取值),则定义

\textup{H}(X|Y=y_j)=-\sum\limits_{i=1}^{k}P(X=x_i|Y=y_j)\textup{log}(P(X=x_i|Y=y_j)),

定义给定Y的条件下X的条件熵为

\textup{H}(X|Y)=\sum\limits_{j=1}^{l}P(Y=y_j)\textup{H}(X|Y=y_j).

互信息定义为

\textup{I}(X;Y)=\textup{H}(X)-\textup{H}(X|Y)=\textup{H}(Y)-\textup{H}(Y|X),

表示当一个随机变量已知导致的另一个随机变量不确定性的变化量。

信息增益代表样本熵互信息的估计值,假设有样本

D=\{(\vec{a}_1,b_1),...,(\vec{a}_n,b_n)\},

其中因变量是Y,特征有多个,假设其中一个特征X,则给定X下D的信息增益为

g(D,X)=\textup{H}(D)-\textup{H}(D|X),

其中

\textup{H}(D)=-\sum\limits_{j}\frac{|\{h:b_h=y_j,1 \leqslant h \leqslant n \} |}{|D|}\textup{log}\frac{|\{h:b_h=y_j,1 \leqslant h \leqslant n \} |}{|D|}

表示互信息中H(Y)的估计值,

\textup{H}(D|X)=\sum\limits_{i}[\frac{|\{h:a_h^X=x_i,1 \leqslant h \leqslant n \} |}{|D|} ] (-\sum\limits_{j} \frac{|\{h:b_h=y_j,a_h^X=x_i,1 \leqslant h \leqslant n\}|}{|\{h:a_h^X=x_i,1 \leqslant h \leqslant n \} |} \textup{log} \frac{|\{h:b_h=y_j,a_h^X=x_i,1 \leqslant h \leqslant n\}|}{|\{h:a_h^X=x_i,1 \leqslant h \leqslant n \} |})

表示互信息中H(Y|X)的估计值。a_h^X表示向量a_h的对应特征X的那个分量,|·|表示集合元素个数。若记

D_i=\{h:a_h^X=x_i,1 \leqslant h \leqslant n \},

则有

\textup{H}(D|X)=\sum\limits_{i}\frac{|D_i|}{|D|} \textup{H}(D_i).

信息增益越大,表示用特征X对样本进行划分后样本的混乱程度降低的越多(H(D)表示没用X时的混乱程度,H(D|X)表示知道X之后D的混乱程度,前者减去后者就是知道X后D的混乱程度下降了多少)。

信息增益率(信息增益比)定义为

g_R(D,X)=\frac{g(D,X)}{\hat{H}(X)},

其中

\hat{\textup{H}}(X)=-\sum\limits_{i}\frac{|D_i|}{|D|} \textup{log}(\frac{|D_i|}{|D|}).

基尼指数定义为

\textup{Gini}(Y)=\sum\limits_{j=1}^{l}p_j(1-p_j)=1-\sum\limits_{j=1}^{l}p_j^2,

即错误分类的概率的期望,也等于有放回地任取两个样品二者类别不同的概率。数据集D的基尼指数为

\textup{Gini}(D)=1-\sum\limits_{j=1}^{l}\frac{|\{h:b_h=y_j,1 \leqslant h \leqslant n \}|}{|D|}^2,

属性X取x时的基尼指数为

\textup{Gini}(D,X=x)=\frac{|D_1|}{|D|} \textup{Gini}(D_1) + \frac{|D_2|}{|D|} \textup{Gini}(D_2),

其中D1是X=x的样本子集,D2=D\D1。

(没想通的问题:为什么不能像信息增益那样定义Gini(D,X)=∑{i=1}^k |D_i|/|D| Gini(D_i)?其中D_i是X=xi的样本子集。)

熵越小越好,信息增益和信息增益率越大越好,基尼指数越小越好。注意以上这些指标只是作用在一个数据集上时是根据因变量取值来划分集合,作用在数据集和特征上时外层根据特征取值划分集合,内层根据因变量取值划分集合。

决策树:

现有训练集

D=\{(\vec{a}_1,b_1),...,(\vec{a}_n,b_n)\}

和属性集

A=\{X^{(1)},...,X^{(d)}\},

决策树生成算法为:

1. 设置根结点并令其为当前结点,结点上的数据集和特征集为

D'=\{1,2,...,n\},\;\;A'=A.

2. 若当前结点上的数据集D'中的样品的类别全部都是同一类,则此结点成为叶子结点不再向下延伸,并将此类作为结点类标记;若当前结点上的特征集A'=∅,则此结点成为叶子结点不再向下延伸,并将D'中个数最多的类作为此结点类标记。

3. 上一步中的两种情况都不出现的情况下,为当前结点选择最佳划分属性X^(z),设其在样本D上的取值集合为

\{x_1^{(z)},...,x_{n_z}^{(z)}\},

按X^(z)取值将当前数据集D'划分为若干不交子集并生成同样数量的子结点,每个子结点上的数据集和特征集为

D_i'=\{m:m\in D', a^{(z)}_m=x^{(z)}_i\},\;\;A_i'=\{A' \setminus X^{(z)}\},\;\;i=1,2,...,n_z.

其中a_m^(z)表示向量a_m的第z个分量。注意若D_i'=∅则直接将子结点设为叶子结点,其类标记为D'中个数最多的类,若D_i'≠∅,则子结点为分支结点,令上述数据集和特征集为子结点上的数据集D'和特征集A'。

4. 对每个末端非叶子结点重复2~3,直至所有结点都变成叶子结点。

总结:决策树的每个非叶子结点上都有一个属性、一个数据集、一个特征集,属性用于划分当前结点上的数据集从而分出若干子结点,子结点上的数据集就是按当前结点上的属性取值划分当前结点上的数据集产生的子集。子结点上的类别取为子结点上的数据集中个数最多的类。对离散属性,子结点上的特征集是当前结点特征集去掉当前结点上的属性。注意当前结点上类别是类别1,子结点上的类别可能是类别1也可能是类别2,因为当前结点中个数最多的是类别1,但是其中也包含类别2,当前结点上的数据集分到子结点上的子集中可能个数最多的是类别2。若当前结点上的数据集全部都是同一类别则再往下分所有结点都是此类别,因此没有分的必要,因此直接将当前结点取成叶子结点。

划分属性选择:

上面的步骤中选择最佳划分属性X^(z)是关键的一步,我们希望随着划分的进行,决策树的分支结点包含的样本可以尽可能属于同一类别。

ID3算法使用信息增益来选择划分属性,具体的,对D'和任意X∈A',我们计算信息增益H(D'|X),选择使得信息增益最大的特征X作为划分属性。缺点:信息增益准则回对可取值数目较多的属性有所偏好(因为logx函数的特点(上凹)?),且只能用于特征离散的情况。

C4.5算法作为ID3算法的改进,使用信息增益率来选择最优划分属性,信息增益率对可取值数目较少的属性有所偏好,因此C4.5算法不是直接使用信息增益率最大的属性作为划分属性,而是考虑信息增益高于平均水平的属性,从中挑选出信息增益率最高的属性作为最优划分属性。此外C4.5还可以处理连续的特征,方式为如下二分法:

假设连续属性c在样本D上出现了m个不同取值,将其从小到大排列记为

\{c^1,...,c^m\},

基于划分点t可将D分为

D_t^+,\;\;D_t^-

两部分,前者是D中属性c取值大于t的样本点集合,后者是D中属性c取值小于等于t的样本点集合。由于对任意

t\in [c^{i},\;\;c^{i+1})

而言划分结果是一样的,因此我们取候选的划分点为

T_c=\{\frac{c^i+c^{i+1}}{2}|1\leqslant i \leqslant n-1\}.

g(D,c,t)=\textup{H}(D)-\sum\limits_{\lambda\in \{-,+\}} \frac{|D_t^{\lambda}|}{|D|}\textup{H}(D_t^{\lambda}),

定义连续属性c的信息增益为

g(D,c)=\mathop{\mathrm{max}} \limits_{t\in T_c} g(D,c),

则可以在选择划分属性的同时选择最优划分点。

注意一个属性可以在同一个决策树中出现不止一次,但是离散特征在当前结点上出现时就不会在当前结点的后代结点上再次出现,而C4.5(以及下面的CART)中连续特征则可以在当前结点和当前结点的后代结点上出现(二者分点不同)

CART算法既可以处理分类问题,也可以处理回归问题,且属性可以是离散也可以是连续。

对分类问题,其通过基尼指数来选择最优划分属性,属性连续时参照C4.5处理连续属性的方式,属性离散时,令

\textup{Gini}(D',X)=\mathop{\mathrm{max}} \limits_{x} \textup{Gini}(D',X=x),

则最优划分属性为

\mathop{\mathrm{arg\;max}} \limits_{X\in A'} \textup{Gini}(D',X).

对回归问题,回归树将特征空间划分为多个超矩形,预测时看自变量取值落在哪个矩形内,则用训练集上这个矩形内因变量的平均值作为预测值。因此问题关键在于如何划分特征空间,假设有d个特征:

1. 取当前子区域为

\textup{R}'=\textup{R}^d.

2. 令

\textup{R}_1^{(j)}=\{X^{(j)}\leqslant s\},\;\;\textup{R}_2^{(j)}=\{X^{(j)}>s\},

对当前子区域R',通过解

\mathop{\mathrm{max}} \limits_{j,s} [ \mathop{\mathrm{min}} \limits_{d_1} \sum\limits_{i:\vec{x}_i \in \textup{R}' \cap \textup{R}_1^{(j)}}(y_i-d_1)^2+\mathop{\mathrm{min}} \limits_{d_2} \sum\limits_{i:\vec{x}_i \in \textup{R}' \cap \textup{R}_2^{(j)}}(y_i-d_2)^2],

得到分割变量j和分点s(方式为遍历j扫描s)。

3. 将当前子区域划分为两个子区域

\textup{R}'\cap \textup{R}_1^{(j)},\;\;\textup{R}'\cap\textup{R}_2^{(j)},

用子区域内因变量平均值作为模型预测值。

4. 分别令当前子区域R'为上一步中得到的两个子区域,然后重复2和3直至满足终止条件(如当前子区域样本量达到预先设定的阈值、节点上的拟合误差小于实现给定值等)。

ID3和C4.5每个结点可以分出多条边(多叉树),CART每个结点只能分出两条边(二叉树)。

剪枝(pruning):

决策树解决过拟合问题的方法。决策树学习中为了正确分类训练样本有时会产生过多分支,学习了一些训练集具有而总体不具有的性质,因此可以通过去掉一些分支抑制过拟合,这一操作成为剪枝。剪枝方法分为预剪枝和后剪枝两种。

预剪枝是在决策树生成过程中进行的,在取定最优划分属性后,首先看用这个属性进行划分是否能提高泛化性能,若能则划分,生成子结点,若不能则不划分,当前结点变成叶子结点。

后剪枝是先训练生成一棵决策树,然后自下而上考察每个非叶子结点,若将其变成叶子结点(此结点的后代结点全部舍弃)能提升泛化性能则将其变为叶子结点。

以上“提升泛化性能”可以通过训练决策树之前取定验证集来判断,验证集精度上升则认为泛化性能提升。

缺失值处理:

对数据中某些属性存在缺失的情况,不能简单地放弃不完整的样品,因为实际问题中可能缺失情况是样品1缺属性3,样品2缺属性9,样品3缺属性1等等,不完整的样品全部去掉会损失大量样品。对决策树算法的训练数据,我们考虑属性X时,就将样本限制在X没有缺失的样本子集\tilde{D}

X没有缺失的样本子集、该子集中因变量取y_j的子集、该子集中属性X取x_i的子集记为

\tilde{D},\;\;\tilde{D}^j,\;\;\tilde{D}_i,

我们用以上三者代替

D,\;\;D^j,\;\;D_i,

例如信息增益

g(D,X)=\textup{H}(D)-\textup{H}(D|X)=\textup{H}(D)-\sum\limits_{i}\frac{|D_i|}{|D|} \textup{H}(D_i)

此时改为

g(D,X)=\frac{|\tilde{D}|}{|D|}[\textup{H}(\tilde{D})-\sum\limits_{i}\frac{|\tilde{D}_i|}{|\tilde{D}|} \textup{H}(\tilde{D}_i)],

其中

\textup{H}(\tilde{D})=-\sum\limits_{j} \frac{|\tilde{D}^j|}{|\tilde{D}|} \textup{log} \frac{|\tilde{D}^j|}{|\tilde{D}|}.

若某样品在划分属性X上取值已知,则将其放入与该取值对应的子结点,否则同时放入所有子结点。

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值