机器学习


决策树

计算机学院 张腾

tengzhang@hust.edu.cn

大纲

人工智能逻辑推理知识工程机器学习任务类型模型方法监督学习半监督学习无监督学习分类回归结构预测聚类降维密度估计符号学派连接学派统计学派类推学派决策树感知机对数几率回归神经网络朴素贝叶斯k-近邻支持向量机

符号学派 规则学习

规则学习中的规则 (rule) 指狭义的逻辑规则,呈 if-then 形式

\begin{align} \overbrace{\otimes}^{规则头} \underbrace{\gets}_{蕴含} \overbrace{f_1 \wedge \underbrace{f_2}_{文字} \wedge \cdots \wedge f_L}^{规则体} \end{align}

文字 (literal):对特征进行检验的布尔表达式,如$(天气 = 雨天)$

  • 规则头:也是文字,一般表示规则判定的标记、类别或概念
  • 规则体:即前提,由逻辑文字组成的合取式,文字个数称为规则长度

一个规则可以看成一个学习模型

符合规则的样本称为被该规则覆盖 (cover)

覆盖

次序 时间 方式 天气 课业 疫情 电视 约会
1 周六 吃饭 晴天 轻松 清零 精彩
2 周日 吃饭 阴天 轻松 清零 精彩
3 周日 吃饭 晴天 轻松 清零 精彩
4 周六 吃饭 阴天 轻松 清零 精彩
5 周间 吃饭 晴天 轻松 清零 精彩
6 周六 逛街 晴天 轻松 平缓 无聊
7 周日 逛街 晴天 适中 平缓 无聊
8 周日 逛街 晴天 轻松 平缓 精彩
9 周日 逛街 阴天 适中 平缓 精彩
10 周六 学习 雨天 轻松 严峻 无聊
11 周间 学习 雨天 繁重 严峻 精彩
12 周间 吃饭 晴天 繁重 严峻 无聊
13 周六 逛街 晴天 适中 清零 精彩
14 周间 逛街 阴天 适中 清零 精彩
15 周日 逛街 晴天 轻松 平缓 无聊
16 周间 吃饭 晴天 繁重 严峻 精彩
17 周六 吃饭 阴天 适中 平缓 精彩

$\class{blue}{是 \gets (方式 = 吃饭) \wedge (疫情 = 清零)}$

$\class{red}{否 \gets (课业 = 繁重)}$

冲突

一个样本若被判定结果不同的多个规则覆盖,称发生了冲突

冲突消解 (conflict resolution):

  • 投票法:少数服从多数
  • 排序法:在规则集合上定义一个优先级顺序
  • 元规则法:规则的规则,例如“发生冲突时使用长度最小的规则”

规则集合未必能覆盖所有未知样本

\begin{align} 规则集合 = \begin{cases} 是 \gets (方式 = 吃饭) \wedge (疫情 = 清零) \\ 否 \gets (课业 = 繁重) \end{cases} \end{align}

默认规则:例如“未被规则集合覆盖的都不约会”

序贯覆盖

序贯覆盖 (sequential covering),即逐条归纳

  • 从空规则开始,将正类作为规则头,遍历每个特征的取值
  • 若当前规则的规则体仅覆盖正类样本,则由此产生一条规则
  • 去掉所有已被覆盖的样本
  • 在剩下的训练数据集上重复上述过程
序贯覆盖 单文字规则

次序 时间 方式 天气 课业 疫情 电视 约会
1 周六 吃饭 晴天 轻松 清零 精彩
2 周日 吃饭 阴天 轻松 清零 精彩
3 周日 吃饭 晴天 轻松 清零 精彩
4 周六 吃饭 阴天 轻松 清零 精彩
5 周间 吃饭 晴天 轻松 清零 精彩
6 周六 逛街 晴天 轻松 平缓 无聊
7 周日 逛街 晴天 适中 平缓 无聊
8 周日 逛街 晴天 轻松 平缓 精彩
9 周日 逛街 阴天 适中 平缓 精彩
10 周六 学习 雨天 轻松 严峻 无聊
11 周间 学习 雨天 繁重 严峻 精彩
12 周间 吃饭 晴天 繁重 严峻 无聊
13 周六 逛街 晴天 适中 清零 精彩
14 周间 逛街 阴天 适中 清零 精彩
15 周日 逛街 晴天 轻松 平缓 无聊
16 周间 吃饭 晴天 繁重 严峻 精彩
17 周六 吃饭 阴天 适中 平缓 精彩

$是 \gets (时间 = 周六)$

序贯覆盖 单文字规则

次序 时间 方式 天气 课业 疫情 电视 约会
1 周六 吃饭 晴天 轻松 清零 精彩
2 周日 吃饭 阴天 轻松 清零 精彩
3 周日 吃饭 晴天 轻松 清零 精彩
4 周六 吃饭 阴天 轻松 清零 精彩
5 周间 吃饭 晴天 轻松 清零 精彩
6 周六 逛街 晴天 轻松 平缓 无聊
7 周日 逛街 晴天 适中 平缓 无聊
8 周日 逛街 晴天 轻松 平缓 精彩
9 周日 逛街 阴天 适中 平缓 精彩
10 周六 学习 雨天 轻松 严峻 无聊
11 周间 学习 雨天 繁重 严峻 精彩
12 周间 吃饭 晴天 繁重 严峻 无聊
13 周六 逛街 晴天 适中 清零 精彩
14 周间 逛街 阴天 适中 清零 精彩
15 周日 逛街 晴天 轻松 平缓 无聊
16 周间 吃饭 晴天 繁重 严峻 精彩
17 周六 吃饭 阴天 适中 平缓 精彩

$是 \gets (时间 = 周日)$

序贯覆盖 双文字规则

次序 时间 方式 天气 课业 疫情 电视 约会
1 周六 吃饭 晴天 轻松 清零 精彩
2 周日 吃饭 阴天 轻松 清零 精彩
3 周日 吃饭 晴天 轻松 清零 精彩
4 周六 吃饭 阴天 轻松 清零 精彩
5 周间 吃饭 晴天 轻松 清零 精彩
6 周六 逛街 晴天 轻松 平缓 无聊
7 周日 逛街 晴天 适中 平缓 无聊
8 周日 逛街 晴天 轻松 平缓 精彩
9 周日 逛街 阴天 适中 平缓 精彩
10 周六 学习 雨天 轻松 严峻 无聊
11 周间 学习 雨天 繁重 严峻 精彩
12 周间 吃饭 晴天 繁重 严峻 无聊
13 周六 逛街 晴天 适中 清零 精彩
14 周间 逛街 阴天 适中 清零 精彩
15 周日 逛街 晴天 轻松 平缓 无聊
16 周间 吃饭 晴天 繁重 严峻 精彩
17 周六 吃饭 阴天 适中 平缓 精彩

$是 \gets (时间 = 周六) \wedge (方式 = 吃饭)$

序贯覆盖 双文字规则

次序 时间 方式 天气 课业 疫情 电视 约会
1 周六 吃饭 晴天 轻松 清零 精彩
2 周日 吃饭 阴天 轻松 清零 精彩
3 周日 吃饭 晴天 轻松 清零 精彩
4 周六 吃饭 阴天 轻松 清零 精彩
5 周间 吃饭 晴天 轻松 清零 精彩
6 周六 逛街 晴天 轻松 平缓 无聊
7 周日 逛街 晴天 适中 平缓 无聊
8 周日 逛街 晴天 轻松 平缓 精彩
9 周日 逛街 阴天 适中 平缓 精彩
10 周六 学习 雨天 轻松 严峻 无聊
11 周间 学习 雨天 繁重 严峻 精彩
12 周间 吃饭 晴天 繁重 严峻 无聊
13 周六 逛街 晴天 适中 清零 精彩
14 周间 逛街 阴天 适中 清零 精彩
15 周日 逛街 晴天 轻松 平缓 无聊
16 周间 吃饭 晴天 繁重 严峻 精彩
17 周六 吃饭 阴天 适中 平缓 精彩

$是 \gets (时间 = 周日) \wedge (方式 = 吃饭)$

序贯覆盖 双文字规则

次序 时间 方式 天气 课业 疫情 电视 约会
1 周六 吃饭 晴天 轻松 清零 精彩
2 周日 吃饭 阴天 轻松 清零 精彩
3 周日 吃饭 晴天 轻松 清零 精彩
4 周六 吃饭 阴天 轻松 清零 精彩
5 周间 吃饭 晴天 轻松 清零 精彩
6 周六 逛街 晴天 轻松 平缓 无聊
7 周日 逛街 晴天 适中 平缓 无聊
8 周日 逛街 晴天 轻松 平缓 精彩
9 周日 逛街 阴天 适中 平缓 精彩
10 周六 学习 雨天 轻松 严峻 无聊
11 周间 学习 雨天 繁重 严峻 精彩
12 周间 吃饭 晴天 繁重 严峻 无聊
13 周六 逛街 晴天 适中 清零 精彩
14 周间 逛街 阴天 适中 清零 精彩
15 周日 逛街 晴天 轻松 平缓 无聊
16 周间 吃饭 晴天 繁重 严峻 精彩
17 周六 吃饭 阴天 适中 平缓 精彩

$是 \gets (时间 = 周日) \wedge (方式 = 吃饭)$

$\class{red}{是 \gets (时间 = 周间) \wedge (课业 = 轻松)}$

序贯覆盖 双文字规则

次序 时间 方式 天气 课业 疫情 电视 约会
1 周六 吃饭 晴天 轻松 清零 精彩
2 周日 吃饭 阴天 轻松 清零 精彩
3 周日 吃饭 晴天 轻松 清零 精彩
4 周六 吃饭 阴天 轻松 清零 精彩
5 周间 吃饭 晴天 轻松 清零 精彩
6 周六 逛街 晴天 轻松 平缓 无聊
7 周日 逛街 晴天 适中 平缓 无聊
8 周日 逛街 晴天 轻松 平缓 精彩
9 周日 逛街 阴天 适中 平缓 精彩
10 周六 学习 雨天 轻松 严峻 无聊
11 周间 学习 雨天 繁重 严峻 精彩
12 周间 吃饭 晴天 繁重 严峻 无聊
13 周六 逛街 晴天 适中 清零 精彩
14 周间 逛街 阴天 适中 清零 精彩
15 周日 逛街 晴天 轻松 平缓 无聊
16 周间 吃饭 晴天 繁重 严峻 精彩
17 周六 吃饭 阴天 适中 平缓 精彩

$是 \gets (时间 = 周日) \wedge (方式 = 吃饭)$

$\class{red}{是 \gets (时间 = 周间) \wedge (课业 = 轻松)}$

$\class{yellow}{是 \gets (方式 = 吃饭) \wedge (课业 = 轻松)}$

序贯覆盖 双文字规则

次序 时间 方式 天气 课业 疫情 电视 约会
1 周六 吃饭 晴天 轻松 清零 精彩
2 周日 吃饭 阴天 轻松 清零 精彩
3 周日 吃饭 晴天 轻松 清零 精彩
4 周六 吃饭 阴天 轻松 清零 精彩
5 周间 吃饭 晴天 轻松 清零 精彩
6 周六 逛街 晴天 轻松 平缓 无聊
7 周日 逛街 晴天 适中 平缓 无聊
8 周日 逛街 晴天 轻松 平缓 精彩
9 周日 逛街 阴天 适中 平缓 精彩
10 周六 学习 雨天 轻松 严峻 无聊
11 周间 学习 雨天 繁重 严峻 精彩
12 周间 吃饭 晴天 繁重 严峻 无聊
13 周六 逛街 晴天 适中 清零 精彩
14 周间 逛街 阴天 适中 清零 精彩
15 周日 逛街 晴天 轻松 平缓 无聊
16 周间 吃饭 晴天 繁重 严峻 精彩
17 周六 吃饭 阴天 适中 平缓 精彩

$是 \gets (时间 = 周日) \wedge (方式 = 吃饭)$

$\class{red}{是 \gets (时间 = 周间) \wedge (课业 = 轻松)}$

$\class{yellow}{是 \gets (方式 = 吃饭) \wedge (课业 = 轻松)}$

$\class{blue}{是 \gets (课业 = 轻松) \wedge (电视 = 精彩)}$

序贯覆盖 双文字规则

次序 时间 方式 天气 课业 疫情 电视 约会
1 周六 吃饭 晴天 轻松 清零 精彩
2 周日 吃饭 阴天 轻松 清零 精彩
3 周日 吃饭 晴天 轻松 清零 精彩
4 周六 吃饭 阴天 轻松 清零 精彩
5 周间 吃饭 晴天 轻松 清零 精彩
6 周六 逛街 晴天 轻松 平缓 无聊
7 周日 逛街 晴天 适中 平缓 无聊
8 周日 逛街 晴天 轻松 平缓 精彩
9 周日 逛街 阴天 适中 平缓 精彩
10 周六 学习 雨天 轻松 严峻 无聊
11 周间 学习 雨天 繁重 严峻 精彩
12 周间 吃饭 晴天 繁重 严峻 无聊
13 周六 逛街 晴天 适中 清零 精彩
14 周间 逛街 阴天 适中 清零 精彩
15 周日 逛街 晴天 轻松 平缓 无聊
16 周间 吃饭 晴天 繁重 严峻 精彩
17 周六 吃饭 阴天 适中 平缓 精彩

$是 \gets (时间 = 周日) \wedge (方式 = 吃饭)$

$\class{red}{是 \gets (时间 = 周间) \wedge (课业 = 轻松)}$

$\class{yellow}{是 \gets (方式 = 吃饭) \wedge (课业 = 轻松)}$

$\class{blue}{是 \gets (课业 = 轻松) \wedge (电视 = 精彩)}$

$\class{orange}{是 \gets (课业=适中) \wedge (电视 = 无聊)}$

序贯覆盖 三文字规则

次序 时间 方式 天气 课业 疫情 电视 约会
1 周六 吃饭 晴天 轻松 清零 精彩
2 周日 吃饭 阴天 轻松 清零 精彩
3 周日 吃饭 晴天 轻松 清零 精彩
4 周六 吃饭 阴天 轻松 清零 精彩
5 周间 吃饭 晴天 轻松 清零 精彩
6 周六 逛街 晴天 轻松 平缓 无聊
7 周日 逛街 晴天 适中 平缓 无聊
8 周日 逛街 晴天 轻松 平缓 精彩
9 周日 逛街 阴天 适中 平缓 精彩
10 周六 学习 雨天 轻松 严峻 无聊
11 周间 学习 雨天 繁重 严峻 精彩
12 周间 吃饭 晴天 繁重 严峻 无聊
13 周六 逛街 晴天 适中 清零 精彩
14 周间 逛街 阴天 适中 清零 精彩
15 周日 逛街 晴天 轻松 平缓 无聊
16 周间 吃饭 晴天 繁重 严峻 精彩
17 周六 吃饭 阴天 适中 平缓 精彩

$是 \gets (时间 = 周日) \wedge (方式 = 吃饭)$

$\class{red}{是 \gets (时间 = 周间) \wedge (课业 = 轻松)}$

$\class{yellow}{是 \gets (方式 = 吃饭) \wedge (课业 = 轻松)}$

$\class{blue}{是 \gets (课业 = 轻松) \wedge (电视 = 精彩)}$

$\class{orange}{是 \gets (课业=适中) \wedge (电视 = 无聊)}$

$\class{cyan}{是 \gets (时间 = 周六) \wedge (方式=逛街) \\ \quad \quad \quad \wedge (课业 = 轻松)}$

决策树

序贯覆盖:删除样本

决策树:划分样本

基本算法

输入:训练集$\dc = \{ (\xv_i, y_i) \}_{i \in [m]}$,属性集$\ac = \{ a_j \}_{j \in [d]}$
过程:函数$\TG(\dc,\ac)$

  1. 生成结点$v$
  2. if $\dc$中样本全属于同一类别$C$ then     // 递归情形 1
  3.   将$v$标记为$C$类叶结点 return
  4. if $\ac = \emptyset$ or $\dc$中样本在$\ac$上取值相同 then     // 递归情形 2
  5.   将$v$标记为叶结点,其类别标记为$\dc$中样本最多的类 return
  6. $\ac$中选择最优划分属性$a^\star$,对$a^\star$的每一个取值$a^\star_v$,为$v$生成一个分支,令$\dc_v$表示$\dc$$a^\star$上取值为$a^\star_v$的样本子集
  7. if $\dc_v = \emptyset$ then     // 递归情形 3
  8.   将分支结点标记为叶结点,其类别标记为$\dc$中样本最多的类 return
  9. else
  10.   以$\TG(\dc_v, \ac \setminus \{ a^\star \})$为分支结点

输出:以$v$为根结点的一棵决策树

信息增益

目标:随着划分的不断进行,决策树结点的纯度越来越高

设数据集$\dc$中第$k$类样本的比例为$p_k = p(y = k)$定义为

\begin{align} H(\dc) = - \sum_{k \in [C]} p_k \log p_k \end{align}

  • $p_1 = \cdots = p_C = 1/C$时,$H(\dc) = \log C$,熵最大,纯度最低
  • 当某个$p_i = 1$、其余为零时,$H(\dc) = 0$,熵最小,纯度最高

设属性$a$取值为$a_1, \ldots, a_V$,据此可将$\dc$划分为$\dc_1, \ldots, \dc_V$

用属性$a$$\dc$进行划分产生的信息增益 (information gain)

\begin{align} \gain(\dc,a) = H(\dc) - \sum_{v \in [V]} \frac{|\dc_v|}{|\dc|} H(\dc_v) \end{align}

构建决策树

次序 时间 方式 天气 课业 疫情 电视 约会
1 周六 吃饭 晴天 轻松 清零 精彩
2 周日 吃饭 阴天 轻松 清零 精彩
3 周日 吃饭 晴天 轻松 清零 精彩
4 周六 吃饭 阴天 轻松 清零 精彩
5 周间 吃饭 晴天 轻松 清零 精彩
6 周六 逛街 晴天 轻松 平缓 无聊
7 周日 逛街 晴天 适中 平缓 无聊
8 周日 逛街 晴天 轻松 平缓 精彩
9 周日 逛街 阴天 适中 平缓 精彩
10 周六 学习 雨天 轻松 严峻 无聊
11 周间 学习 雨天 繁重 严峻 精彩
12 周间 吃饭 晴天 繁重 严峻 无聊
13 周六 逛街 晴天 适中 清零 精彩
14 周间 逛街 阴天 适中 清零 精彩
15 周日 逛街 晴天 轻松 平缓 无聊
16 周间 吃饭 晴天 繁重 严峻 精彩
17 周六 吃饭 阴天 适中 平缓 精彩

\begin{align} H(\dc) & = - \frac{8}{17} \log \frac{8}{17} - \frac{9}{17} \log \frac{9}{17} \\ & = \log 17 - \frac{18}{17} \log 3 - \frac{24}{17} = 0.998 \end{align}

\begin{align} \class{red}{\dc_1}-周六,\class{yellow}{\dc_2}-周日,\class{blue}{\dc_3}-周间 \end{align}

\begin{align} \class{red}{H(\dc_1)} & = - \frac{3}{6} \log \frac{3}{6} - \frac{3}{6} \log \frac{3}{6} = \log 2 = 1 \\[4pt] \class{yellow}{H(\dc_2)} & = - \frac{4}{6} \log \frac{4}{6} - \frac{2}{6} \log \frac{2}{6} \\ & = \log 3 - \frac{2}{3} = 0.918 \\[4pt] \class{blue}{H(\dc_3)} & = - \frac{1}{5} \log \frac{1}{5} - \frac{4}{5} \log \frac{4}{5} \\ & = \log 5 - \frac{8}{5} = 0.722 \end{align}

\begin{align} \gain & (\dc, 时间) = 0.998 - \frac{6}{17} \times 1 \\ & - \frac{6}{17} \times 0.918 - \frac{5}{17} \times 0.722 = 0.108 \end{align}

构建决策树

次序 时间 方式 天气 课业 疫情 电视 约会
1 周六 吃饭 晴天 轻松 清零 精彩
2 周日 吃饭 阴天 轻松 清零 精彩
3 周日 吃饭 晴天 轻松 清零 精彩
4 周六 吃饭 阴天 轻松 清零 精彩
5 周间 吃饭 晴天 轻松 清零 精彩
6 周六 逛街 晴天 轻松 平缓 无聊
7 周日 逛街 晴天 适中 平缓 无聊
8 周日 逛街 晴天 轻松 平缓 精彩
9 周日 逛街 阴天 适中 平缓 精彩
10 周六 学习 雨天 轻松 严峻 无聊
11 周间 学习 雨天 繁重 严峻 精彩
12 周间 吃饭 晴天 繁重 严峻 无聊
13 周六 逛街 晴天 适中 清零 精彩
14 周间 逛街 阴天 适中 清零 精彩
15 周日 逛街 晴天 轻松 平缓 无聊
16 周间 吃饭 晴天 繁重 严峻 精彩
17 周六 吃饭 阴天 适中 平缓 精彩

\begin{align} H(\dc) & = - \frac{8}{17} \log \frac{8}{17} - \frac{9}{17} \log \frac{9}{17} \\ & = \log 17 - \frac{18}{17} \log 3 - \frac{24}{17} = 0.998 \end{align}

\begin{align} \class{red}{\dc_1}-吃饭,\class{yellow}{\dc_2}-逛街,\class{blue}{\dc_3}-学习 \end{align}

\begin{align} \class{red}{H(\dc_1)} & = - \frac{5}{8} \log \frac{5}{8} - \frac{3}{8} \log \frac{3}{8} \\ & = 3 - \frac{5}{8} \log 5 - \frac{3}{8} \log 3 = 0.954 \\[4pt] \class{yellow}{H(\dc_2)} & = - \frac{3}{7} \log \frac{3}{7} - \frac{4}{7} \log \frac{4}{7} \\ & = \log 7 - \frac{3}{7} \log 3 - \frac{8}{7} = 0.985 \\[4pt] \class{blue}{H(\dc_3)} & = 0 \end{align}

\begin{align} \gain & (\dc, 方式) = 0.998 - \frac{8}{17} \times 0.954 \\ & - \frac{7}{17} \times 0.985 = 0.143 \end{align}

构建决策树

次序 时间 方式 天气 课业 疫情 电视 约会
1 周六 吃饭 晴天 轻松 清零 精彩
2 周日 吃饭 阴天 轻松 清零 精彩
3 周日 吃饭 晴天 轻松 清零 精彩
4 周六 吃饭 阴天 轻松 清零 精彩
5 周间 吃饭 晴天 轻松 清零 精彩
6 周六 逛街 晴天 轻松 平缓 无聊
7 周日 逛街 晴天 适中 平缓 无聊
8 周日 逛街 晴天 轻松 平缓 精彩
9 周日 逛街 阴天 适中 平缓 精彩
10 周六 学习 雨天 轻松 严峻 无聊
11 周间 学习 雨天 繁重 严峻 精彩
12 周间 吃饭 晴天 繁重 严峻 无聊
13 周六 逛街 晴天 适中 清零 精彩
14 周间 逛街 阴天 适中 清零 精彩
15 周日 逛街 晴天 轻松 平缓 无聊
16 周间 吃饭 晴天 繁重 严峻 精彩
17 周六 吃饭 阴天 适中 平缓 精彩

\begin{align} H(\dc) & = - \frac{8}{17} \log \frac{8}{17} - \frac{9}{17} \log \frac{9}{17} \\ & = \log 17 - \frac{18}{17} \log 3 - \frac{24}{17} = 0.998 \end{align}

\begin{align} \class{red}{\dc_1}-晴天,\class{yellow}{\dc_2}-阴天,\class{blue}{\dc_3}-雨天 \end{align}

\begin{align} \class{red}{H(\dc_1)} & = - \frac{6}{10} \log \frac{6}{10} - \frac{4}{10} \log \frac{4}{10} \\ & = \log 5 - \frac{3}{5} \log 3 - \frac{2}{5} = 0.971 \\[4pt] \class{yellow}{H(\dc_2)} & = - \frac{2}{5} \log \frac{2}{5} - \frac{3}{5} \log \frac{3}{5} \\ & = \log 5 - \frac{3}{5} \log 3 - \frac{2}{5} = 0.971 \\[4pt] \class{blue}{H(\dc_3)} & = 0 \end{align}

\begin{align} \gain & (\dc, 天气) = 0.998 - \frac{10}{17} \times 0.971 \\ & - \frac{5}{17} \times 0.971 = 0.141 \end{align}

构建决策树

次序 时间 方式 天气 课业 疫情 电视 约会
1 周六 吃饭 晴天 轻松 清零 精彩
2 周日 吃饭 阴天 轻松 清零 精彩
3 周日 吃饭 晴天 轻松 清零 精彩
4 周六 吃饭 阴天 轻松 清零 精彩
5 周间 吃饭 晴天 轻松 清零 精彩
6 周六 逛街 晴天 轻松 平缓 无聊
7 周日 逛街 晴天 适中 平缓 无聊
8 周日 逛街 晴天 轻松 平缓 精彩
9 周日 逛街 阴天 适中 平缓 精彩
10 周六 学习 雨天 轻松 严峻 无聊
11 周间 学习 雨天 繁重 严峻 精彩
12 周间 吃饭 晴天 繁重 严峻 无聊
13 周六 逛街 晴天 适中 清零 精彩
14 周间 逛街 阴天 适中 清零 精彩
15 周日 逛街 晴天 轻松 平缓 无聊
16 周间 吃饭 晴天 繁重 严峻 精彩
17 周六 吃饭 阴天 适中 平缓 精彩

\begin{align} H(\dc) & = - \frac{8}{17} \log \frac{8}{17} - \frac{9}{17} \log \frac{9}{17} \\ & = \log 17 - \frac{18}{17} \log 3 - \frac{24}{17} = 0.998 \end{align}

\begin{align} \class{red}{\dc_1}-轻松,\class{yellow}{\dc_2}-适中,\class{blue}{\dc_3}-繁重 \end{align}

\begin{align} \class{red}{H(\dc_1)} & = - \frac{7}{9} \log \frac{7}{9} - \frac{2}{9} \log \frac{2}{9} \\ & = 2 \log 3 - \frac{7}{9} \log 7 - \frac{2}{9} = 0.764 \\[4pt] \class{yellow}{H(\dc_2)} & = - \frac{1}{5} \log \frac{1}{5} - \frac{4}{5} \log \frac{4}{5} \\ & = \log 5 - \frac{8}{5} = 0.722 \\[4pt] \class{blue}{H(\dc_3)} & = 0 \end{align}

\begin{align} \gain & (\dc, 课业) = 0.998 - \frac{9}{17} \times 0.764 \\ & - \frac{5}{17} \times 0.722 = 0.381 \end{align}

构建决策树

次序 时间 方式 天气 课业 疫情 电视 约会
1 周六 吃饭 晴天 轻松 清零 精彩
2 周日 吃饭 阴天 轻松 清零 精彩
3 周日 吃饭 晴天 轻松 清零 精彩
4 周六 吃饭 阴天 轻松 清零 精彩
5 周间 吃饭 晴天 轻松 清零 精彩
6 周六 逛街 晴天 轻松 平缓 无聊
7 周日 逛街 晴天 适中 平缓 无聊
8 周日 逛街 晴天 轻松 平缓 精彩
9 周日 逛街 阴天 适中 平缓 精彩
10 周六 学习 雨天 轻松 严峻 无聊
11 周间 学习 雨天 繁重 严峻 精彩
12 周间 吃饭 晴天 繁重 严峻 无聊
13 周六 逛街 晴天 适中 清零 精彩
14 周间 逛街 阴天 适中 清零 精彩
15 周日 逛街 晴天 轻松 平缓 无聊
16 周间 吃饭 晴天 繁重 严峻 精彩
17 周六 吃饭 阴天 适中 平缓 精彩

\begin{align} H(\dc) & = - \frac{8}{17} \log \frac{8}{17} - \frac{9}{17} \log \frac{9}{17} \\ & = \log 17 - \frac{18}{17} \log 3 - \frac{24}{17} = 0.998 \end{align}

\begin{align} \class{red}{\dc_1}-清零,\class{yellow}{\dc_2}-平缓,\class{blue}{\dc_3}-严峻 \end{align}

\begin{align} \class{red}{H(\dc_1)} & = - \frac{5}{7} \log \frac{5}{7} - \frac{2}{7} \log \frac{2}{7} \\ & = \log 7 - \frac{5}{7} \log 5 - \frac{2}{7} = 0.863 \\[4pt] \class{yellow}{H(\dc_2)} & = - \frac{3}{6} \log \frac{3}{6} - \frac{3}{6} \log \frac{3}{6} = \log 2 = 1 \\[4pt] \class{blue}{H(\dc_3)} & = 0 \end{align}

\begin{align} \gain & (\dc, 疫情) = 0.998 - \frac{7}{17} \times 0.863 \\ & - \frac{6}{17} \times 1 = 0.289 \end{align}

构建决策树

次序 时间 方式 天气 课业 疫情 电视 约会
1 周六 吃饭 晴天 轻松 清零 精彩
2 周日 吃饭 阴天 轻松 清零 精彩
3 周日 吃饭 晴天 轻松 清零 精彩
4 周六 吃饭 阴天 轻松 清零 精彩
5 周间 吃饭 晴天 轻松 清零 精彩
6 周六 逛街 晴天 轻松 平缓 无聊
7 周日 逛街 晴天 适中 平缓 无聊
8 周日 逛街 晴天 轻松 平缓 精彩
9 周日 逛街 阴天 适中 平缓 精彩
10 周六 学习 雨天 轻松 严峻 无聊
11 周间 学习 雨天 繁重 严峻 精彩
12 周间 吃饭 晴天 繁重 严峻 无聊
13 周六 逛街 晴天 适中 清零 精彩
14 周间 逛街 阴天 适中 清零 精彩
15 周日 逛街 晴天 轻松 平缓 无聊
16 周间 吃饭 晴天 繁重 严峻 精彩
17 周六 吃饭 阴天 适中 平缓 精彩

\begin{align} H(\dc) & = - \frac{8}{17} \log \frac{8}{17} - \frac{9}{17} \log \frac{9}{17} \\ & = \log 17 - \frac{18}{17} \log 3 - \frac{24}{17} = 0.998 \end{align}

\begin{align} \class{red}{\dc_1}-精彩,\class{yellow}{\dc_2}-无聊 \end{align}

\begin{align} \class{red}{H(\dc_1)} & = - \frac{6}{12} \log \frac{6}{12} - \frac{6}{12} \log \frac{6}{12} = 1 \\[4pt] \class{yellow}{H(\dc_2)} & = - \frac{2}{5} \log \frac{2}{5} - \frac{3}{5} \log \frac{3}{5} \\ & = \log 5 - \frac{3}{5} \log 3 - \frac{2}{5} = 0.971 \end{align}

\begin{align} \gain & (\dc, 电视) = 0.998 - \frac{12}{17} \times 1 \\ & - \frac{5}{17} \times 0.971 = 0.006 \end{align}

构建决策树

次序 时间 方式 天气 课业 疫情 电视 约会
1 周六 吃饭 晴天 轻松 清零 精彩
2 周日 吃饭 阴天 轻松 清零 精彩
3 周日 吃饭 晴天 轻松 清零 精彩
4 周六 吃饭 阴天 轻松 清零 精彩
5 周间 吃饭 晴天 轻松 清零 精彩
6 周六 逛街 晴天 轻松 平缓 无聊
7 周日 逛街 晴天 适中 平缓 无聊
8 周日 逛街 晴天 轻松 平缓 精彩
9 周日 逛街 阴天 适中 平缓 精彩
10 周六 学习 雨天 轻松 严峻 无聊
11 周间 学习 雨天 繁重 严峻 精彩
12 周间 吃饭 晴天 繁重 严峻 无聊
13 周六 逛街 晴天 适中 清零 精彩
14 周间 逛街 阴天 适中 清零 精彩
15 周日 逛街 晴天 轻松 平缓 无聊
16 周间 吃饭 晴天 繁重 严峻 精彩
17 周六 吃饭 阴天 适中 平缓 精彩

\begin{align} & \gain (\dc, 时间) = 0.108 \\ & \gain (\dc, 方式) = 0.143 \\ & \gain (\dc, 天气) = 0.141 \\ & \gain (\dc, 课业) = \class{blue}{0.381} \\ & \gain (\dc, 疫情) = 0.289 \\ & \gain (\dc, 电视) = 0.006 \\[4pt] & 属性\class{blue}{课业}的信息增益最大 \\[4pt] & \dc_1 = \{ 1, 2, 3, 4, 5, 6, 8, 10, 15 \} \\ & \dc_2 = \{ 7, 9, 13, 14, 17 \} \\ & \dc_3 = \{ 11, 12, 16 \} ,全负 \end{align}

构建决策树

次序 时间 方式 天气 课业 疫情 电视 约会
7 周日 逛街 晴天 适中 平缓 无聊
9 周日 逛街 阴天 适中 平缓 精彩
13 周六 逛街 晴天 适中 清零 精彩
14 周间 逛街 阴天 适中 清零 精彩
17 周六 吃饭 阴天 适中 平缓 精彩

\begin{align} & 时间: \frac{2}{5} H(\class{blue}{\{ 7,9 \}}) + \frac{2}{5} H(\{ 13,17 \}) + \frac{1}{5} H(\{ 14 \}) > 0 \\ & 方式: \frac{4}{5} H(\class{blue}{\{ 7,9,13,14 \}}) + \frac{1}{5} H(\{ 17 \}) > 0 \\ & 天气: \frac{2}{5} H(\class{blue}{\{ 7,13 \}}) + \frac{3}{5} H(\{ 9,14,17 \}) > 0 \\ & 疫情: \frac{3}{5} H(\class{blue}{\{ 7,9,17 \}}) + \frac{2}{5} H(\{ 13,14 \}) > 0 \\ & 电视: \frac{1}{5} H(\{ 7 \}) + \frac{4}{5} H(\{ 9,13,14,17 \}) = 0 \end{align}

构建决策树

次序 时间 方式 天气 课业 疫情 电视 约会
1 周六 吃饭 晴天 轻松 清零 精彩
2 周日 吃饭 阴天 轻松 清零 精彩
3 周日 吃饭 晴天 轻松 清零 精彩
4 周六 吃饭 阴天 轻松 清零 精彩
5 周间 吃饭 晴天 轻松 清零 精彩
6 周六 逛街 晴天 轻松 平缓 无聊
8 周日 逛街 晴天 轻松 平缓 精彩
10 周六 学习 雨天 轻松 严峻 无聊
15 周日 逛街 晴天 轻松 平缓 无聊

\begin{align} & \gain (\dc_1, 时间) = H (\dc_1) - \frac{4}{9} \class{red}{H(\{ 1,4,6,10 \})} - \frac{4}{9} \class{yellow}{H(\{ 2,3,8,15 \})} - \frac{1}{9} \class{blue}{H(\{ 5 \})} \\ & = \left( - \frac{7}{9} \log \frac{7}{9} - \frac{2}{9} \log \frac{2}{9} \right) - \frac{4}{9} \left( - \frac{3}{4} \log \frac{3}{4} - \frac{1}{4} \log \frac{1}{4} \right) - \frac{4}{9} \left( - \frac{3}{4} \log \frac{3}{4} - \frac{1}{4} \log \frac{1}{4} \right) \\ & = \frac{8}{3} \log 3 - \frac{7}{9} \log 7 - 2 = 0.043 \end{align}

构建决策树

次序 时间 方式 天气 课业 疫情 电视 约会
1 周六 吃饭 晴天 轻松 清零 精彩
2 周日 吃饭 阴天 轻松 清零 精彩
3 周日 吃饭 晴天 轻松 清零 精彩
4 周六 吃饭 阴天 轻松 清零 精彩
5 周间 吃饭 晴天 轻松 清零 精彩
6 周六 逛街 晴天 轻松 平缓 无聊
8 周日 逛街 晴天 轻松 平缓 精彩
10 周六 学习 雨天 轻松 严峻 无聊
15 周日 逛街 晴天 轻松 平缓 无聊

\begin{align} & \gain (\dc_1, 方式) = H (\dc_1) - \frac{5}{9} \class{red}{H(\{ 1,2,3,4,5 \})} - \frac{3}{9} \class{yellow}{H(\{ 6,8,15 \})} - \frac{1}{9} \class{blue}{H(\{ 10 \})} \\ & = \left( - \frac{7}{9} \log \frac{7}{9} - \frac{2}{9} \log \frac{2}{9} \right) - \frac{3}{9} \left( - \frac{2}{3} \log \frac{2}{3} - \frac{1}{3} \log \frac{1}{3} \right) \\ & = \frac{5}{3} \log 3 - \frac{7}{9} \log 7 = 0.458 \end{align}

构建决策树

次序 时间 方式 天气 课业 疫情 电视 约会
1 周六 吃饭 晴天 轻松 清零 精彩
2 周日 吃饭 阴天 轻松 清零 精彩
3 周日 吃饭 晴天 轻松 清零 精彩
4 周六 吃饭 阴天 轻松 清零 精彩
5 周间 吃饭 晴天 轻松 清零 精彩
6 周六 逛街 晴天 轻松 平缓 无聊
8 周日 逛街 晴天 轻松 平缓 精彩
10 周六 学习 雨天 轻松 严峻 无聊
15 周日 逛街 晴天 轻松 平缓 无聊

\begin{align} & \gain (\dc_1, 天气) = H (\dc_1) - \frac{6}{9} \class{red}{H(\{ 1,3,5,6,8,15 \})} - \frac{2}{9} \class{yellow}{H(\{ 2,4 \})} - \frac{1}{9} \class{blue}{H(\{ 10 \})} \\ & = \left( - \frac{7}{9} \log \frac{7}{9} - \frac{2}{9} \log \frac{2}{9} \right) - \frac{6}{9} \left( - \frac{5}{6} \log \frac{5}{6} - \frac{1}{6} \log \frac{1}{6} \right) \\ & = \frac{4}{3} \log 3 - \frac{7}{9} \log 7 + \frac{5}{9} \log 5 - \frac{8}{9} = 0.331 \end{align}

构建决策树

次序 时间 方式 天气 课业 疫情 电视 约会
1 周六 吃饭 晴天 轻松 清零 精彩
2 周日 吃饭 阴天 轻松 清零 精彩
3 周日 吃饭 晴天 轻松 清零 精彩
4 周六 吃饭 阴天 轻松 清零 精彩
5 周间 吃饭 晴天 轻松 清零 精彩
6 周六 逛街 晴天 轻松 平缓 无聊
8 周日 逛街 晴天 轻松 平缓 精彩
10 周六 学习 雨天 轻松 严峻 无聊
15 周日 逛街 晴天 轻松 平缓 无聊

\begin{align} & \gain (\dc_1, 疫情) = H (\dc_1) - \frac{5}{9} \class{red}{H(\{ 1,2,3,4,5 \})} - \frac{3}{9} \class{yellow}{H(\{ 6,8,15 \})} - \frac{1}{9} \class{blue}{H(\{ 10 \})} \\ & = \left( - \frac{7}{9} \log \frac{7}{9} - \frac{2}{9} \log \frac{2}{9} \right) - \frac{3}{9} \left( - \frac{2}{3} \log \frac{2}{3} - \frac{1}{3} \log \frac{1}{3} \right) \\ & = \frac{5}{3} \log 3 - \frac{7}{9} \log 7 = 0.458 \end{align}

构建决策树

次序 时间 方式 天气 课业 疫情 电视 约会
1 周六 吃饭 晴天 轻松 清零 精彩
2 周日 吃饭 阴天 轻松 清零 精彩
3 周日 吃饭 晴天 轻松 清零 精彩
4 周六 吃饭 阴天 轻松 清零 精彩
5 周间 吃饭 晴天 轻松 清零 精彩
6 周六 逛街 晴天 轻松 平缓 无聊
8 周日 逛街 晴天 轻松 平缓 精彩
10 周六 学习 雨天 轻松 严峻 无聊
15 周日 逛街 晴天 轻松 平缓 无聊

\begin{align} & \gain (\dc_1, 电视) = H (\dc_1) - \frac{6}{9} \class{red}{H(\{ 1,2,3,4,5,8 \})} - \frac{3}{9} \class{yellow}{H(\{ 6,10,15 \})} \\ & = \left( - \frac{7}{9} \log \frac{7}{9} - \frac{2}{9} \log \frac{2}{9} \right) - \frac{3}{9} \left( - \frac{2}{3} \log \frac{2}{3} - \frac{1}{3} \log \frac{1}{3} \right) \\ & = \frac{5}{3} \log 3 - \frac{7}{9} \log 7 = 0.458 \end{align}

构建决策树

\begin{align} & \gain (\dc_1, 时间) = 0.043 \\ & \gain (\dc_1, 方式) = 0.458 \\ & \gain (\dc_1, 天气) = 0.331 \\ & \gain (\dc_1, 疫情) = \class{blue}{0.458} \\ & \gain (\dc_1, 电视) = 0.458 \\[4pt] & \{ 1, 2, 3, 4, 5 \} 全正,\{ 10 \} 全负 \\[4pt] & \dc_4 = \{ 6, 8, 15 \} \\ \end{align}

次序 时间 方式 天气 课业 疫情 电视 约会
6 周六 逛街 晴天 轻松 平缓 无聊
8 周日 逛街 晴天 轻松 平缓 精彩
15 周日 逛街 晴天 轻松 平缓 无聊

\begin{align} & \gain (\dc_4, 时间) = \gain (\dc_4, 电视) = H(\dc_4) - \frac{2}{3} \times 1, ~ 不妨选时间 \end{align}

ID3 决策树

ID3 (iterative dichotomiser)

增益率 基尼指数

信息增益偏好取值数目多的属性,将“次序”加入属性集会如何?

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

\begin{align} \textrm{Gain\_ratio} = \frac{\gain(\dc,a)}{\textrm{IV}(a)}, \quad \textrm{IV}(a) = -\sum_{v \in [V]} \frac{|\dc_v|}{|\dc|} \log \frac{|\dc_v|}{|\dc|} \end{align}

分类回归树 (classification and regression tree, CART)

\begin{align} \gini(\dc) = \sum_{k \in [C]} \sum_{k' \ne k} p_k p_{k'}, \quad \textrm{Gini\_index} (\dc,a) = \sum_{v \in [V]} \frac{|\dc_v|}{|\dc|} \gini(\dc_v) \end{align}

  • 基尼值等于从$\dc$中随机抽两个样本,其标记不一致的概率,越小越纯
  • 分类回归树选择$a^\star = \argmin_{a \in \ac} ~ \textrm{Gini\_index} (\dc,a)$
连续属性

给定数据集$\dc$和属性$a$,假设$m$个样本出现了$n$个不同的取值

\begin{align} a_1 < a_2 < \cdots < a_n \end{align}

考虑$n-1$个区间的中点作为候选划分点

\begin{align} T_a = \left\{ \frac{a_i+a_{i+1}}{2} \mid i \in [n-1] \right\} \end{align}

每个划分点$t$将数据集$\dc$分为$\dc_+^{(t)}$$\dc_-^{(t)}$两部分,信息增益为

\begin{align} \gain(\dc,a) & = \max_{t \in T_a} \gain (\dc,a,t) \\ & = \max_{t \in T_a} \left\{ H(\dc) - \frac{|\dc_+^{(t)}|}{|\dc|} H(\dc_+^{(t)}) - \frac{|\dc_-^{(t)}|}{|\dc|} H(\dc_-^{(t)}) \right\} \end{align}

鸢尾花数据集

美国植物学家安德森收集,英国统计学家费雪引入到统计分析中

150 个样本

4 个特征

  • 花萼长度 sepal length
  • 花萼宽度 sepal width
  • 花瓣长度 petal length
  • 花瓣宽度 petal width

3 个类别,每类 50 个样本

  • 山鸢尾 iris setosa
  • 杂色鸢尾 iris versicolour
  • 维吉尼亚鸢尾 iris virginica
鸢尾花数据集

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris

iris = load_iris()
print(iris.DESCR)
# --------------------
# Iris plants dataset
#
# **Data Set Characteristics:**
#
# :Number of Instances: 150 (50 in each of three classes)
# :Number of Attributes: 4 numeric, predictive attributes and the class
# :Attribute Information:
#     - sepal length in cm        花萼长度
#     - sepal width in cm         花萼宽度
#     - petal length in cm        花瓣长度
#     - petal width in cm         花瓣宽度
#     - class:
#             - Iris-Setosa       山鸢尾
#             - Iris-Versicolour  杂色鸢尾
#             - Iris-Virginica    维吉尼亚鸢尾
#
# :Summary Statistics:
#
# ============== ==== ==== ======= ===== ====================
#                 Min  Max   Mean    SD   Class Correlation
# ============== ==== ==== ======= ===== ====================
# sepal length:   4.3  7.9   5.84   0.83    0.7826
# sepal width:    2.0  4.4   3.05   0.43   -0.4194
# petal length:   1.0  6.9   3.76   1.76    0.9490  (high!)
# petal width:    0.1  2.5   1.20   0.76    0.9565  (high!)
# ============== ==== ==== ======= ===== ====================
#
# :Missing Attribute Values: None
# :Class Distribution: 33.3% for each of 3 classes.
# :Creator: R.A. Fisher
# :Donor: Michael Marshall (MARSHALL%PLU@io.arc.nasa.gov)
# :Date: July, 1988
#
# The famous Iris database, first used by Sir R.A. Fisher. The dataset is taken
# from Fisher's paper. Note that it's the same as in R, but not as in the UCI
# Machine Learning Repository, which has two wrong data points.
#
# This is perhaps the best known database to be found in the
# pattern recognition literature.  Fisher's paper is a classic in the field and
# is referenced frequently to this day.  (See Duda & Hart, for example.)  The
# data set contains 3 classes of 50 instances each, where each class refers to a
# type of iris plant.  One class is linearly separable from the other 2; the
# latter are NOT linearly separable from each other.
#
# .. dropdown:: References
#
#   - Fisher, R.A. "The use of multiple measurements in taxonomic problems"
#     Annual Eugenics, 7, Part II, 179-188 (1936); also in "Contributions to
#     Mathematical Statistics" (John Wiley, NY, 1950).
#   - Duda, R.O., & Hart, P.E. (1973) Pattern Classification and Scene Analysis.
#     (Q327.D83) John Wiley & Sons.  ISBN 0-471-22361-1.  See page 218.
#   - Dasarathy, B.V. (1980) "Nosing Around the Neighborhood: A New System
#     Structure and Classification Rule for Recognition in Partially Exposed
#     Environments".  IEEE Transactions on Pattern Analysis and Machine
#     Intelligence, Vol. PAMI-2, No. 1, 67-71.
#   - Gates, G.W. (1972) "The Reduced Nearest Neighbor Rule".  IEEE Transactions
#     on Information Theory, May 1972, 431-433.
#   - See also: 1988 MLC Proceedings, 54-64.  Cheeseman et al"s AUTOCLASS II
#     conceptual clustering system finds 3 classes in the data.
#   - Many, many more ...

X, y = iris.data, iris.target

irisdf = pd.DataFrame(  # numpy格式 -> pandas格式
    np.hstack((X, y[:, np.newaxis])),
    columns=['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']
)
kind_dict = {0: "setosa", 1: "versicolor", 2: "virginica"}
irisdf["class"] = irisdf["class"].map(kind_dict)

print(irisdf.head())  # 前5个样本
# --------------------
#    sepal-length  sepal-width  petal-length  petal-width   class
# 0           5.1          3.5           1.4          0.2  setosa
# 1           4.9          3.0           1.4          0.2  setosa
# 2           4.7          3.2           1.3          0.2  setosa
# 3           4.6          3.1           1.5          0.2  setosa
# 4           5.0          3.6           1.4          0.2  setosa

print(irisdf.tail())  # 最后5个样本
# --------------------
#      sepal-length  sepal-width  petal-length  petal-width      class
# 145           6.7          3.0           5.2          2.3  virginica
# 146           6.3          2.5           5.0          1.9  virginica
# 147           6.5          3.0           5.2          2.0  virginica
# 148           6.2          3.4           5.4          2.3  virginica
# 149           5.9          3.0           5.1          1.8  virginica

print(irisdf.describe())  # 特征统计信息
# --------------------
#        sepal-length  sepal-width  petal-length  petal-width
# count    150.000000   150.000000    150.000000   150.000000
# mean       5.843333     3.057333      3.758000     1.199333
# std        0.828066     0.435866      1.765298     0.762238
# min        4.300000     2.000000      1.000000     0.100000
# 25%        5.100000     2.800000      1.600000     0.300000
# 50%        5.800000     3.000000      4.350000     1.300000
# 75%        6.400000     3.300000      5.100000     1.800000
# max        7.900000     4.400000      6.900000     2.500000

鸢尾花数据集

鸢尾花数据集

用决策树分类鸢尾花

from sklearn import tree
import graphviz

clf = tree.DecisionTreeClassifier()
clf = clf.fit(X, y)
dot_data = tree.export_graphviz(
    clf, out_file=None
)
graph = graphviz.Source(dot_data)
graph
用决策树分类鸢尾花

from sklearn import tree
import graphviz

clf = tree.DecisionTreeClassifier(
    criterion='entropy', max_depth=4
)
clf = clf.fit(X, y)
dot_data = tree.export_graphviz(
    clf, out_file=None
)
graph = graphviz.Source(dot_data)
graph
剪枝

class sklearn.tree.DecisionTreeClassifier(*,
  criterion='gini',
  splitter='best',
  max_depth=None,
  min_samples_split=2,
  min_samples_leaf=1,
  min_weight_fraction_leaf=0.0,
  max_features=None,
  random_state=None,
  max_leaf_nodes=None,
  min_impurity_decrease=0.0,
  class_weight=None,
  ccp_alpha=0.0
)
  • max_depth:限制树的最大深度
  • min_samples_split:结点至少要包含 min_samples_split 个样本
  • min_samples_leaf:结点每个分支至少包含 min_samples_leaf 个样本
  • max_features:限制分支时考虑的特征个数
  • min_impurity_decrease:信息增益小于设定数值的分支不会发生
本章小结

决策树的每一个分支都是一条逻辑规则

决策树转化成规则集,经合并、删减,泛化性能可能会变得更好

除信息增益、增益率、基尼指数外,还有许多划分准则,它们

  • 对决策树的尺寸有很大影响
  • 对泛化性能的影响很有限

剪枝的方法和程度对决策树泛化性能的影响很显著

多变量决策树

  • 内部结点对属性的线性组合进行测试
  • 分界面不再与坐标轴平行,故也称“斜决策树”