SparkMllib决策树归纳算法ID3详解

1. 构建算法的几大关键

  • 算法输入:样本特征构成的数据集合
  • 算法输出:ID3决策树
  • 算法步骤:
    • 1-如果所有的属性都别处理完毕,直接返回,否则
    • 2-计算所有节点的信息增益的取值,选择信息增益取值较大的值对应的节点
    • 3-如果通过上述步骤已经可以正确的划分,直接结束,否则从剩余的样本中选择信息增益最大的值对应的特征进一步划分得到最后的结果。
  • 算法优化
    • 基于C4.5算法–了解

2. 基于模型建树中信息熵和信息增益的计算[重点]

  • 要先会信息熵和信息增益才能通过ID3算法构造决策树

  • 案例: 这里以特征age为例,计算信息熵和信息增益,其他列的计算相仿即可.
    在这里插入图片描述

3. 关于ID3算法案例详解

  • 按照年龄分开数据集如下:
    在这里插入图片描述
  1. 标签列被分为两类: S1(买)=640;S2(不买)=384;S=S1+S2=1024; 也就是公有 1024个样本
    其中: S1的概率p1=640/1024=0.625; S2的概率p2=384/1024=0.375

样本分类(标签列)的信息熵: I(S1,S2)=I(640,384)=-p1log(p1) -p2log(p2)=0.9544

  1. 计算每个特征信息熵及信息增益
①计算对给定样本分类所需的信息熵:
类别标签S被分为两类:买or不买(标签列)。其中:
S1(买)=640;S2(不买)=384;S=S1+S2=1024;
S1的概率p1=640/1024=0.625; S2的概率p2=384/1024=0.375
I(S1,S2)=I(640,384)=-p1log(p1) -p2log(p2)=0.9544

②计算每个特征的信息熵及信息增益
1.计算“年龄”特征的信息熵:年龄分为三组:青年(0)、中年(1)、老年(2)

1.1青年占总样本的概率
P(0)=384/1024=0.375
S1(买)=128   p1=128/384
S2(不买)=256  p2=256/384
I1(S1,S2)=I(128,256)=-p1log(p1) -p2log(p2)=0.9183

1.2中年占总样本的概率
P(1)=256/1024=0.25
S1(买)=256   p1=256/256=1
S2(不买)=0   p2=0/384=0
I2(S1,S2)=I(256,0)=-p1log(p1) -p2log(p2)=0


1.3老年占总样本的概率
P(2)=384/1024=0.375
S1(买)=257   p1=257/384
S2(不买)=127  p2=127/384
I3(S1,S2)=I(257,127)=-p1log(p1) -p2log(p2)=0.9157
	   则年龄的信息熵为:
		   E(年龄)= P(0)* I1(S1,S2)+ P(1)* I2(S1,S2)+ P(2)* I3(S1,S2)
				    =0.375*0.9183+0.25*0+0375*0.9157 =0.6877
				    
	   则年龄的信息增益为:
		   G(年龄)=0.9544-0.6877=0.2667
	
	
	
	
同理:===============================================================	
   
2.计算“学生”特征的信息熵:

E(学生)=0.7811
G(学生)=0.9544-0.7811=0.1733



3.计算“收入”“特征的熵:

E(收入)=0.9361
G(收入)=0.9544-0.9361=0.0183
4.计算“信誉”“特征的熵
E(信誉)=0.9048
G(信誉)=0.9544-0.9048=0.0496
3.1 由上对比基于规则的建树:
  • 1-首先计算总体的信息熵
    在这里插入图片描述
  • 2-分别计算每个分支节点的信息熵
  • 3-总体的信息熵-以A节点作为分支节点的信息熵,分别计算各个节点的信息增益
  • 4-选择信息增益最大的值对应特征划分
    在这里插入图片描述
  • 5-如果没有划分结束,从剩余的特征中选择出信息增益较大的值对应的特征作为分支节点,继续进行划分
  • 6-依次递归迭代构建决策树
    在这里插入图片描述
    总结: 对比基于规则建树,明显优化和调整了特征选择的方式,更加科学的选择信息增益较大的元素对应的特征.
3.2 信息的熵的计算公式:
  • 定义一个不确定性函数I(x)=log(1/p)=-log§
  • 对不确定性函数求解期望:
    • 离散型随机变量的期望
    • p1*log(1/p)+p2*log(1/p2)
    • sum(pi*log(1/p))=-sum(Pi*log(pi))
  • 公式: 见SparkMllib的决策树算法的原理详解一文

猜你喜欢

转载自blog.csdn.net/m0_49834705/article/details/113618672