数据挖掘-决策树 Decision tree

时间:2020-04-04 11:31:06   收藏:0   阅读:55

数据挖掘-决策树 Decision tree

1. 决策树概述

1.1 决策树介绍

1.1.1 决策树定义

1.1.2 本质

1.1.3 决策树的组成

  1. 根节点:最顶部的决策点
  2. 决策结点:(非叶子节点) 决策结点代表一个问题或者决策.通常对应待分类对象的属性
  3. 分支: 测试的结果
  4. 叶子节点: 就是树最底部的节点,也就是决策结果

1.1.4 决策树的分类

(1)分类树

(2)回归树(regression tree)

1.1.5 决策过程

  1. 在沿着决策树从上到下的遍历过程中,在每个结点都有一个测试。
  2. 对每个结点上问题的不同测试输出导致不同的分枝,最后会达到一个叶子结点。
  3. 这一过程就是利用决策树进行分类的过程,利用若干个变量来判断属性的类别

1.2 决策树的优化

1.2.1 过拟合


1.3.1 剪枝

1. 剪枝原因

2. 预剪枝(Pre-Pruning)

(1)什么是预剪枝

(2)思想

(3)过程

3. 后剪枝(Post-Pruning)

(1)什么是后剪枝?

(2)过程

4. 两种方式比较


2. 理论基础

2.1 香农理论

2.1.1 信息量

(1)信息量定义

2.1.2 平均信息量/信息熵

(1)信息熵定义

(2)平均信息量

2.1.3 条件熵

(1)定义

\[H(Y|X)=\sum_{x\in{X}}p(x)H(Y|X=x) \]

(2)公式推导

\[H(Y|X) = \sum_{x\in{X}}p(x)H(Y|X=x)=-\sum_{x\in{X}}p(x)\sum_{y\in{Y}}p(y|x)log_2p(y|x)= -\sum_{x\in{X}}\sum_{y\in{Y}}p(x,y)log_2p(y|x) \]

2.1.4 信息增益(Information gain)

(1)信息增益定义

\[Gain(D,A)=Ent(D)-Ent(D|A) \]

\[Ent(D|A) = \sum_{i=1}^v \frac{\left|D_i\right|}{\left|D\right|}Ent(D_i) \]

2.1.5 信息增益率 (Information Gain Ratio)

(1)信息增益率定义

\[增益率 GR(D,A) = \frac{Gain(D,A)}{H_A(D)}=Gain(D,A)*SplitInfo(D,A) \]

\[SplitInfo(D,A) = \frac{1}{H_A(D)} \]

2.1.6 基尼系数

(1)基尼系数定义

\[Gini(P)=\sum_{k=1}^kp_k(1-p_k)=1-\sum_{k=1}^Kp_k^2 \]

\[Gini(P) = \sum_{k=1}^kp_k(1-p_k)=\sum_{k=1}^k(p_k-p_k^2)=\sum_{k=1}^kp_k-\sum_{k=1}^kp_k^2=1-\sum_{k=1}^Kp_k^2 \]

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

(2)二分类问题

\[Gini(p)=2p(1-p)=1-p(1-p) \]

\[Gini(D,A)=\frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2) \]

(3)使用基尼系数的优点

(4)熵模型的度量方式比,基尼系数对应的误差

3. 决策树算法

3.1 ID3算法

3.1.1 ID3算法简述

3.1.2 熵值对决策的影响

3.1.3 算法思想

3.1.4 递归返回条件

  1. 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分。(此时将所含样本最多的类别设置为该叶子节点类别)
  2. 熵小于阀值,熵的大小表示数据的复杂程度,当熵过小时,表示数据的纯度比较大,如果熵或者基尼值小于一定程度时,节点停止分裂
  3. 决策树的深度是所有叶子节点的最大深度,当深度到达指定的上限大小时,停止分裂

3.1.5 算法步骤

计算节点信息增益 Gain(D,a) :
节点a的熵: Ent(D,a)
节点D的熵: Ent(D)
节点信息增益: Gain(D,a)=Ent(D)?Ent(D,a)
生成节点node:
if D 中样本全属于同一类别 C then
    将node标记为 C 类叶节点;return
end if
if A=? OR D 中样本在 A 上取值相同 then
    将node标记为叶节点,期类别标记为 D 中样本数最多的类;return
end if
按照节点信息增益,从 A 中选择最优划分属性 a?
for a? 中的每一个值 ai? do
	为node生成一个分支;令 Di 表示 D 中在 a? 上取值为 ai? 的样本子集;
	if Di 为空,then
		将分支节点标记为叶节点,其类别标记为 D 中样本最多的类;return
	else
		以 TreeGenerate(Di,A/a?) 为分支节点
	end if
end for

3.1.6 ID3算法缺点


3.2 C 4.5 算法

3.2.1 为什么采用C 4.5 算法?

(1)ID3算法缺点


3.2.2 C4.5对以上缺点的改进

(1)对于信息增益作为标准容易偏向于取值较多特征的问题

(2)对不能处理连续值特征问题

  1. \(m\)个连续样本从小到大排列。(比如 m 个样本的连续特征A有 m 个,从小到大排列 \(a1,a2,......am\))
  2. 取相邻两样本值的平均数,会得\(m-1\)个划分点。
    • 其中第\(i\)个划分点$ t_i $表示为:

\[t_i=\frac{a_i+a_{i+1}}{2} \]

  1. 对于这\(m-1\)个点,分别计算以该点作为二元分类点时的信息增益。选择信息增益最大的点作为该连续特征的二元离散分类点
    • (比如取到的增益最大的点为\(a_t\),则小于\(a_t\)的值为类别1,大于\(a_t\)的值为类别2,这样就做到了连续特征的离散化。
    • 注意的是,与离散属性不同,如果当前节点为连续属性,则该属性后面还可以参与子节点的产生选择过程。(即将符合该决策的数据进行下一次计算)
  2. 用信息增益比选择最佳划分。

注意

(3)对于缺失值处理的问题

3.2.3 算法思想


3.2.4 算法步骤

计算节点信息增益比 Gainratio(D,a) :
节点a的熵: Ent(D,a)
节点D的熵: Ent(D)
节点信息增益: Gain(D,a)=Ent(D)?Ent(D,a)
节点固定值: IV(a)
节点信息增益比: Gainratio(D,a)=Gain(D,a)IV(a)
生成节点node:
if D 中样本全属于同一类别 C then
	将node标记为 C 类叶节点;return
end if
if A=? OR D 中样本在 A 上取值相同then
	将node标记为叶节点,期类别标记为 D 中样本数最多的类;return
end if
按照节点信息增益,从 A 中选择最优划分属性 a?
for a? 中的每一个值 ai? do
	为node生成一个分支;令 Di 表示 D 中在 a? 上取值为 ai? 的样本子集;
	if Di 为空,then
		将分支节点标记为叶节点,其类别标记为 D 中样本最多的类;return
	else
		以 TreeGenerate(Di,A/a?) 为分支节点
	end if
end for

3.2.6 决策树C4.5算法的不足与改进

  1. 决策树算法非常容易过拟合,因此对于生成的决策树要进行剪枝。C4.5的剪枝方法有优化的空间。思路主要是两种,一种是预剪枝,即在生成决策树的时候就决定是否剪枝。另一个是后剪枝,即先生成决策树,再通过交叉验证来剪枝。后面在下篇讲CART树的时候我们会专门讲决策树的减枝思路,主要采用的是后剪枝加上交叉验证选择最合适的决策树。
  2. C4.5生成的是多叉树,在计算机中二叉树模型会比多叉树运算效率高。多叉树改二叉树,可以提高效率。
  3. C4.5只能用于分类。
  4. C4.5由于使用了熵模型,里面有大量的耗时的对数运算,如果是连续值还有大量的排序运算。如果能够加以模型简化减少运算强度但又不牺牲太多准确性的话,因此用基尼系数代替熵模型

3.3 CART分类/回归树

3.3.1 为什么引入CART分类/回归树

3.3.2 结点选择标准

(1)对于分类树,使用平均基尼系数作为分类依据

(2)对于回归树,使用方差作为分类依据

3.3.3 CART分类树算法对连续特征和离散特征的处理

(1)CART分类树算法对连续值的处理

(2)CART分类树算法对多个(大于2)离散值的处理

  1. CART采用的是不停的二分。
  2. 会考虑把特征A分成\(\{A_1\}\)\(\{A_2,A_3\}\)\(\{A2\}\)\(\{A_1,A_3\}\)\(\{A_3\}\)\(\{A_1,A_2\}\)三种情况,找到基尼系数最小的组合,比如\(\{A2\}\)\(\{A_1,A_3\}\),然后建立二叉树节点,一个节点是\(\{A_2\}\)对应的样本,另一个节点是\(\{A_1,A_3\}\)对应的样本
    • 由于这次没有把特征A的取值完全分开,后面还有机会对子节点继续选择特征A划分A1和A3这和ID3、C4.5不同,在ID3或C4.5的一颗子树中,离散特征只会参与一次节点的建立。

(3)例

技术分享图片

技术分享图片

技术分享图片

3.3.4 CART分类树算法思想

  1. 从根节点开始,对节点计算现有特征的基尼指数
    • 对每一个特征,例如A,再对其每个可能的取值如a,根据样本点对A=a的结果的‘是’与‘否’划分为两个部分,利用公式2.1.6(2)进行计算
  2. 在所有可能的特征A以及该特征所有的可能取值a中,选择基尼指数最小的特征及其对应的取值作为最优特征和最优切分点
  3. 根据最优特征和最优切分点,将本节点的数据集二分,生成两个子节点
  4. 对两个字节点递归地调用上述步骤,直至节点中的样本个数小于阈值,或者样本集的基尼指数小于阈值,或者没有更多特征后停止
  5. 生成CART分类树

3.3.6 CART剪枝

(1)后剪枝算法思想

(2)剪枝过程

  1. 令决策树的非叶子节点为\(\{T_1,T_2...,T_i\}\)
  2. 计算所有非叶子节点的表面误差率增益值 \(a=\{a_1,a_2,a_3,...,a_n\}\)
  3. 选择表面误差率增益值 \(a_i\) 最小的非叶子节点$ T_i$(若多个非叶子节点具有相同小的表面误差率增益值,选择节点数最多的非叶子节点)
  4. \(T_i\) 进行剪枝

(3)计算


4. 总结

4.1 三种算法比较

4.1.1 三种算法对比表格

算法 支持模型 树结构 特征选择 连续值处理 缺失值处理 剪枝 特征值属性多次使用
ID3 分类 多叉树 信息增益 不支持 不支持 不支持 不支持
C4.5 分类 多叉树 信息增益率 支持 支持 支持 不支持
CART 分类,回归 二叉树 基尼系数,均方差 支持 支持 支持 支持

参考1 ID3 C4.5

参考2

参考3

参考4 回归树

参考5 cart算法

参考6 回归树预测值

原文:https://www.cnblogs.com/nishoushun/p/12630624.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!