决策树-ID3、C4.5

决策树-ID3、C4.5

决策树-CART 分类树

决策树-CART 回归树

决策树后剪枝



决策树可用于分类(\(ID3、C4.5、CART\) ),也可用于回归(\(CART\)),同时适合集成学习比如随机森林。

决策树学习分3步:特征选择、决策树的生成、剪枝



一、分类决策树模型与学习

1.决策树模型

分类决策树模型由结点和有向边组成

结点分两部分:内部节点、叶节点。内部结点表示一个特征或属性,叶节点表示一个类



2.决策树学习

假设训练集

\[D=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\} \]

其中,\(x_i=(x_i^{(1)},x_i^{(2)},...,x_i^{(n)})\) 为输入实例(特征向量),\(n\) 为特征个数,\(y_i\in \{1,2,...,K\}\) 为类标记,\(N\) 为样本容量。

学习目标:构建决策树模型,能对实例进行正确分类。

学习本质:从训练集中估计条件概率模型。

决策树学习用损失函数表示这一目标,决策树损失函数是正则化的极大似然函数

决策树常用算法:\(ID3\)\(C4.5\)\(CART\) ,结合这些算法分别叙述特征选择、决策树的生成、剪枝。



二、特征选择

特征选择的准则通常是:信息增益、信息增益比、基尼系数。


1.信息增益

:度量随机变量的不确定性,越不确定,熵就越大。随机变量 \(X\) 的熵定义为

\[H(X) = -\sum_{i=1}^{n} p_i logp_i \]

其中 \(n\) 代表 \(X\)\(n\) 种不同的离散取值。而 \(p_i\) 代表 \(X\) 取值为 \(i\) 的概率,通常 \(log\) 是以 \(2\)\(e\) 为底的对数。

由定义可知,熵只依赖 \(X\) 的分布,与 \(X\) 的取值无关。所以也可将随机变量 \(X\)​ 的熵定义为

\[H(p) = -\sum_{i=1}^{n} p_i logp_i \]

\(1\)当随机变量只有两个取值 \(1,0\) 时。

:如果取值概率各为 \(\frac{1}{2}\) 时, \(X\) 的熵最大,\(X\) 具有最大的不确定性为:

\(H(X) = -\sum_{i=1}^{2} p_i logp_i = -(\frac{1}{2} log \frac{1}{2} + \frac{1}{2} log \frac{1}{2}) = log2\)

如果一个值的概率大于 \(\frac{1}{2}\),另一个值的概率小于 \(\frac{1}{2}\),则不确定性减小,对应的熵减小。比如一个概率 \(\frac{1}{3}\),一个概率 \(\frac{2}{3}\),则熵为:

\(H(X) = -\sum_{i=1}^{2} p_i logp_i = -(\frac{1}{3} log \frac{1}{3} + \frac{2}{3} log \frac{2}{3}) = log3-\frac{2}{3}log2 < log2\)

\(H(p)\) 随概率 \(p\) 变换的曲线(以 \(2\) 为底)。


联合熵:已知熵容易推广到联合熵,这里给出两个变量 \(X\)\(Y\) 的联合熵:

\[H(X,Y) = -\sum_{i=1}^{n}p(x_i,y_i)logp(x_i,y_i) \]

条件熵:已知联合熵容易推广到条件熵,条件熵表示已知 \(Y\) 的条件下 \(X\) 的不确定性。

\[H(X|Y) = -\sum_{i=1}^{n} p(x_i,y_i) log p(x_i|y_i) = \sum_{j=1}^{n}p(y_j)H(X|y_j) \]

信息增益:也称互信息,表示已知 \(Y\) 的条件下 \(X\) 不确定性减少的程度。

\[g(X,Y) = H(X) - H(X|Y) \]


信息增益算法:

训练集为 \(D\)\(|D|\) 表示样本容量,即样本个数。设有 \(K\) 个类 \(C_k\)\(k=1,2,...,K\)\(|C_k|\) 为类 \(C_k\) 的样本个数,\(\sum_{k=1}^{K} |C_k| = |D|\)

设特征 \(A\)\(n\) 个不同的取值 \(\{a_1,a_2,...a_n\}\),根据特征 \(A\) 的取值将 \(D\) 划分为 \(n\) 个子集 \(D_1,D_2,...,D_n\)\(|D_i|\)\(D_i\) 的样本个数,\(\sum_{i=1}^{n} |D_i| = |D|\)。记子集 \(D_i\) 中输入类 \(C_k\) 的样本集合为 \(D_{ik}\),即 \(D_{ik} = D_i \cap C_k\)\(|D_{ik}|\)\(D_{ik}\) 的样本个数。

输入:训练集 \(D\) 和 特征 \(A\)

输出:特征 \(A\) 对训练集 \(D\) 的信息增益 \(g(D, A)\)

① 计算数据集 \(D\) 的熵 \(H(D)\)。(也称经验熵)

\[H(D) = -\sum_{k=1}^{K} \frac{|C_k|}{|D|} log_2 \frac{|C_k|}{|D|} \]

② 计算特征 \(A\) 对数据集 \(D\) 的条件熵 \(H(D|A)\)​。(也称经验条件熵)

\[H(D|A) = \sum_{i=1}^{n} \frac{|D_i|}{|D|} H(D_i) = -\sum_{i=1}^{n} \frac{|D_i|}{|D|} \sum_{k=1}^{K} \frac{|D_{ik}|}{|D_i|} log_2 \frac{|D_{ik}|}{|D_i|} \]

③ 计算信息增益。

\[g(D,A) = H(D)-H(D|A) \]


\(2\) 下表由15个样本组成的贷款申请训练数据。包括4个特征:

年龄:青年、中年、老年;

工作:是、否;

房子:是、否;

信贷:非常好、好、一般。

ID 年龄 有工作 有自己的房子 信贷情况 类别
1 青年 一般
2 青年
3 青年
4 青年 一般
5 青年 一般
6 中年 一般
7 中年
8 中年
9 中年 非常好
10 中年 非常好
11 老年 非常好
12 老年
13 老年
14 老年 非常好
15 老年 一般

解:计算熵 \(H(D)\)

\[H(D) = -\frac{9}{15} log_2 \frac{9}{15}- \frac{6}{15} log_2 \frac{6}{15} = 0.971 \]

然后计算各特征对数据集 \(D\) 的信息增益。分别以 \(A_1,A_2,A_3,A_4\) 表示年龄、有工作、有房子、信贷 \(4\) 个特征。

\[\begin{aligned} g(D,A_1) & = H(D) - [\frac{5}{15}H(D_1) + \frac{5}{15}H(D_2) + \frac{5}{15}H(D_3)] \\ & = 0.971 - [\frac{5}{15}(-\frac{2}{5} log_2 \frac{2}{5} - \frac{3}{5} log_2 \frac{3}{5}) + \\ & \frac{5}{15}(-\frac{3}{5} log_2 \frac{3}{5} - \frac{2}{5} log_2 \frac{2}{5}) + \frac{5}{15}(-\frac{4}{5} log_2 \frac{4}{5} - \frac{1}{5} log_2 \frac{1}{5})] \\ \\ & = 0.971-0.888 = 0.083 \end{aligned} \]

这里 \(D_1,D_2,D_3\) 分别是 \(D\)\(A_1\) (年龄)取值为青年、中年、老年的样本子集。

\[\begin{aligned} g(D,A_2) & = H(D) - [\frac{5}{15} H(D_1) + \frac{10}{15} H(D_2)] \\ & = 0.971-[\frac{5}{15} \times 0 + \frac{10}{15}(-\frac{4}{10}log_2 \frac{4}{10} - \frac{6}{10}log_2 \frac{6}{10})] = 0.324 \end{aligned} \]

\[\begin{aligned} g(D, A_3) & = 0.971-[\frac{6}{15} \times 0 + \frac{9}{15}(-\frac{3}{9} log_2 \frac{3}{9}) - -\frac{6}{9} log_2 \frac{6}{9})] \\ \\ & = 0.971-0.551 = 0.42 \end{aligned} \]

\[g(D, A_4) = 0.971-0.608 = 0.363 \]

由于 \(A_3\) 的信息增益最大,所以选择 \(A_3\) 为最优特征。


2.信息增益比

以信息增益划分训练集的特征,容易偏向选择取值较多的特征。使用信息增益比可以对矫正这个问题。

信息增益比:

信息增益比 \(g_R(D,A)\) 为信息增益 \(g(D,A)\) 与训练集 \(D\) 关于特征 \(A\) 的值的熵 \(H_A(D)\) 之比。

\[g_R(D,A) = \frac{g(D,A)}{H_A(D)} \]

其中,\(H_A(D)=-\sum_{i=1}^{n} \frac{|D_i|}{|D|} log_2 \frac{|D_i|}{|D|}\)\(n\) 为特征 \(A\) 的取值个数。



三、决策树的生成

1. ID3 算法

算法核心:用信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点,递归地构建决策树,直到信息增益都很小或没有特征可以选择为止


输入:训练集 \(D\),特征集 \(A\) 阈值 \(\varepsilon\)

输出:决策树 \(T\)

① 若 \(D\) 中所有实例属于同一类 \(C_k\),则 \(T\) 为单结点树,并将类 \(C_k\) 作为该结点的类标记,返回 \(T\)

② 若 \(A=\phi\),则 \(T\) 为单节点树,并将 \(D\) 中实例数最大的类 \(C_k\) 作为该结点的类标记,返回 \(T\)

③ 否则,按信息增益算法计算 \(A\) 中各特征对 \(D\) 的信息增益,选择信息增益最大的特征 \(A_g\)

④ 如果 \(A_g\) 的信息增益小于阈值 \(\varepsilon\),则置 \(T\) 为单结点树,并将 \(D\) 中实例数最大的类 \(C_k\) 作为该结点的类标记,返回 \(T\)

⑤ 否则,对 \(A_g\) 的每一可能值 \(a_i\),依 \(A_g=a_i\)\(D\) 分割为若干非空子集 \(D_i\),将 \(D_i\) 中实例数最大的类作为标记,构建子结点,由节点及子结点构成树 \(T\),返回 \(T\)

⑥ 对第 \(i\) 个子结点,以 \(D_i\) 为训练集,以 \(A-\{A_g\}\) 为特征集,递归地调用步骤 \((1) \thicksim (5)\),得到子树 \(T_i\),返回 \(T_i\)


\(3\)对例 \(2\) 中的数据,利用 \(ID3\) 算法建立决策树。

解:由于特征 \(A_3\)(有自己的房子)信息增益最大,所以 \(A_3\) 作为根节点,

由于 \(A_3\) 有两个取值,所以将数据集 \(D\) 分为 \(D_1\)(是)和 \(D_2\)(否)。 \(D_1\) 只有同一类样本点,即允许贷款,所以是叶节点。

\(D_2\)​ 从 \(A_1、A_2、A_4\)​ 中选择新的特征。计算各特征信息增益:

\[\begin{aligned} & g(D_2,A_1) = H(D_2)-H(D_2|A_1) = 0.918-0.667 = 0.251 \\ & g(D_2,A_2) = H(D_2)-H(D_2|A_2) = 0.918 \\ & g(D_2,A_4) = H(D_2)-H(D_2|A_4) = 0.474 \end{aligned} \]

选择特征 \(A_2\)(有工作)作为结点的特征。

由于 \(A_2\) 两个取值,所以数据集 \(D_2\) 划分为两个子结点:一个对应“是”(有工作)的子结点,包含 \(3\) 个样本,属于同一类,即允许贷款,所以是叶结点;另一个对应“否”(无工作)的子结点,包含 \(6\) 个样本,也属于同一类,即不允许贷款,所以也是叶结点。

最终生成的决策树:


2. C4.5 算法

\(C4.5\)\(ID3\) 进行改进,用信息增益比来选择特征。


输入:训练集 \(D\),特征集 \(A\) 阈值 \(\varepsilon\)

输出:决策树 \(T\)

① 若 \(D\) 中所有实例属于同一类 \(C_k\),则 \(T\) 为单结点树,并将类 \(C_k\) 作为该结点的类标记,返回 \(T\)

② 若 \(A=\phi\),则 \(T\) 为单节点树,并将 \(D\) 中实例数最大的类 \(C_k\) 作为该结点的类标记,返回 \(T\)

③ 否则,按信息增益算法计算 \(A\) 中各特征对 \(D\) 的信息增益,选择信息增益最大的特征 \(A_g\)

④ 如果 \(A_g\) 的信息增益比小于阈值 \(\varepsilon\),则置 \(T\) 为单结点树,并将 \(D\) 中实例数最大的类 \(C_k\) 作为该结点的类标记,返回 \(T\)

⑤ 否则,对 \(A_g\) 的每一可能值 \(a_i\),依 \(A_g=a_i\)\(D\) 分割为若干非空子集 \(D_i\),将 \(D_i\) 中实例数最大的类作为标记,构建子结点,由节点及子结点构成树 \(T\),返回 \(T\)

⑥ 对第 \(i\) 个子结点,以 \(D_i\) 为训练集,以 \(A-\{A_g\}\) 为特征集,递归地调用步骤 \((1) \thicksim (5)\),得到子树 \(T_i\),返回 \(T_i\)


3. ID3 的不足

\(ID3\) 不能处理连续值,比如长度、密度都是连续的,无法在 \(ID3\) 运用。

\(ID3\) 用信息增益选择特征容易偏向取值较多的特征。在相同条件下,取值较多的特征比取值较少的特征信息增益大。比如一个变量 \(2\) 个值,各位 \(\frac{1}{2}\),另一个变量 \(3\) 个值,各为 \(\frac{1}{3}\),其实它们都是完全不确定的变量,但取 \(3\) 个值比取 \(2\) 个值的信息增益大。

\(ID3\) 不能处理缺失值

④ 没考虑过拟合问题。


4. C4.5 对 ID3 的改进

1.信息增益比

\(C4.5\)\(ID3\) 进行改进,用信息增益比来选择特征。


2.连续值处理

连续特征的取值数目是无限的,不能直接根据连续特征的取值来对结点进行划分,需连续特征离散化。最简单的二分法

① 将 \(n\) 个连续值从小到大排列。

给定样本集 \(D\) 和连续特征 \(a\),特征 \(a\)\(D\) 上有 \(n\) 个不同的取值,经从小到大排列,记为 \(\{a^1,a^2,...,a^n\}\)

② 取相邻两样本值的中位点(平均值),得到 \(n-1\) 个划分点。

特征 \(a\) 的第 \(i\) 个划分点记为 \(T_a = \frac{a^i+a^{i+1}}{2}\),然后,就可像离散特征值一样来考察这些划分点。

用信息增益最大的点作为最优的划分点进行样本集的划分。

用信息增益比来选择特征,构建决策树。

注意:

  • 与离散特征不同,若当前结点为连续特征,该特征还可作为后代结点的划分特征
  • 选择划分点用信息增益,选择特征用信息增益比。

\(4\)西瓜数据集上的两个连续特征 “密度”、"含糖率"。

编号 密度 含糖率 好瓜
1 0.697 0.460
2 0.774 0.376
3 0.634 0.264
4 0.608 0.318
5 0.556 0.215
6 0.403 0.237
7 0.481 0.149
8 0.437 0.211
9 0.666 0.091
10 0.243 0.267
11 0.245 0.057
12 0.343 0.099
13 0.639 0.161
14 0.657 0.198
15 0.360 0.370
16 0.593 0.042
17 0.719 0.103

① 对连续特征 “密度”,将 \(17\) 个样本值从小到大排列。

② 取相邻两样本值的中位点,得到 \(16\)​ 个划分点。

\[T_{密度} = \{0.244,0.294,0.351,0.381,0.420,0.459,0.518,0.574,0.600,0.621,0.636,0.648,0.661,0.681,0.708,0.746\} \]

\[T_{含糖率} = \{0.049,0.074,0.095,0.101,0.126,0.155,0.179,0.204,0.213,0.226,0.250,0.265,0.292,0.344,0.373,0.418\} \]

③ 选取信息增益最大的点作为最优的划分点进行样本集的划分。

所以特征 “密度” 的信息增益为 \(0.262\),对应划分点 \(0.381\)。密度小于 \(0.381\) 的是坏瓜,大于 \(0.381\) 是好瓜。

特征 “含糖率” 的信息增益为 \(0.349\),对应划分点 \(0.216\)

④ 用信息增益比来选择特征,构建决策树。


3.缺失值处理

主要解决两个问题:

① 如何在数据缺失的情况下进行划分特征选择。

② 给定划分特征,若样本在该特征上的值缺失,如何对样本进行划分。


给定训练集 \(D\) 和特征 \(a\),令 \(\tilde{D}\) 表示 \(D\) 中在特征 \(a\) 上没有缺失值的样本子集。

对问题 ①:

我们可根据 \(\tilde{D}\) 来进行特征选择。假定特征 \(a\)\(V\) 个可取值 \(\{a^1,a^2,...,a^V\}\)

\(\tilde{D}^v\) 表示 \(\tilde{D}\) 中在特征 \(a\) 上取值为 \(a^v\) 的样本子集,

\(\tilde{D}_k\) 表示 \(\tilde{D}\) 中第 \(k\)\((k=1,2,...,|\mathcal{Y}|)\)的样本子集,

假定为每个样本 \(x\) 赋予一个权重 \(\omega_x\),并定义

\[\begin{aligned} & \rho = \frac{\sum_{x \in \tilde{D}} \omega_x}{\sum_{x \in D} \omega_x} \\ \\ & \tilde{p}_k = \frac{\sum_{x \in \tilde{D}_k} \omega_x}{\sum_{x \in D} \omega_x} \\ \\ & \tilde{r}_v = \frac{\sum_{x \in \tilde{D}^v} \omega_x}{\sum_{x \in D} \omega_x} \end{aligned} \]

对特征 \(a\)\(\rho\) 表示无缺失值样本所占的比例,\(\tilde{p}_k\) 表示无缺失值样本中第 \(k\) 类所占的比例,\(\tilde{r}_v\) 表示无缺失值样本中在属性 \(a\) 上取值 \(a^v\) 的样本所占的比例。显然,\(\sum_{k=1}^{\mathcal{|Y|}} \tilde{p}_k = 1\)\(\sum_{v=1}^{V} \tilde{r}_v = 1\)

此时信息增益:

\[\begin{aligned} g(D,a) & = \rho \times g(\tilde{D}, a) \\ & = \rho \times (H(\tilde{D}) - \sum_{v=1}^{V} \tilde{r}_v H(\tilde{D}^v)) \\ H(\tilde{D}) & = -\sum_{k=1}^{\mathcal{|Y|}} \tilde{p}_k log_2 \tilde{p}_k \end{aligned} \]

对问题 ②:

若样本 \(x\) 的划分特征已知,则将 \(x\) 划入该特征对应的子结点,且样本权值在子结点中保持为 \(\omega_x\)

若样本 \(x\) 的划分特征未知,则将 \(x\) 划入所有子结点,且样本权值在各个子结点中调整为 \(\tilde{r}_v \cdot \omega_x\),这就让同一样本以不同的概率划入到不同的子结点中。


\(5\)西瓜数据集出现缺失值,仅有编号 \(\{4,7,14,16\}\) 完整。

编号 色泽 根蒂 敲声 纹理 脐部 触感 好瓜
1 蜷缩 浊响 清晰 凹陷 硬滑
2 乌黑 蜷缩 沉闷 清晰 凹陷
3 乌黑 蜷缩 清晰 凹陷 硬滑
4 青绿 蜷缩 沉闷 清晰 凹陷 硬滑
5 蜷缩 浊响 清晰 凹陷 硬滑
6 青绿 稍蜷 浊响 清晰 软粘
7 乌黑 稍蜷 浊响 稍糊 稍凹 软粘
8 乌黑 稍蜷 浊响 稍凹 硬滑
9 乌黑 沉闷 稍糊 稍凹 硬滑
10 青绿 硬挺 清脆 平坦 软粘
11 浅白 硬挺 清脆 模糊 平坦
12 浅白 蜷缩 模糊 平坦 软粘
13 稍蜷 浊响 稍糊 凹陷 硬滑
14 浅白 稍蜷 沉闷 稍糊 凹陷 硬滑
15 乌黑 稍蜷 浊响 清晰 软粘
16 浅白 蜷缩 浊响 模糊 平坦 硬滑
17 青绿 浊响 稍糊 稍凹 硬滑

解:根节点包含样本集 \(D\) 中全部 \(17\) 个样例,各样例的权值为 \(1\)

以特征 “色泽” 为例,令该特征上无缺失值的样本子集为 \(\tilde{D}\) ,包含的编号为 \(\{2,3,4,6,7,8,9,10,11,12,14,15,16,17\}\) ,共 \(14\) 个,

\(\tilde{D}\) 的信息熵为

\[\begin{aligned} H(\tilde{D}) & = -\sum_{k=1}^{2} \tilde{p}_k log_2 \tilde{p}_k \\ & = -(\frac{6}{14} log_2 \frac{6}{14} + \frac{8}{14} log_2 \frac{8}{14}) = 0.985 \end{aligned} \]

\(\tilde{D}^1、\tilde{D}^2、\tilde{D}^3\)​ 表示特征 “色泽” 的取值 “青绿”,“乌黑”,“浅白”,

\[\begin{aligned} & H(\tilde{D}^1) = -(\frac{2}{4} log_2 \frac{2}{4} + \frac{2}{4} log_2 \frac{2}{4}) = 1 \\ & H(\tilde{D}^2) = -(\frac{4}{6} log_2 \frac{4}{6} + \frac{2}{6} log_2 \frac{2}{6}) = 0.918 \\ & H(\tilde{D}^3) = -(\frac{0}{4} log_2 \frac{0}{4} + \frac{4}{4} log_2 \frac{4}{4}) = 0 \end{aligned} \]

因此,样本子集 \(\tilde{D}\) 上特征 “色泽” 的信息增益为

\[\begin{aligned} g(\tilde{D},色泽) & = H(\tilde{D}) - \sum_{v=1}^{3} \tilde{r}_v H(\tilde{D}^v)\\ & = 0.985 - (\frac{4}{14} \times 1 + \frac{6}{14} \times 0.918 + \frac{4}{14} \times 0) \\ & = 0.306 \end{aligned} \]

样本集 \(D\) 上特征 “色泽” 的信息增益为

\[g(D,色泽) = \rho \times g(\tilde{D},色泽) = \frac{14}{17} \times 0.306 = 0.252 \]

同理

\[\begin{aligned} & g(D,根蒂) = 0.171 \ \ \ \ g(D,敲声) = 0.145 \ \ \ \ g(D,纹理) = 0.424 \\ & g(D,脐部) = 0.289 \ \ \ \ g(D,触感) = 0.006 \end{aligned} \]

"纹理" 在所有特征中信息增益最大,用于对根结点进行划分。

划分结果使编号为 \(\{1,2,3,4,5,6,15\}\) 的样本进入 “纹理=清晰” 分支;

编号为 \(\{7,9,13,14,17\}\) 的样本进入 “纹理=稍糊” 分支;

编号为 \(\{11,12,16\}\) 的样本进入 “纹理=模糊” 分支,且样本在各子结点中的权重保持为1。

而编号为 \(\{8\}\) 的样本在特征 “纹理” 上出现缺失,因此它将同时进入三个分支汇总,权重在三个子结点中分别为 \(\frac{7}{15}、\frac{5}{15}、\frac{3}{15}\),编号为 \(\{10\}\) 同理。

最终生成的决策树:


5. C4.5 的不足

\(C4.5\) 生成的是多叉树。\(CART\) 决策树是二叉树,二叉树模型比多叉树运算效率高。

\(C4.5\) 只能用于分类。\(CART\) 即可用于分类,也可用于回归

\(C4.5\) 使用了熵模型,在计算时有大量的对数运算,如果是连续值还有大量排序运算。因此 \(CART\) 用基尼系数代替熵模型。



posted @ 2019-01-14 16:19  做梦当财神  阅读(10516)  评论(0编辑  收藏  举报