1.1 信息熵
熵是无序性(或不确定性)的度量指标。假如事件A的全概率划分是(A1,A2,...,An),每部分发生的概率是(p1,p2,...,pn),那信息熵定义为:
通常以2为底数,所以信息熵的单位是bit。
1.2 决策树
决策树是以实例为基础的归纳学习算法。它从一组无次序、无规则的元组中推理出决策树表示形式的分类规则。它采用自顶向下的递归方式,在决策树的内部结点进行属性值的比较,并根据不同的属性值从该结点向下分支,叶结点是要学习划分的类。从根到叶结点的一条路径就对应着一条合取规则,整个决策树就对应着一组析取表达式规则。
1.3 ID3算法
ID3算法的核心是:在决策树各级结点上选择属性时,用信息增益(information gain)作为属性的选择标准,以使得在每一个非叶结点进行测试时,能获得关于被测试记录最大的类别信息。其具体方法是:检测所有的属性,选择信息增益最大的属性产生决策树结点,由该属性的不同取值建立分支,再对各分支的子集递归调用该方法建立决策树结点的分支,直到所有子集仅包含同一类别的数据为止。最后得到一棵决策树,它可以用来对新的样本进行分类。
样本数据:
outlook |
temperature |
humidity |
windy |
play |
sunny |
hot |
high |
FALSE |
no |
sunny |
hot |
high |
TRUE |
no |
overcast |
hot |
high |
FALSE |
yes |
rainy |
mild |
high |
FALSE |
yes |
rainy |
cool |
normal |
FALSE |
yes |
rainy |
cool |
normal |
TRUE |
no |
overcast |
cool |
normal |
TRUE |
yes |
sunny |
mild |
high |
FALSE |
no |
sunny |
cool |
normal |
FALSE |
yes |
rainy |
mild |
normal |
FALSE |
yes |
sunny |
mild |
normal |
TRUE |
yes |
overcast |
mild |
high |
TRUE |
yes |
overcast |
hot |
normal |
FALSE |
yes |
rainy |
mild |
high |
TRUE |
No |
统计数据:(便于计算熵值)
outlook |
temperature |
humidity |
windy |
play |
|||||||||
|
yes |
no |
|
yes |
no |
|
yes |
no |
|
yes |
no |
yes |
no |
sunny |
2 |
3 |
hot |
2 |
2 |
high |
3 |
4 |
FALSE |
6 |
2 |
9 |
5 |
overcast |
4 |
0 |
mild |
4 |
2 |
normal |
6 |
1 |
TRUR |
3 |
3 |
|
|
rainy |
3 |
2 |
cool |
3 |
1 |
|
|
|
|
|
|
|
|
2.1 Outlook为sunny时:
temperature |
humidity |
windy |
play |
hot |
high |
FALSE |
no |
hot |
high |
TRUE |
no |
mild |
high |
FALSE |
no |
cool |
normal |
FALSE |
yes |
mild |
normal |
TRUE |
yes |
temperature |
humidity |
windy |
play |
|||||||
|
yes |
no |
|
yes |
no |
|
yes |
no |
yes |
no |
hot |
0 |
2 |
high |
0 |
3 |
FALSE |
1 |
2 |
2 |
3 |
mild |
1 |
1 |
normal |
2 |
0 |
TRUR |
1 |
1 |
|
|
cool |
1 |
0 |
|
|
|
|
|
|
|
|
2.1.1 humidity为high时:
temperature |
windy |
play |
hot |
FALSE |
no |
hot |
TRUE |
no |
mild |
FALSE |
no |
第二种情况,所以的样本都属于同一类别,用对应的类别属性no来标记
2.1.2 humidity为normal时:
temperature |
windy |
play |
cool |
FALSE |
yes |
mild |
TRUE |
yes |
第二种情况,所以的样本都属于同一类别,用对应的类别属性yes来标记
2.2 Outlook为overcast时:
temperature |
humidity |
windy |
play |
hot |
high |
FALSE |
yes |
cool |
normal |
TRUE |
yes |
mild |
high |
TRUE |
yes |
hot |
normal |
FALSE |
yes |
第二种情况,所以的样本都属于同一类别,用对应的类别属性yes来标记
2.3 Outlook为rainy时:
temperature |
humidity |
windy |
play |
mild |
high |
FALSE |
yes |
cool |
normal |
FALSE |
yes |
cool |
normal |
TRUE |
no |
mild |
normal |
FALSE |
yes |
mild |
high |
TRUE |
no |
temperature |
humidity |
windy |
play |
|||||||
|
yes |
no |
|
yes |
no |
|
yes |
no |
yes |
no |
mild |
2 |
1 |
high |
1 |
1 |
FALSE |
3 |
0 |
3 |
2 |
cool |
1 |
1 |
normal |
2 |
1 |
TRUR |
0 |
2 |
|
|
2.3.1 temperature为milk时:
humidity |
windy |
play |
high |
FALSE |
yes |
normal |
FALSE |
yes |
high |
TRUE |
no |
humidity |
windy |
play |
|||||
|
yes |
no |
|
yes |
no |
yes |
no |
high |
1 |
1 |
FALSE |
2 |
0 |
2 |
1 |
normal |
1 |
0 |
TRUR |
0 |
1 |
|
|
2.3.1.1 windy为false时:
humidity |
play |
high |
yes |
normal |
yes |
第二种情况,所以的样本都属于同一类别,用对应的类别属性yes来标记
2.3.1.2 windy为true时:
humidity |
play |
high |
no |
第二种情况,所以的样本都属于同一类别,用对应的类别属性no来标记
2.3.2 temperature为cool时:
temperature |
humidity |
windy |
play |
cool |
normal |
FALSE |
yes |
cool |
normal |
TRUE |
yes |
第二种情况,所以的样本都属于同一类别,用对应的类别属性yes来标记
经计算得到的决策树:
ID3算法实现包括四个类的设计:
一、 决策树节点类(TreeNode类),包括类属性:name(节点属性名称),rule(节点属性值域,也就是对应决策树的分裂规则),child(节点下的孩子节点),datas(当前决策下对应的样本元组), candidateAttr(当前决策下剩余的分类属性)。
二、 最大信息增益节点计算类(Gain类):包括属性值:D(当前决策层次下的样本数据),attrList(当前决策层次下的剩余分类属性);包括方法:统计属性取值方法,统计属性不同取值计数方法,计算先验熵和条件熵的方法,筛选指定属性索引在指定值上的样本元组方法,通过先验熵减后验熵计算出最大信息增益值属性的方法。具体方法在程序中都已经注释,在这里只是根据需求给出方法的大致功能。
三、决策树建立类(DecisionTree类):包括方法:计算当前样本中分类属性的取值及其计数,并由此计算出多数类,决策树节点递归构建构成,具体实现思想同课上讲授内容,在此不在重述,借助的类是增益值计算类。
四、 ID3算法测试类(TestDecisionTree类):借助于上面决策树建立类,决策树节点之间连接已经建立完毕,下面将以上第二部分的样本数据作为测试数据,并且实现递归打印方法,输出决策树具体内容。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/u012822513/article/details/46833765