决策树

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

© Zhihai WANG, 2015
18
Weka中ID3的实现
splitData(att,data) 根据att对data进行分裂,参数为要分裂的数据
集合data和用于分裂的属性att,返回分裂后得到的 子集集合.
© Zhihai WANG, 2015
19
Weka中ID3的实现
ClassifyInstance() classifyInstance(),它为一个给定的实例预测类 值.在Weka中,名称型的类值(和所有名称型属 性值一样)用双精度变量来编码和存储,它代表在 属性申明中值的名称的索引.我们采用这个表示, 有利于加快执行速度,减少存储要求.在ID3的实 现中,classifyInstance()由实例的属性值引导递归 地沿着树下降,直到到达一个叶子结点.然后返回 存储在此叶子结点中的类值m_ClassValue.
决策树程序分析
内容
ID3算法
➢ 建立决策树 ➢ 利用决策树对实例分类 ➢ 实现方法
C4.5算法(j48)
➢ C4.5算法的特点 ➢ 类及其继承关系 ➢ 建立决策树 ➢ 利用决策树对实例分类
© Zhihai WANG, 2015
2
Constructing Decision Trees
Procedure BuildTree(S)
high high high normal normal normal high normal
mild mild mild hot mild
normal normal high normal high
windy
False True False False False True True False False False True True False True
© Zhihai WANG, 2015
22
Weather.nominal运行结果(1)
Id3 outlook = sunny | humidity = high: no | humidity = normal: yes outlook = overcast: yes outlook = rainy | windy = TRUE: no | windy = FALSE: yes
ComputeInfoGain() 计算与属性和数据集合相关的信息增量.首先它计算
数据集合的熵.然后,它用splitData()把数据集合分为子集, 并且在每一个子集上调用computeEntropy()计算此子集合 的熵.最后它返回信息增益,即前者的熵与后者的熵的加 权和的差.
gain(
S
,
A)
Create a branch out of the root for the condition A = v; IF {xInstances: x. A = v} = Ø
THEN RETURN (leaf with majority label) // 训练实例中没有实例在属性A上取值为v, 但测试实例未必如此 ELSE Build-DT ({xInstances: x. A = v}, Attributes - {A})
IF all examples have the same label
THEN RETURN (leaf node with label)
ELSE IF set of attributes is empty
THEN RETURN (leaf with majority label)
ELSE
Choose best attribute A as root; FOR each value v of A
} } / end of while
© Zhihai WANG, 2015
3
建立决策树
在ID3算法建立决策树的过程中,可以递归地进行: 首先,选择一个属性作为根结点,并为该属性的每一个可能 的取值生成一个分支.这样,就根据属性的取值把实例集合 划分成多个子集合. 然后对每一个分支重复以上的过程,过程中使用的实例集合 是属于该分支的实例. 如果在一个结点的所有实例属于相同的类,则停止扩展那一 部分子树. 这样ID3的所建立的决策树中每一个非叶子结点对应着一个 非类别属性,每个叶结点代表从树根到叶结点之间的路径所 对应的记录所属的类别属性值.
© Zhihai WANG, 2015
14
Weka中ID3的实现
BuildClassifier(): 从训练数据集合构造一个分类器. ID3不能处理
➢ 非名称型类 ➢ 缺省值以及 ➢ 任何非名称型的其它属性
首先在训练数据集合中检查这些数据 然后,它对训练集合做一个备份(为了避免改变原 始数据) 并且调用weka.core.Instances中的一个方法删除所 有带类缺损值的实例.这是因为这些实例在训练过 程中不起作用.最后,调用makeTree().
info([2, 3]) =


2 5

log
2 5

3 5

log
3 5


0.971bits
属性outlook为overcast的实例有4个,且全部为yes.信 息熵为
info([4,0]) =

4 4

log
4 4

0


0
© Zhihai WANG, 2015
10
信息增益
© Zhihai WANG, 2015
6
信息增益
信息熵(离散)的定义
设有一个离散随机变量X,它有n个可能取值,分别为a1, a2, …, an,
各种取值出现的概率分别为p1= P( a1),p2= P( a2),…,pn= P( an)

N
info p1, p2 ,…, pN pn log pn
play
no no yes yes yes no yes no yes yes yes yes yes no
© Zhihai WANG, 2015
8
信息增益
Outlook
temperature
sunny Overcast rainy
hot
mild
Yes yes no no no
Yes yes yes yes
Yes yes yes no no
Yes
Yes
yes
yes
no
yes
no
yes
no
no (a)
这是一个计算属性outlook的信息增益的例子.属性outlook有三个取(b)
值,分别为sunny, overcast, rainy.当前实例集合中共有14个实例,
其中9个实例的类值为yes, 5个实例的类值为no.信息熵为
属性outlook为rainy的实例有5个,其中3个类值为yes,2 个类值为no.
info([3,2]) =


3 5

log
3 5

2 5

log
2 5


0.971bits
故属性outlook的信息增益为
gain(S,Outlook)
0.940


5 14

0.971

4 14
© Zhihai WANG, 2015
20
Weka中ID3的实现
distributionForInstance() 方法distributionForInstance()用与classify
Instance()相同的方法工作,即递归调用本方法, 返回类分布值:m_Distribution.
© Zhihai WANG, 2015
n 1
称为随机变量X 的信息(离散)熵.
信息增益的定义 一个属性的信息增益是指,由于使用这个属性分割实例集而导致的期 望熵的降低. 其定义式为
gain(S
,
A)

info(S
)

vVaies (
A)
|Sv |S
| |info(Sv
)
其中S为实例集合,A为某一属性,v为属性的某一取值.
© Zhihai WANG, 2015
reaching the branch ➢ stop if all instances have the same class
© Zhihai WANG, 2015
5
Constructing Decision Trees
Algorithm Build-DT (Instances, Attributes)
© Zhihai WANG, 2015
4
Constructing Decision Trees
Informal description of the method
➢ select some attribute (Nominal) for root node ➢ make branch for each value ➢ training data is split into subsets (one for each value) ➢ train branches further using only the data actually

0

5 14

0.971

0.246bits
© Zhihai WANG, 2015
11
利用决策树对实例分类
某实例由其属性值引导递归地沿着树下降,直 到到达一个叶子结点.然后返回存储在此叶子结点 中的类值.
从根到叶子结点都有一条路径,这条路径就是 一条“规则”
© Zhihai WANG, 2015
7
信息增益:计算信息增益的例子
outlook
sunny sunny overcast rainy rainy rainy overcast sunny sunny rainy sunny overcast overcast rainy
temperature
humidity
Hot
high
Hot Hot Mild cool cool cool mild cool
humidity
windy
Info([9, 5]) =

9 14

log
9 14

5 14

log
5 14


0.940bits
high
normal
false
true
© Zhihai WANG, 2015
9
信息增益
属性outlook为sunny的实例有5个,其中2个类值为yes, 3个类值为no.信息熵为
21
Weka中ID3的实现
toString(): Java ID3的toString()方法用与J4.8大致相同的格式输出 决策树.它通过访问存储在树结点中的属性信息, 递归地把树的结构输入到一个String变量中.它用 weka.core.Attribute里的name()和value()方法获得 属性的名称和属性的值.

info(S
)

vVaies (
A)
|Sv |S
| |info(Sv
)
© Zhihai WANG, 2015
17
Weka中ID3的实现
computeEntropy() 计算一个数据集合的熵,参数为数据集合data,返回数据 集合类分布的熵.
N
info p1, p2 ,…, pN pn log pn n1
© Zhihai WANG, 2015
15
Weka中源自文库D3的实现
MakeTree(): 实际上是通过递归生成所有隶属于根结点的子树 来建立决策树的.在当前结点上:
➢ 如果训练集为空,返回一个值为丢失值?的单个结点; ➢ 对每个属性调用computeInfoGain ()计算信息增益值,并选
出最大的信息增益及其对应的属性; ➢ 如果最大的信息增益值为0,则当前结点上的训练集由相同
用实例集合S初始化根结点Root 用根结点Root初始化队列Q While Q is not Empty do {
取出队列Q中的第一个结点N; if N 是不纯的 (Pure) {
for 当前每一个属性 A 估计该结点在属性 A上的信息增益;
选出最佳的属性;
将N分裂为|Values(A)|子结点,并逐个加入Q中;
类别属性值的记录组成,返回一个带有该值的单个结点; ➢ 在具有最大信息获得的属性上调用splitData ()分裂数据集
合. ➢ 在相应子集合上调用buildClassifier(),从而重复调用
makeTree(),建立完整的Id3决策树
© Zhihai WANG, 2015
16
Weka中ID3的实现
class Id3
变量声明 buildClassifier ()
makeTree ()
computeEntropy() computeInfoGain ()
ClassifyInstance () distributionForInstance()
toString() main()
splitData ()
12
对每个结点的衡量
到达该结点的实例数目; 如果是叶子结点的话,那就是分类的路径(规则); 叶子结点标明了正确分类的比例; 有些规则的效果可以比其它的一些规则要好。
© Zhihai WANG, 2015
13
ID3程序中的主要方法
ID3算法的主 类class Id3 放在包
weka.classifi ers.trees下
相关文档
最新文档