决策树

决策树是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别。

划分选择

决策树学习最关键的在于如何选择最优划分属性。一般而言,随着划分过程不断进行,我们希望决策树的分支节点所包含的样本尽可能属于同一类别,即结点的“纯度”越来越高

信息增益

假定当前样本集合 D 中第 k 类样本所占的比例为 p_k(k = 1, 2, ... , \left | y \right |),则 D 的信息熵定义为

Ent(D) = -\sum_{k = 1}^{\left | y \right |}p_klog_2p_k

假定离散属性 a 有 V 个可能的取值 \{a^1, a^2, ... , a^V\},若使用 a 来对样本集 D 进行划分,则会产生 V 个分支结点,其中第 v 个分支结点包含了 D 中所有在属性 a 上取值为 a^v 的样本,记为 D^v.信息增益定义为

Gain(D, a) = Ent(D) - \sum_{v = 1}^V\frac{\left | D^v \right |}{\left | D \right |}Ent(D^v)

一般而言,信息增益越大,则意味着使用属性 a 来进行划分所获得的“纯度提升”越大

ID3决策树学习算法就是以信息增益为准则来选择划分属性的。

如上表,显然,\left | y \right | = 2,其中,正例占 p_1 = \frac{8}{17},反例占 p_2 = \frac{9}{17},可计算根节点的信息熵为

Ent(D) = -\sum_{k=1}^2p_klog_2p_k = -(\frac{8}{17}log_2\frac{8}{17}+\frac{9}{17}log_2\frac{9}{17}) = 0.998

以属性“色泽”为例,它有 3 个可能的取值:{青绿,乌黑,浅白}。使用该属性对 D 进行划分,则可得到 3 个子集,分别记为:D^1(色泽=青绿), D^2(色泽=乌黑), D^3(色泽=浅白)

子集D^1包含编号为 {1, 4, 6, 10, 13, 17}的 6 个样例,其中正例占 p_1 = \frac{3}{6},反例占 p_1 = \frac{3}{6}D^2包含编号为 {2, 3, 7, 8, 9, 15} 的 6 个样例,其中正、反例分别占 p_1 = \frac{4}{6}, p_2 = \frac{2}{6}D^3包含编号为 {5, 11, 12, 14, 16} 的 5 个样例,其中正、反例分别占 p_1 = \frac{1}{5}, p_2 = \frac{4}{5}.计算出用“色泽”划分之后所获得的 3 个分支结点的信息熵为

Ent(D^1) = -(\frac{3}{6}log_2\frac{3}{6}+\frac{3}{6}log_2\frac{3}{6}) = 1.000
Ent(D^2) = -(\frac{4}{6}log_2\frac{4}{6}+\frac{2}{6}log_2\frac{2}{6}) = 0.918
Ent(D^3) = -(\frac{1}{5}log_2\frac{1}{5}+\frac{4}{5}log_2\frac{4}{5}) = 0.722

于是,得到属性“色泽”的信息增益为

\begin{equation}\begin{split} Gain(D, 色泽) &= Ent(D) - \sum_{v=1}^3\frac{\left | D^v \right |}{\left | D \right |}Ent(D^v)\\ &= 0.998 - (\frac{6}{17} \times 1.000 + \frac{6}{17 \times 0.918} + \frac{5}{17} \times 0.722)\\ &= 0.109 \end{split}\end{equation}

类似的,计算出其他属性的信息增益:

Gain(D, 根蒂) = 0.143
Gain(D, 敲声) = 0.141
Gain(D, 纹理) = 0.381
Gain(D, 脐部) = 0.289
Gain(D, 触感) = 0.006

属性“纹理”的信息增益最大,于是他被选为划分属性.

增益率

增益率定义为

Gain\_ratio(D, a) = \frac{Gain(D, a)}{IV(a)}

其中

IV(a) = -\sum_{v = 1}^V\frac{\left | D^v \right |}{\left | D \right |}log_2\frac{\left | D^v \right |}{\left | D \right |}

C4.5决策树算法使用增益率来选择最优划分属性

基尼指数

数据集 D 的纯度可用基尼值来度量:

Gini(D) = \sum_{k = 1}^{\left | y \right |}\sum_{k^{'} \neq k}p_kp_{k^{'}}

Gini(D) 越小,数据集 D 的纯度越高

属性 a 的基尼指数定义为

Gini\_index(D, a) = \sum_{v = 1}^V\frac{\left | D^v \right |}{\left | D \right |}Gini(D^v)

在候选属性集合 A 中,选择使得划分后基尼指数最小的属性作为最优划分属性

CART 决策树采用“基尼指数”来选择划分属性

剪枝处理

剪枝是决策树学习算法对付“过拟合”的手段。决策树剪枝策略有“预剪枝”和“后剪枝

预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶节点;后剪枝则是先从训练集生成一颗完整的决策树,然后自底向上地对非叶节点进行考察,若将该结点对应的子树替换为叶节点能带来决策树泛化性能的提升,则将该子树替换为叶节点

预剪枝

选取属性“脐部”来对训练集进行划分,并产生 3 个分支。假设我们将这个叶节点标记为“好瓜”。用表 4.2 的验证集对这个单结点决策树进行评估,则编号 {4, 5, 8}的样例被分类正确,另外 4 个样例分类错误。验证集精度为 \frac{3}{7} \times 100\% = 42.9\%

在用属性“脐部”划分之后,图中结点2、3、4分别包含编号 {1, 2, 3, 4}、 {6, 7, 15, 17}、 {10, 16} 的训练样例,分别标记为叶节点“好瓜”、“好瓜”、“坏瓜”。此时,验证集中编号为 {4, 5, 8, 11, 12} 的样例被分类正确,验证集精度为 \frac{5}{7} \times 100\% = 71.4\% > 42.9\%.于是,“脐部”进行划分得以确定。

后剪枝

后剪枝决策树通常比预剪枝决策树保留了更多的分支。一般情形,后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树。但后剪枝过程是在生成完全决策树之后进行的,并且要自底向上地对树中所有非叶节点进行逐一考察,因此其训练时间开销要比未剪枝决策树和预剪枝决策树都要大得多

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值