决策树算法(原理篇)

决策树算法

一、ID3(多叉树)

1、特征划分依据:信息增益

   S S S 是训练样本集合, ∣ S ∣ |S| S 是训练样本数,样本划分为 m m m 个不同的类 C 1 , C 2 , . . . , C m C_1,C_2,...,C_m C1,C2,...,Cm ,其样本数量分别为 ∣ C 1 ∣ , ∣ C 2 ∣ , . . . , ∣ C m ∣ |C_1|,|C_2|,...,|C_m| C1,C2,...,Cm ,则 G a i n ( S , A ) Gain(S,A) Gain(S,A) 是属性 A A A 在集合 S S S 上的信息增益:
G a i n ( S , A ) = E n t r o p y ( S ) − E n t r o p y ( S , A ) Gain(S,A)=Entropy(S)-Entropy(S,A) Gain(S,A)=Entropy(S)Entropy(S,A)

   E n t r o p y ( S ) Entropy(S) Entropy(S) 是训练样本的信息熵, E n t r o p y ( S , A ) Entropy(S,A) Entropy(S,A) 是训练样本中属性 A A A 的信息熵,且有:
E n t r o p y ( S , A ) = ∑ v ∣ S v ∣ S E n t r o p y ( S v ) Entropy(S,A)=\sum_v\frac{|S_v|}{S}Entropy(S_v) Entropy(S,A)=vSSvEntropy(Sv)

   ∑ \sum 是属性 A A A 的所有可能的值 v v v S v S_v Sv 是属性 A A A v v v 值的 S S S 子集, ∣ S v ∣ |S_v| Sv 是其样本数, E n t r o p y ( S v ) Entropy(S_v) Entropy(Sv) 是其信息熵,设 ∣ C j v ∣ |C_j^v| Cjv S v S_v Sv 中属于 j j j 类样本的数量,则有信息熵的计算公式:
E n t r o p y ( S ) = − ∑ i = 1 m ∣ C i ∣ ∣ S ∣ l o g 2 ∣ C i ∣ ∣ S ∣ Entropy(S)=-\sum_{i=1}^{m}\frac{|C_i|}{|S|}log_2\frac{|C_i|}{|S|} Entropy(S)=i=1mSCilog2SCi
E n t r o p y ( S v ) = − ∑ i = 1 m ∣ C j v ∣ ∣ S v ∣ l o g 2 ∣ C j v ∣ ∣ S v ∣ Entropy(S_v)=-\sum_{i=1}^{m}\frac{|C_j^v|}{|S_v|}log_2\frac{|C_j^v|}{|S_v|} Entropy(Sv)=i=1mSvCjvlog2SvCjv

2、步骤

  • 从根节点开始,计算所有可能的特征的信息增益,选择信息增益最大的特征作为节点的划分特征
  • 由该特征的不同取值建立子节点;
  • 再对子节点递归1-2步,构建决策树;
  • 直到没有特征可以选择或类别完全相同为止,得到最终的决策树。

3、局限性

  • 只能用于分类任务;
  • 属性必须是离散值;
  • 属性不能有缺失值;
  • 容易过拟合(没有剪枝);
  • 采用信息增益作为选择最优划分特征的标准,然而信息增益会偏向那些取值较多的特征
  • 在选择分裂属性时没有考虑到条件属性间的相关性,只计算数据集中每一个条件属性与决策属性之间的期望信息,有可能影响到属性选择的正确性。

二、C4.5(多叉树)

1、特征划分依据:信息增益率
G a i n R a t i o ( S , A ) = G a i n ( S , A ) S p l i t I n f o r m a t i o n ( S , A ) GainRatio(S,A)=\frac{Gain(S,A)}{SplitInformation(S,A)} GainRatio(S,A)=SplitInformation(S,A)Gain(S,A)

   G a i n R a t i o ( S , A ) GainRatio(S,A) GainRatio(S,A) 是属性 A A A 在集合 S S S 上的信息增益率, G a i n ( S , A ) Gain(S,A) Gain(S,A) 是属性 A A A 在集合 S S S 上的信息增益, S p l i t I n f o r m a t i o n ( S , A ) SplitInformation(S,A) SplitInformation(S,A) 是分裂信息,用于衡量属性分裂数据的广度和均匀性,且有:
S p l i t I n f o r m a t i o n ( S , A ) = ∑ v ∣ S v ∣ ∣ S ∣ l o g 2 ∣ S v ∣ ∣ S ∣ SplitInformation(S,A)=\sum_v\frac{|S_v|}{|S|}log_2\frac{|S_v|}{|S|} SplitInformation(S,A)=vSSvlog2SSv

2、步骤

  • 用信息增益率作为度量选取测试属性;
  • 按照 ID3 递归算法生成树;
  • 算法停止条件:如果某一节点的分支所覆盖的样本都属于同一类的时候,那么递归就可以终止,该分支就会产生一个叶子节点;如果某一分支覆盖的样本的个数如果小于一个阈值,那么也可产生叶子节点,该叶子节点所覆盖的样本哪个类占大多数,那么该叶子节点的类别就是那个占大多数的类

3、相对于ID3算法的改进

  • 能处理数据类型为连续型的属性;
  • 能处理缺失值;
  • 增加了剪枝,可防止过拟合;
  • 增益率准则对可取值数目较少的属性有所偏好,因此,C4.5算法并不是直接选择增益率最大的候选划分属性,而是使用了一个启发式:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。

4、局限性

  • 只能用于分类任务;
  • 在构造树的过程中,需要对数据集进行多次的顺序扫描和排序(尤其是对连续特征),因而导致算法的低效;
  • 在选择分裂属性时没有考虑到条件属性间的相关性,只计算数据集中每一个条件属性与决策属性之间的期望信息,有可能影响到属性选择的正确性。

三、CART(二叉树)

(一) CART分类树

1、特征划分依据:基尼指数

  数据集 D D D 的纯度可用基尼值来度量,基尼系数越小,不纯度越低,特征越好
G i n i ( D ) = ∑ i = 1 n p ( x i ) × ( 1 − p ( x i ) ) = 1 − ∑ i = 1 n p 2 ( x i ) \begin{aligned} Gini(D) &=\sum_{i=1}^{n}p(x_i)\times (1-p(x_i))\\ &= 1-\sum_{i=1}^{n}p^2(x_i) \end{aligned} Gini(D)=i=1np(xi)×(1p(xi))=1i=1np2(xi)

  其中, p ( x i ) p(x_i) p(xi) 是分类 x i x_i xi 出现的概率, n n n 是分类的数目。 G i n i ( D ) Gini(D) Gini(D) 反映了从数据集 D D D 中随机抽取两个样本,其类别标记不一致的概率。因此, G i n i ( D ) Gini(D) Gini(D) 越小,则数据集 D D D 的纯度越高。

  在属性 A A A 的条件下,样本 D D D 的基尼指数定义为:
G i n i I n d e x ( D ∣ A = a ) = ∣ D 1 ∣ ∣ D ∣ G i n i ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ G i n i ( D 2 ) GiniIndex(D|A=a)=\frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2) GiniIndex(DA=a)=DD1Gini(D1)+DD2Gini(D2)

  对于样本 D D D,个数为 ∣ D ∣ |D| D,根据特征 A A A 是否取某一可能值 a a a,把样本 D D D 分成两部分 D 1 D_1 D1 D 2 D_2 D2。所以 CART 分类树算法建立起来的是二叉树,而不是多叉树。

2、步骤

  • 用基尼指数作为度量选取测试属性;
  • 按照 C4.5 递归算法生成树,不同地方在于 CART 生成的是二叉树;
  • CART 分类树采用叶子节点里概率最大的类别作为当前节点的预测类别。

3、相对于 C4.5 的改进

  • C4.5 为多叉树,运算速度慢,CART 为二叉树,运算速度快;
  • CART 使用 Gini 指数作为变量的不纯度量,减少了大量的对数运算。

(二) CART回归树

1、分类树与回归树的区别在样本的输出,如果样本输出是离散值,这是分类树;样本输出是连续值,这是回归树。分类树的输出是样本的类别,回归树的输出是一个实数。

2、特征划分依据:误差平方和最小

  计算各个特征各个值划分的两部分 D 1 D_1 D1 D 2 D_2 D2 的误差平方和,选择误差平方和最小的作为最优特征最优切分点
m i n A , a [ m i n c 1 ∑ x i ∈ D 1 ( A , a ) ( y i − c 1 ) 2 + m i n c 2 ∑ x i ∈ D 2 ( A , a ) ( y i − c 2 ) 2 ] \mathop{min}\limits_{A,a} [\mathop{min}\limits_{c_1}\sum_{x_i\in D_1(A,a)}(y_i-c_1)^2+\mathop{min}\limits_{c_2}\sum_{x_i\in D_2(A,a)}(y_i-c_2)^2] A,amin[c1minxiD1(A,a)(yic1)2+c2minxiD2(A,a)(yic2)2]

  其中, c 1 c_1 c1 D 1 D_1 D1 的样本标签均值, c 2 c_2 c2 D 2 D_2 D2 的样本标签均值。根据最优特征 A A A 和最优切分点 a a a,将本节点的数据集划分成两部分 D 1 D_1 D1 D 2 D_2 D2 ,并给出相应的输出值:
D 1 ( A , a ) = ( x , y ) ∈ D ∣ A ( x ) < = a D_1(A,a)=(x,y)\in D|A(x)<=a D1(A,a)=(x,y)DA(x)<=a
D 2 ( A , a ) = ( x , y ) ∈ D ∣ A ( x ) > a D_2(A,a)=(x,y)\in D|A(x)>a D2(A,a)=(x,y)DA(x)>a
c 1 = a c e r a g e ( y i ∣ x i ∈ D 1 ( A , a ) ) c_1=acerage(y_i|x_i\in D_1(A,a)) c1=acerage(yixiD1(A,a))
c 2 = a c e r a g e ( y i ∣ x i ∈ D 2 ( A , a ) ) c_2=acerage(y_i|x_i\in D_2(A,a)) c2=acerage(yixiD2(A,a))

3、步骤

  • 用误差平方和最小作为度量选取测试属性;
  • 按照 CART 分类树递归算法生成树,不同地方在于对 CART 回归树做预测时,用叶子节点的均值来作为预测的输出结果。

四、对连续特征的处理

  • ID3 不支持数据类型为连续型的特征
  • 当属性类型为离散型,无须对数据进行离散化处理;
  • 当属性类型为连续型,则需要对数据进行离散化处理。具体思路如下:

   m m m 个样本的连续特征 A A A m m m 个值,从小到大排列,取相邻两样本值的平均数做划分点,一共有 m − 1 m-1 m1 个,其中第 i i i 个划分点 T i T_i Ti 表示为 T i = ( a i + a i + 1 / 2 ) T_i=(a_i+a_{i+1}/2) Ti=(ai+ai+1/2) ,分别计算以这 m − 1 m-1 m1 个点作为二元切分点时的信息增益率(C4.5算法) / 基尼指数(CART分类树) / 均方误差和(CART回归树)。选择信息增益率最大 / 基尼指数最小 / 误差平方和最小的点为该连续特征的最佳切分点。比如取到的信息增益率最大的点为 a t a_t at,则小于等于 a t a_t at 的值为类别1,大于 a t a_t at 的值为类别2,这样就做到了连续特征的离散化。

五、对缺失值的处理

1、ID3 不支持对缺失值的处理

2、对于缺失值的处理可以分为两个子问题:

  • 问题一:在特征值缺失的情况下进行划分特征的选择?(即如何计算特征的信息增益率)
  • 问题二:选定该划分特征,对于缺失该特征值的样本如何处理?(即到底把这个样本划分到哪个结点里)

3、针对问题一

  • C4.5 的做法是:对于具有缺失值特征,用没有缺失的样本子集所占比重来折算;
  • CART的做法是:一开始严格要求分裂特征评估时只能使用在该特征上没有缺失值的那部分数据,在后续版本中,CART 算法使用了一种惩罚机制来抑制提升值,从而反映出缺失值的影响(例如,如果一个特征在节点的 20% 的记录是缺失的,那么这个特征就会减少 20% 或者其他数值)。

4、针对问题二

  • C4.5 的做法是:将样本同时划分到所有子节点,不过要调整样本的权重值,其实也就是以不同概率划分到不同节点中。
  • CART 的做法是:为树的每个节点都找到代理分裂器,无论在训练数据上得到的树是否有缺失值都会这样做。在代理分裂器中,特征的分值必须超过默认规则的性能才有资格作为代理(即代理就是代替缺失值特征作为划分特征的特征),当 CART 树中遇到缺失值时,这个实例划分到左边还是右边是决定于其排名最高的代理,如果这个代理的值也缺失了,那么就使用排名第二的代理,以此类推,如果所有代理值都缺失,那么默认规则就是把样本划分到较大的那个子节点。代理分裂器可以确保无缺失训练数据上得到的树可以用来处理包含确实值的新数据。

六、剪枝

(一)预剪枝

1、定义:预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点。

2、及早停止增长的主要方法有:

  • 限定决策树的深度
  • 节点内数据样本低于某一阈值
  • 设置某个指标,比较结点划分前后的泛化能力

3、预剪枝不仅可以降低过拟合的风险而且还可以减少训练时间,但另一方面它是基于 “贪心” 策略,会带来欠拟合风险

(二)后剪枝

1、定义:后剪枝则是先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点。

2、后剪枝主要方法:

  • 错误率降低剪枝(Reduced-Error Pruning, REP)
  • 悲观剪枝(Pessimistic Error Pruning, PEP)
  • 代价复杂度的剪枝(Cost-Complexity Pruning, CPP)

七、总结

算法树结构支持模型特征选择连续值处理缺失值处理剪枝
ID3多叉树分类信息增益不支持不支持不支持
C4.5多叉树分类信息增益率支持支持支持
CART二叉树分类、回归基尼指数、最小误差平方和支持支持支持
  • 划分标准的差异:ID3 使用信息增益偏向特征值多的特征,C4.5 使用信息增益率克服信息增益的缺点,偏向于特征值少的特征,CART 使用基尼指数克服 C4.5 需要求对数的巨大计算量,偏向于特征值较多的特征。

  • 速度的差异:ID3 和 C4.5 是多叉树,速度较慢,CART 是二叉树,计算速度很快。

  • 样本数据的差异:ID3 只能处理离散数据且对缺失值敏感,C4.5 和 CART 可以处理连续性数据且有多种方式处理缺失值;从样本量考虑的话,小样本建议 C4.5、大样本建议 CART。C4.5 处理过程中需对数据集进行多次扫描排序,处理成本耗时较高,而 CART 本身是一种大样本的统计方法,小样本处理下泛化误差较大 。

  • 样本特征的差异:ID3 和 C4.5(处理离散特征) 层级之间只使用一次特征,CART 和 C4.5(处理连续特征) 可多次重复使用特征。

参考文献


周志华 著.机器学习,北京:清华大学出版社,2016. (ISBN 978-7-302-42328-7)
决策树算法–ID3算法 - 知乎 (zhihu.com)
决策树算法–C4.5算法 - 知乎 (zhihu.com)
决策树算法–CART分类树算法 - 知乎 (zhihu.com)
决策树算法–CART回归树算法 - 知乎 (zhihu.com)
【机器学习】决策树(上)——ID3、C4.5、CART(非常详细) - 知乎 (zhihu.com)
决策树(decision tree)(三)——连续值处理_天泽28的博客-CSDN博客_决策树连续值处理
决策树(decision tree)(四)——缺失值处理_天泽28的博客-CSDN博客_决策树缺失值的处理

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 决策树算法是一种基于树状结构的机器学习算法,可以用于分类和回归问题。它根据每个节点中的某些特征值,分割数据集,使数据集的特征更加相似。决策树算法的建模过程是一种递归分割的过程,将数据集分割成更小的子集,直到找到最终的决策树模型。决策树算法的优点是它可以解释相对容易,并且易于实现。另外,它们可以处理大量不相关的特征值,它们也可以处理连续的和离散的特征值。决策树算法的缺点是它们对于训练数据可能过拟合,并且在处理复杂的数据集时可能会有偏差。因此,决策树算法是一种有效和经济的数据挖掘算法,它可以用于解决各种分类和回归问题。它的结构也使它成为灵活的模型,可以用于不同的环境和应用。此外,决策树算法也可以用于更复杂的分类和回归问题。综上所述,决策树算法是一种高效而灵活的数据挖掘算法,可以用于处理各种分类和回归问题。 ### 回答2: 决策树是一种基本的机器学习算法,被广泛应用于数据挖掘、人工智能等领域。本综述将对决策树算法进行深入的综述,着重分析其原理、优缺点以及应用等方面。 首先,决策树的基本原理是通过将数据集划分为不同的子集,使得每个子集中的数据具有相同的特征。这种划分一直进行,直到达到某个停止条件。在划分过程中,决策树根据某个属性对数据进行分割,并根据分割后的子集的纯度来确定最佳分割属性。 决策树算法的优点之一是易于理解和解释。由于决策树可以直观地表示数据的分类过程,因此决策树模型的结果通常可以被非专业人士轻松理解。此外,决策树算法还可以处理具有缺失值或异常值的数据,并且对于非线性关系和交互特征的处理也相对较好。 然而,决策树算法也存在一些缺点。首先,决策树算法容易产生过拟合问题。当决策树的深度过深或分割停止条件设置不当时,模型可能会过于复杂,并且在训练集上表现很好但在测试集上表现较差。其次,决策树算法对输入数据的变化非常敏感,稍微改变数据集可能会导致完全不同的树结构。此外,决策树算法在处理连续型数据和高维数据时存在一定的困难。 决策树算法在实际应用中有广泛的应用。其中,ID3、C4.5和CART是三个经典的决策树算法。ID3算法通过信息增益来选择最佳分割属性,C4.5算法在ID3的基础上引入了信息增益比进行改进,而CART算法则以基尼系数作为划分标准。此外,决策树算法还可以用于特征选择、异常检测和回归等领域。 总结而言,决策树算法是一种简单而有效的机器学习算法。尽管存在一些缺点,但决策树算法在处理特定问题时仍然具有很高的应用价值。未来,我们可以通过改进决策树算法的过拟合问题、处理连续型数据和高维数据等挑战,进一步提高决策树算法的性能和应用范围。 ### 回答3: 决策树算法机器学习中一种重要的分类和回归方法。它通过构建一棵树状结构来表示分类规则或者回归模型。决策树算法具有易于理解和解释的优点,因此受到了广泛关注和研究。 首先,决策树算法的基本原理是通过对数据集进行划分来构建一棵树。划分的依据是选择一个最佳的特征和划分点。常用的特征选择算法有信息增益、信息增益率、基尼系数等。一旦选择了特征和划分点,就将数据集划分为多个子集,然后对每个子集递归地构建决策树。 其次,决策树算法有多种变体和扩展。例如,ID3算法、C4.5算法和CART算法决策树算法中的典型代表。这些算法在特征选择、剪枝、处理缺失值等方面有不同的策略。此外,还有基于决策树的集成学习方法,如随机森林和梯度提升树。这些方法通过组合多棵决策树来提升分类或回归的性能。 此外,决策树算法还具有一些优缺点。首先,决策树算法对于数据的预处理要求较低,能够处理缺失值和离散值。其次,决策树算法生成的模型具有很好的可解释性,可以直观地展示分类或回归的过程。然而,决策树算法也存在一些缺点,例如容易过拟合、对噪声敏感等。 最后,决策树算法在各个领域都有广泛的应用。例如,在医疗诊断中,可以利用决策树算法来辅助医生预测疾病的发生。在金融风控中,可以利用决策树算法来判断客户的信用等级。在推荐系统中,可以利用决策树算法来推荐用户感兴趣的商品。这些应用都可以充分利用决策树算法的优点,从而得到更好的结果。 综上所述,决策树算法是一种重要的机器学习算法,具有很好的可解释性和应用广泛性。通过深入研究决策树算法原理、变体和应用,可以更好地理解和应用这一算法

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值