【机器学习】决策树(三)——生成算法(ID3、C4.5与CRAT)

回顾

简单理解决策树
通过例子理解决策树构建过程

前面我们介绍了决策树的特征选择,以及根据信息增益构建决策树。

那么决策树的生成又有哪些经典算法呢?本篇将主要介绍ID3的生成算法,然后介绍C4.5中的生成算法。最后简单介绍CRAT算法。

ID3算法

前面我们提到,一般而言,信息增益越大,则意味着使用该属性来进行划分所获得的“纯度”提升就越大。因此,我们可以用信息增益来进行决策树的划分属性选择。著名的ID3决策树学习算法就是以信息增益为准则来划属性的。

ID3算法流程
输入:训练数据集 D D D,特征集 A A A,阀值 E \mathcal{E} E
输出:决策树 T T T
(1)若 D D D中所属实例属于同一类 C k C_k Ck,则T为单结点树,并将类 C k C_k Ck作为该结点的类标记,返回 T T T
(2)若 A = ϕ A = \phi A=ϕ,则 T T T为单结点树,并将 D D D中实例数最大的类 C k C_k Ck作为该结点的类标记,返回 T T T
(3)否则,按照计算 A A A中每个特征对 D D D信息增益,选择信息增益最大的特征 A m A_m Am
(4)如果 A m A_m Am的信息增益小于阀值 E \mathcal{E} E,则置 T T T为单结点树,并将 D D D中实例数最大的类 C k C_k Ck作为该结点的类标记,返回 T T T
(5)否则,对 A m A_m Am的每一种可能值 a i a_i ai,依 A m = a i A_m=a_i Am=ai D D D分割为若干非空子集 D i D_i Di,将 D i D_i Di中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树 T T T,返回 T T T
(6)对第 i i i个子结点,以 D i D_i Di为训练集,以 A − A m A-A_m AAm为特征集,递归调用步骤(1)~(5),得到子树 T i T_i Ti,返回 T i T_i Ti

ID3算法的优缺点

  • 优点:

决策树构建速度快,容易构建

  • 缺点:

计算依赖于特征数目较多的特征,而属性值最多的属性并不一定最优
ID3算法不是递增算法
ID3算法是单变量决策树,对特征属性之间的关系不会考虑
抗噪性差
只适合小规模数据集,需要将数据放到内存中
容易产生过拟合

C4.5算法

C4.5算法与ID3算法相似,C4.5算法对ID3算法进行了改进。C4.5在生成的过程中,用信息增益比来选特征。

信息增益比

以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题,使用信息增益比可以对这一问题进行校正。这是特征选择的另一准则。

定义:特征 A A A对训练数据集 D D D的信息增益比 g R ( D , A ) g_R(D,A) gR(D,A)定义为其信息增益 g ( D , A ) g(D,A) g(D,A)与训练数据集 D D D关于特征 A A A的值的熵 H A ( D ) H_A(D) HA(D)之比,即:
g R ( D , A ) = g ( D , A ) H A ( D ) g_R(D,A) = \frac{g(D,A)}{H_A(D)} gR(D,A)=HA(D)g(D,A)
其中: H A ( D ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ l o g 2 ∣ D i ∣ ∣ D ∣ H_A(D)=-\sum_{i=1}^{n}\frac{|D_i|}{|D|}log_2\frac{|D_i|}{|D|} HA(D)=i=1nDDilog2DDi n n n是特征 A A A取值的个数。

C4.5算法流程
输入:训练数据集 D D D,特征集 A A A,阀值 E \mathcal{E} E
输出:决策树 T T T
(1)若 D D D中所属实例属于同一类 C k C_k Ck,则T为单结点树,并将类 C k C_k Ck作为该结点的类标记,返回 T T T
(2)若 A = ϕ A = \phi A=ϕ,则 T T T为单结点树,并将 D D D中实例数最大的类 C k C_k Ck作为该结点的类标记,返回 T T T
(3)否则,按照计算 A A A中每个特征对 D D D信息增益比,选择信息增益比最大的特征 A m A_m Am
(4)如果 A m A_m Am的信息增益比小于阀值 E \mathcal{E} E,则置 T T T为单结点树,并将 D D D中实例数最大的类 C k C_k Ck作为该结点的类标记,返回 T T T
(5)否则,对 A m A_m Am的每一种可能值 a i a_i ai,依 A m = a i A_m=a_i Am=ai D D D分割为若干非空子集 D i D_i Di,将 D i D_i Di中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树 T T T,返回 T T T
(6)对第 i i i个子结点,以 D i D_i Di为训练集,以 A − A m A-A_m AAm为特征集,递归调用步骤(1)~(5),得到子树 T i T_i Ti,返回 T i T_i Ti

C4.5算法的优缺点

  • 优点:

产生的规则易于理解
准确率较高
实现简单

  • 缺点:

对数据需要进行多次扫描和排序,所以效率低
只适合小规模数据集,需要将数据放到内存中

CART算法

CART决策树使用“基尼指数”来选择特征划分,数据集 D D D的纯度可以用基尼值来度量:
G i n i ( D ) = ∑ k = 1 ∣ y ∣ ∑ k ′ ≠ k p k p k ′ = 1 − ∑ k = 1 ∣ y ∣ p k 2 Gini(D) = \sum_{k=1}^{|y|}\sum_{k^{'} \neq k}p_kp_{k^{'}} = 1 - \sum_{k=1}^{|y|}p_k^2 Gini(D)=k=1yk̸=kpkpk=1k=1ypk2
直观来说, G i n i ( D ) Gini(D) Gini(D)反映了从数据集 D D D中随机抽取两个样本,其类别标记不一致的概率。因此 G i n i ( D ) Gini(D) Gini(D)越小,则数据集 D D D的纯度越高。

如果样本集合 D D D根据特征 A A A是否取某一可能值 a a a被分割成 D 1 D_1 D1 D 2 D_2 D2两部分,即:
KaTeX parse error: Can't use function '$' in math mode at position 31: …in D|A(x) = a\}$̲,$D_2 = D - D_1
则在特征 A A A的条件下,集合 D D D的基尼指数定义为:
G i n i ( D , A ) = ∣ D 1 ∣ ∣ D ∣ G i n i ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ G i n i ( D 2 ) Gini(D,A) = \frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2) Gini(D,A)=DD1Gini(D1)+DD2Gini(D2)
通式为:
G i n i ( D , a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ G i n i ( D v ) Gini(D,a) = \sum_{v=1}^{V}\frac{|D_v|}{|D|}Gini(D_v) Gini(D,a)=v=1VDDvGini(Dv)
基尼指数 G i n i ( D ) Gini(D) Gini(D)表示集合 D D D的不确定性,基尼指数 G i n i ( D , A ) Gini(D,A) Gini(D,A)表示经 A = a A=a A=a分割后集合 D D D的不确定性。
我们在候选属性集合 A A A中,选择那个是的划分后基尼指数最小的属性作为最优划分属性。

注:基尼指数用来划分属性生成分类数的,对于回归树的生成我们用的是最小二乘回归树生成算法。

最小二乘回归树生成算法

输入:训练数据集 D D D
输出:回归树 f ( x ) f(x) f(x)

在训练数据集所在的输入空间中,递归的将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树。
(1)选择最优切分变量 j j j与切分点 s s s,求解:
min ⁡ j , s [ min ⁡ c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + min ⁡ c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] \min_{j,s}[\min_{c_1}\sum_{x_i \in R_1(j,s)}(y_i-c_1)^2+\min_{c_2}\sum_{x_i \in R_2(j,s)}(y_i-c_2)^2] j,smin[c1minxiR1(j,s)(yic1)2+c2minxiR2(j,s)(yic2)2]
遍历变量 j j j,对固定的切分变量 j j j扫描切分点 s s s,选择使上式达到最小值 的对 ( j , s ) (j,s) (j,s)
(2)用选定的对 ( j , s ) (j,s) (j,s)划分区域,并决定相应的输出值:
R 1 ( j , s ) = { x ∣ x ( j ) ⩽ s } , R 2 ( j , s ) = { x ∣ x ( j ) > s } R_1(j,s)=\{x|x^{(j)}\leqslant s\},R_2(j,s)=\{x|x^{(j)} > s\} R1(j,s)={xx(j)s}R2(j,s)={xx(j)>s}
c m = 1 N m ∑ x i ∈ R m ( j , s ) y i , x ∈ R m , m = 1 , 2 c_m = \frac{1}{N_m}\sum_{x_i \in R_m(j,s)}y_i,x \in R_m,m = 1, 2 cm=Nm1xiRm(j,s)yixRmm=1,2
(3)继续对两个子区域调用步骤(1)(2),直到满足停止条件
(4)将输入空间划分为 M M M个区域 R 1 , R 2 , . . . , R M R_1,R_2,...,R_M R1,R2,...,RM,生成决策树:
f ( x ) = ∑ m = 1 M c m I ( x ∈ R m ) f(x) = \sum_{m=1}^{M}c_mI(x \in R_m) f(x)=m=1McmI(xRm)
CART基于基尼指数的生成算法

输入:训练数据集 D D D,停止计算条件;
输出:CART决策树

根据训练数据集,从根结点开始,递归的将每个结点进行以下操作,构建二叉决策树。
(1)设结点的训练数据集为 D D D,计算现有特征对该数据集的基尼指数。此时,对每一个特征 A A A,对其可能取的每一个值 a a a,根据样本点对 A = a A=a A=a的测试为“是”或“否”将 D D D分割成 D 1 D_1 D1 D 2 D_2 D2两部分,计算 A = a A=a A=a时的基尼指数。
(2)在所有可能的特征 A A A以及它们所有可能的切分点 a a a中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点,生成两个子结点。
(3)对两个子结点递归调用(1),(2),直到满足停止条件;
(4)生成CART决策树。

总结

在这里插入图片描述

对于每种生成算法,只是使用了不同的方法来选择特征,流程基本类似。
ID3和C4.5算法均只适合小规模数据集上使用
ID3和C4.5算法都是单变量决策树
当属性取值比较多的时候,最好考虑C4.5算法,ID3算法得出的结果比较差
决策树分类一般只适合小数据量的情况
此外,我们还可以对决策树进行一些优化策略,比如:剪枝。决策树剪枝优化及可视化

参考资料:
李航《统计学习方法》
周志华《机器学习》西瓜书

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV 决策树是一个常用的机器学习算法,用于分类和回归任务。它是一种监督学习方法,通过构建决策树模型来对数据进行分类或预测。 决策树的构建过程主要包括以下几个步骤: 1. 特征选择:根据给定的训练数据集,选择合适的特征来构建决策树。选择合适的特征是决策树算法的关键,可以通过信息增益、基尼指数等准则来选择最优特征。 2. 决策树生成:根据选择的特征,将训练数据集分割为不同的子集,并利用这些子集构建决策树的节点。决策树生成过程中采用递归的方式,直到满足终止条件。 3. 决策树的剪枝:为了减少决策树的过拟合现象,需要对生成决策树进行剪枝操作。通过对决策树进行剪枝,可以提高决策树的泛化能力。 在OpenCV中,可以使用cv::ml::DTrees类来构建决策树模型。该类提供了一系列的方法用于构建和训练决策树模型,包括设置特征的类型、选择特征、设置树的参数等。 通过对训练数据的学习,决策树可以对新的数据进行分类或回归预测。在分类任务中,决策树将根据样本的特征进行分割,并根据样本的类别进行分类。在回归任务中,决策树将根据样本的特征进行分割,并根据样本的值进行预测。 总之,OpenCV 决策树是一个强大的机器学习算法,可以用于分类和回归任务。它通过构建决策树模型来对数据进行分类或预测,具有较好的泛化能力和易解释性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值