飞道的博客

基于 ID3 算法的决策树概念+代码(R语言)+例子 -保姆级别手算教程

500人阅读  评论(0)

基于 ID3 算法的决策树 -Iterative Dichotomiser 3


Note: 本文侧重讲解ID3算法背后的原理以及如何使用,⭐ 想要了解ID3算法其背后原理的朋友阅读⭐。在很多平台中都有决策树的包,调用现成的包往往只需要一行代码就可以实现复杂的决策树,非常简单,固本文不再赘述。

ID3 概念

ID3算法是由Ross Quinlan基于奥卡姆剃刀理论(Occam’s razor)所设计的一种追求精简的决策树。该算法使用一种从上到下,从root 到leaf的贪心算法区分数据建立决策树。

算法

  • 分类过程
    1. 计算数据中所有特征的information gain
    2. 设information gain最高的特征为决策点
    3. 根据决策点分割数据
    4. 用更新的数据重复这个过程
  • 停止条件
    1. 分割数据后数据集中的特征都相同
    2. 没有剩余特征,所有特征都被使用过

判断最佳决策点

用来判断最佳决策点的方法有很多,包括:

Entropy,
Information gain,
Gini index,
Gain Ratio,
Reduction in Variance
Chi-Square
其中information gain是比较常用的一种基于Entropy的判断方法。

首先介绍Entropy 的概念

  • Entropy可以理解为测量数据有多“不纯”(impurity)的指标,(1)比如一幅扑克牌中全都是黑桃A,我们就可以说这副牌非常的“纯”; (2)当全是黑桃A的扑克牌中混入红桃K后,这个数据集就不再单一,我们可以说这个数据集有一些“不纯”;(3)当这副扑克完全由不一样的牌组成时,数据集中没有相同的特征,我们所以我们可以称这样的情况为完全“不纯”。

  • Entropy的公式

    • E n t r o p y ( n ) = − ∑ i = 1 c p i l o g 2 p i Entropy(n) = - \sum_{i=1}^{c} p_ilog_2p_i Entropy(n)=i=1cpilog2pi
    • pi为每一个可能结果的概率
  • Entropy 栗子🌰

    • 在一幅有52张牌的扑克里(没有王牌)随便抽一张特定花色特定数字的牌的概率为1/52
    • E n t r o p y ( n ) = − ∑ i = 1 52 1 52 l o g 2 1 52 = 5.7 Entropy(n) = - \sum_{i=1}^{52} \frac{1}{52}log_2\frac{1}{52} = 5.7 Entropy(n)=i=152521log2521=5.7

Information Gain (信息增益) 则是基于Entropy计算每次分隔数据后 {增加的信息量}/{减少的Entropy} 是多少

  • Information Gain 公式

    • I n f o r m a t i o n G a i n = E n t r o p y ( S ) − ∑ i ∣ S i ∣ ∣ S ∣ E n t r o p y ( S i ) InformationGain = Entropy(S) - \sum_{i}\frac{\lvert S_i \rvert}{\lvert S \rvert}Entropy(S_i) InformationGain=Entropy(S)iSSiEntropy(Si)
  • 栗子🌰

    如下表所示,计算特征Contains Images(简称CI)的Information Gain

    初 始 E n t r o p y : E n t r o p y ( S ) = − ( 3 6 l o g 2 3 6 + 3 6 l o g 2 3 6 ) = 1 初始Entropy:Entropy(S) = -(\frac{3}{6}log_2\frac{3}{6}+\frac{3}{6}log_2\frac{3}{6})=1 EntropyEntropy(S)=(63log263+63log263)=1
    I G C I = 1 − ( 2 6 ( − ( 1 2 l o g 2 1 2 + 1 2 l o g 2 1 2 ) ) + 4 6 ( − ( 2 4 l o g 2 2 4 + 2 4 l o g 2 2 4 ) ) ) = 0 IG_{CI} = 1-(\frac{2}{6}(-(\frac{1}{2}log_2\frac{1}{2}+\frac{1}{2}log_2\frac{1}{2}))+\frac{4}{6}(-(\frac{2}{4}log_2\frac{2}{4}+\frac{2}{4}log_2\frac{2}{4})))=0 IGCI=1(62((21log221+21log221))+64((42log242+42log242)))=0


第一个2/6代表在binary特征CI中,有2个为true;后面括号里的为在CI为true的情况下的Entropy(Si),可以看到两个true分别对应CLASS中的一个spam和一个ham,每一个的概率都是1/2,所以有了后面括号里的Entropy(1/2)+Entropy(1/2)

  • Entropy 越低越好
  • Information Gain (信息增益) 越高越好

通过ID3建立决策树

了解了Information Gain后,有小学数学基础就可以搭建决策树了。用如下数据举个栗子,这里用R语言进行计算。

要求: 通过ID3算法预测每种产品的quality

  1. 首先读取数据,改用1 hot encoding

  2. 计算初始Entropy (S0)以及IG

因为ID3是基于二叉树的分类,而A0中有三种分类,所以我们需要把A0转换到Binary,这里考虑三种情况:{1, 2 or 3}, {2, 1 or 3}, {3, 1 or 2}. 所以Information Gain 结果的第一行为A0在分为不同情况下的信息增益,而第二行是A1,A2,A3 的信息增益

我们可以看到4个特征中IG最高的为A2 (0.42)

  1. 选择A2为决策点分割数据

    分割后的数据如下表所示,在A2等于0时,所有的Q都时一样的,达到了我们的停止条件,可以不用管这个分支去看A2!=0的分支。

    这时我们的决策树如下,其实到这里就时决策树的全部内容了,后面的就是重复前面的步骤就可以了。

  2. 计算新数据的初始Entropy并找到IG最高的特征

因为A2已经作为决策点在上一层使用过了,所以在IG结果的第二行可以看到只有两个数据,分别是A1和A3,这里看到A1有最高的IG,所以选用A1做决策点

根据A1分割后的数据如下,当A1!=1是,Class都是一样的,达到停止条件,去看A1=1的branch

现在我们的决策数长成了这样

5. 继续重复,胜利在望
这时我们仅需要处理这个小数据集了

计算Entropy和IG

可以看到当A0为第一种分类时,所获得的IG=Entropy,也就是刚好可以把数据分开,我们采用A1={1} ,{2 or 3} 作为决策点

分割后的结果如下,到这里我们已经完全分割了所有数据。

现在我们已经有一个完全体的决策树🌲

模型应用

我们用生成的决策数去预测test set中的结果

用第二条数据举例子:A2=1 -> A1=1 ->COLOR=red -> Quality=Good,根据预测结果,符合这个特征的产品的质量为GOOD。


所有源码,计算过程,数据在 https://github.com/Stevo795/ID3-Decision-Tree

(疯狂暗示:⭐⭐⭐⭐⭐⭐)

Reference:
Prof. Christian Muise: http://www.haz.ca/


转载:https://blog.csdn.net/weixin_45265581/article/details/117180081
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场