ID3算法的实现与改进
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
ID3算法的实现与改进 (2)
一、ID3算法简介 (2)
二、ID3算法的具体实现方法 (2)
三、ID3算法的不足与改进 (3)
四、分析 (4)
五、总结和心得体会 (5)
ID3算法的实现与改进
一、ID3算法简介
构造决策树的基本算法是贪心算法,它以自顶向下递归的各个击破方式构造决策树。
ID3算法的基本策略如下:
1.创建一个节点。
如果样本都在同一类,则算法停止,把该节点改成树叶节点,并用该类标记。
2.否则,选择一个能够最好的将训练集分类的属性,该属性作为该节点的测试属性。
3.对测试属性中的每一而值,创建相应的一个分支,并据此划分样本。
4.使用同样的过程,自顶向下的递归,直到满足下面的三个条件中的一个时就停止递归。
·给定节点的所有样本都属于同一类。
·没有剩余的属性可以用来划分。
·分支没有样本。
二、ID3算法的具体实现方法
设S是s个数据样本的集合。
假定类标号属性具有m个不同的值,定义m 个不同类C i(i=1,2,···,m)。
设s i是类C i中的样本数。
对一个给定的样本分类所需要的期望信息(熵)由下式给出:
I(s1,s2,···,s m)=−∑p i log2(p i)
m
i=1
其中p
i 是任意样本属性C
i
的概率,并用s i/s估计。
设属性A具有v个不同值{a1,a2,···,a v}。
可以用属性A将S划分为v个子集{S1,S2,···S v};其中,S j包含S中这样一些样本,他们在A上具有值a j。
如果A
选作测试属性(即最好的分裂属性),则这些子集对应于包含集合S的节点生长出来的分歧。
设S ij是子集S j中类C i的样本数。
根据由A划分成子集的熵或期望信息由下式给出:
E(A)=∑s1j+s2j+···+s mj
I(s1j,s2j,···,s mj)
v
j=1
其中,s1j+s2j+···+s mj
s
是第j个子集的权,并且等于子集(即A值为a j)重的样本
个数除以S中的样本总数。
熵值越小,子集划分的纯度越高。
注意,对于给定的子集S j有
I(s1j,s2j,···,s mj)=−∑p ij log2(p ij)
m
i=1
其中,p ij=s ij
S j
是S j中的样本属于类C i的概率。
在A上分枝将获得的编码信息是Gain(A)=I(s1,s2,···,s m)−E(A)
Gain(A)称为信息增益,它是由于知道属性A的值而导致额熵的期望压缩。
具有最高信息增益的属性将选作给定集合S的测试属性。
创建一个节点,并以该属性标记,对于属性的每个值创建分枝,并据此划分样本。
三、ID3算法的不足与改进
ID3算法往往偏向于选择取值较多的属性,而在很多情况下取值较多的属性并不总是最重要的属性,即按照使熵值最小的原则被ID3算法列为应该首先判断的属性在现实情况中确并不一定非常重要。
改进:针对信息增益Gain(A)=I(s1,s2,···,s m)−E(A),为了弥补上述分裂属性选取是的多值偏向,可对Gain(A)乘上一个条件修正函数,对其进行一定的“惩罚”,从而使各待选属性的信息增益值重新给排序。
新的公式为
Gain(A)=(1−f(n))I(s1,s2,···,s m)−E(A)
其中f(n)={sin1
3
,n<4
sin1
n
,n≥4
,n为v,即属性A中不同值的个数
具体实现:f(n)
Gain(A)
四、分析
对改进前和改进后的ID3算法进行分析对比。
样本数据集如下:由于原样本数据集中各属性的v值都不超过3,所以我在阴晴属性和湿度属性中添加了几个新值,阴晴中添加了rany1(大雨),snow;在湿度属性中添加了low
下面是改进前ID3算法的测试结果
改进后ID3算法的测试结果:
从上可以明显看出,改进后的ID3算法要优于改进前的ID3算法。
五、总结和心得体会
上这门课程之前说模式识别是什么可能不知道,但上完这门课之后,肯定了解了什么是数据挖掘,什么是机器学习,在这门课程中,先后学习了决策树ID3算法,以及ID3的改进算法C4.5,还有朴素贝叶斯、K近邻等算法,对数据挖掘有了更全面的认识。
这次实习主要研究了ID3算法,其实ID3算法有很多不足的地方,比如像不能处理数值型的属性,决策树结点之间的相关性不强。
主要针对多值偏向问题进行了改进,通过引入一个修正函数来对信息增益加以修正,在一定程度上弥补了ID3算法的缺陷。