决策树算法(ID3,C4.5,CART)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010420283/article/details/83065511

ID3,C4.5,CART是是决策树的核心算法。它们都由特征选择,树的生成,剪枝组成。但ID3和C4.5用于分类,CART可用于分类与回归。

1.ID3算法

ID3算法递归地构建决策树,从根节点开始,对所有特征计算信息增益,选择信息增益最大的特征作为节点的特征,由该特征的不同取值建立子节点;再对子节点递归地调用以上方法构建决策树;知道所有特征的信息增益均很小或者没有特征可以选择为止。最后得到一个决策树。
  在算法中(C4.5也是),有三种情形导致递归返回:
  (1)当前节点包含的样本全属于同一类别,无需划分。
  (2)当前属性集为空,或是所有样本在所有属性上取值相同,无法划分。(此时将所含样本最多的类别设置为该叶子节点类别)
  (3)当前节点包含的样本集合为空,不能划分。(将其父节点中样本最多的类别设置为该叶子节点的类别)

2.C4.5算法

信息增益准则对可取值数目较多的属性有所偏好,例如将数据的ID作为特征的话,它的信息增益将达到最大值,会造成过拟合。因而,C4.5算法中将采用信息增益比来进行特征的选择。信息增益比准则对可取值数目较少的属性有所偏好。

C4.5算法同ID3算法过程相似,仅在选择特征时,使用信息增益比作为特征选择准则。


  输入:训练数据集 DD ,特征集 AA , 阈值 ϵϵ ;
  过程:函数 TreeGenerate(D,A)TreeGenerate(D,A) .
  1:计算节点信息增益比 Gainratio(D,a)Gainratio(D,a) :
  2:  节点a的熵: Ent(D,a)Ent(D,a)
  3:  节点D的熵: Ent(D)Ent(D)
  4:  节点信息增益: Gain(D,a)=Ent(D)−Ent(D,a)Gain(D,a)=Ent(D)−Ent(D,a)
  5:  节点固定值: IV(a)IV(a)
  6:  节点信息增益比: Gainratio(D,a)=Gain(D,a)IV(a)Gainratio(D,a)=Gain(D,a)IV(a)
  7:生成节点node:
  8:if DD 中样本全属于同一类别 CC then
  9:  将node标记为 CC 类叶节点;return
  10:end if
  11:if A=∅A=∅ OR DD 中样本在 AA 上取值相同then
  12:  将node标记为叶节点,期类别标记为 DD 中样本数最多的类;return
  13:end if
  14:按照节点信息增益,从 AA 中选择最优划分属性 a∗a∗
  15:for a∗a∗ 中的每一个值 ai∗a∗i do
  16:  为node生成一个分支;令 DiDi 表示 DD 中在 a∗a∗ 上取值为 ai∗a∗i 的样本子集;
  17:  if DiDi 为空,then
  18:    将分支节点标记为叶节点,其类别标记为 DD 中样本最多的类;return
  19:  else
  20:    以 TreeGenerate(Di,A/a∗)TreeGenerate(Di,A/a∗) 为分支节点
  21:  end if
  22:end for
  输出:以node为根节点的一棵决策树

3. CART算法

CART分类树通过基尼指数选择最优特征,同时决定该特征的最优二值切分点(ID3和C4.5直接选择最优特征,不用划分)。基尼指数越大,样本集合不确定性越大。

CART树生成

(1) 设结点的训练数据集为D,计算现有特征对该数据集的基尼指数.此时,对于每个特征,每次取其中一个每个可能取得值,根据样本点对该值的测试结果为”是”或”否”将D分成2部分,并计算基尼指数. 
(2) 在所有可能的特征,以及他们所有可能的切分点中,选择基尼指数最小的特征,该选择的特征为最优特征,该特征中的切分点为最优切分点,依照最优特征和最优切分点生成二叉树,并把训练数据集分配到子节点中。 
(3)对两个子节点递归调用 (1) (2) ,直至满足停止条件 
(4)生成CART决策树。 
停止条件是样本个数小于预定阈值,或样本基尼指数小于预定阈值,或没有更多特征。

4. 剪枝操作

理想的决策树有三种:

1.叶子节点数最少

2.叶子加点深度最小

3.叶子节点数最少且叶子节点深度最小。

而在实际操作中,会由于噪声或者缺乏代表性样本导致过拟合,这就需要进行剪枝操作。剪枝包含预剪枝和后剪枝。

预剪枝

通过提前停止树的构建而对树剪枝,一旦停止,节点就是树叶,该树叶持有子集元祖最频繁的类。

停止决策树生长最简单的方法有:

1)定义一个高度,当决策树达到该高度时就停止决策树的生长

2)达到某个节点的实例具有相同的特征向量,及时这些实例不属于同一类,也可以停止决策树的生长。这个方法对于处理

数据的数据冲突问题比较有效。

3)定义一个阈值,当达到某个节点的实例个数小于阈值时就可以停止决策树的生长

4)定义一个阈值,通过计算每次扩张对系统性能的增益,并比较增益值与该阈值大小来决定是否停止决策树的生长。

2.后剪枝方法

后剪枝(postpruning):它首先构造完整的决策树,允许树过度拟合训练数据,然后对那些置信度不够的结点子树用叶子结点来代替,该叶子的类标号用该结点子树中最频繁的类标记。相比于先剪枝,这种方法更常用,正是因为在先剪枝方法中精确地估计何时停止树增长很困难。

参考网址

https://www.cnblogs.com/lliuye/p/9008901.html


 

 

猜你喜欢

转载自blog.csdn.net/u010420283/article/details/83065511