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