ID3算法java实现

1 ID3算法概述

1.1 信息熵

熵是无序性(或不确定性)的度量指标。假如事件A的全概率划分是(A1,A2,...,An),每部分发生的概率是(p1,p2,...,pn)。那信息熵定义为:

通常以2为底数。所以信息熵的单位是bit。

1.2 决策树

决策树是以实例为基础的归纳学习算法。它从一组无次序、无规则的元组中推理出决策树表示形式的分类规则。它採用自顶向下的递归方式。在决策树的内部结点进行属性值的比較,并依据不同的属性值从该结点向下分支,叶结点是要学习划分的类。从根到叶结点的一条路径就相应着一条合取规则,整个决策树就相应着一组析取表达式规则。

1.3 ID3算法

ID3算法的核心是:在决策树各级结点上选择属性时,用信息增益(information gain)作为属性的选择标准,以使得在每个非叶结点进行測试时,能获得关于被測试记录最大的类别信息。其详细方法是:检測全部的属性,选择信息增益最大的属性产生决策树结点,由该属性的不同取值建立分支,再对各分支的子集递归调用该方法建立决策树结点的分支,直到全部子集仅包括同一类别的数据为止。

最后得到一棵决策树,它能够用来对新的样本进行分类。

2 取样实验

样本数据:

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来标记

经计算得到的决策树:

3 ID3算法Java实现

ID3算法实现包含四个类的设计:

一、 决策树节点类(TreeNode类),包含类属性:name(节点属性名称)。rule(节点属性值域,也就是相应决策树的分裂规则),child(节点下的孩子节点)。datas(当前决策下相应的样本元组), candidateAttr(当前决策下剩余的分类属性)。

二、 最大信息增益节点计算类(Gain类):包含属性值:D(当前决策层次下的样本数据),attrList(当前决策层次下的剩余分类属性);包含方法:统计属性取值方法,统计属性不同取值计数方法,计算先验熵和条件熵的方法。筛选指定属性索引在指定值上的样本元组方法。通过先验熵减后验熵计算出最大信息增益值属性的方法。详细方法在程序中都已经凝视。在这里仅仅是依据需求给出方法的大致功能。

三、决策树建立类(DecisionTree类):包含方法:计算当前样本中分类属性的取值及其计数,并由此计算出多数类,决策树节点递归构建构成,详细实现思想同课上讲授内容。在此不在重述,借助的类是增益值计算类。

四、 ID3算法測试类(TestDecisionTree类):借助于上面决策树建立类,决策树节点之间连接已经建立完成。以下将以上第二部分的样本数据作为測试数据,而且实现递归打印方法,输出决策树详细内容。

ID3算法Java实现的更多相关文章

  1. 决策树ID3算法的java实现(基本试用所有的ID3)

    已知:流感训练数据集,预定义两个类别: 求:用ID3算法建立流感的属性描述决策树 流感训练数据集 No. 头痛 肌肉痛 体温 患流感 1 是(1) 是(1) 正常(0) 否(0) 2 是(1) 是(1 ...

  2. 决策树ID3算法的java实现

    决策树的分类过程和人的决策过程比较相似,就是先挑“权重”最大的那个考虑,然后再往下细分.比如你去看医生,症状是流鼻涕,咳嗽等,那么医生就会根据你的流鼻涕这个权重最大的症状先认为你是感冒,接着再根据你咳 ...

  3. ID3算法(Java实现)

    数据存储文件:buycomputer.properties #数据个数 datanum=14 #属性及属性值 nodeAndAttribute=年龄:青/中/老,收入:高/中/低,学生:是/否,信誉: ...

  4. 决策树ID3算法的java实现(基本适用所有的ID3)

    已知:流感训练数据集,预定义两个类别: 求:用ID3算法建立流感的属性描述决策树 流感训练数据集 No. 头痛 肌肉痛 体温 患流感 1 是(1) 是(1) 正常(0) 否(0) 2 是(1) 是(1 ...

  5. 机器学习笔记----- ID3算法的python实战

    本文申明:本文原创,如有转载请申明.数据代码来自实验数据都是来自[美]Peter Harrington 写的<Machine Learning in Action>这本书,侵删. Hell ...

  6. 归纳决策树ID3(Java实现)

    先上问题吧,我们统计了14天的气象数据(指标包括outlook,temperature,humidity,windy),并已知这些天气是否打球(play).如果给出新一天的气象指标数据:sunny,c ...

  7. ID3算法(决策树)

    一,预备知识: 信息量: 单个类别的信息熵: 条件信息量: 单个类别的条件熵: 信息增益: 信息熵: 条件熵:(表示分类的类,表示属性V的取值,m为属性V的取值个数,n为分类的个数) 二.算法流程: ...

  8. 归并排序算法 java 实现

    归并排序算法 java 实现 可视化对比十多种排序算法(C#版) [直观学习排序算法] 视觉直观感受若干常用排序算法 算法概念 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Di ...

  9. 快速排序算法 java 实现

    快速排序算法 java 实现 快速排序算法Java实现 白话经典算法系列之六 快速排序 快速搞定 各种排序算法的分析及java实现 算法概念 快速排序是C.R.A.Hoare于1962年提出的一种划分 ...

随机推荐

  1. 【bzoj3834】[Poi2014]Solar Panels 数论

    题目描述 Having decided to invest in renewable energy, Byteasar started a solar panels factory. It appea ...

  2. [canvas入坑0] Jquery + HTML5 做最简易的画板

    查看效果请到 http://philippica.github.io/  点击paint 嗯,心血来潮想做个东西的一部分 html部分不用多说了,重点就是一个canvas <!DOCTYPE h ...

  3. POJ3678 Katu Puzzle 【2-sat】

    题目 Katu Puzzle is presented as a directed graph G(V, E) with each edge e(a, b) labeled by a boolean ...

  4. linux系统初始化——sysinit文件写法详解

    sysinit文件写法详解 sysinit文件是linux初始化文件系统时执行的第一个脚本文件.它主要做在各个运行级别中进行初始化工作,包括: 启动交换分区;检查磁盘;设置主机名;检查并挂载文件系统; ...

  5. ANT总结

    1 Ant是什么? Apache Ant 是一个基于 Java的生成工具.生成工具在软件开发中用来将源代码和其他输入文件转换为可执行文件的形式(也有可能转换为可安装的产品映像形式).随着应用程序的生成 ...

  6. Using MEF to Set Up Dependency Injection

    The Managed Extensibility Framework (MEF) is a built-in set of elements that allows you to “export” ...

  7. AVRStudio 6 添加调试功能

    下载这个文件并安装就可以了:http://avr-jungo-usb.software.informer.com/download/ 具体可以看这个贴子:http://electronics.stac ...

  8. HDU 6229 Wandering Robots(2017 沈阳区域赛 M题,结论)

    题目链接  HDU 6229 题意 在一个$N * N$的格子矩阵里,有一个机器人. 格子按照行和列标号,左上角的坐标为$(0, 0)$,右下角的坐标为$(N - 1, N - 1)$ 有一个机器人, ...

  9. JAVA中的编码分析

    在实际编程中可以不用关注JVM中使用的是什么编码,而只需要关注自己输出需要采用的编码,JVM会根据你设置的编码正确操作. 1.String采用的是什么编码? 很多厂家根据规范实现了JVM,JVM只说明 ...

  10. 渗透测试集成环境Faraday

    渗透测试集成环境Faraday   Kali Linux集成了海量的渗透测试工具.但是这些工具在使用的时候,还是分离的.虽然用户可以通过Shell.日志/报告导入导出功能等方式,进行整合,但是仍然不便 ...