ID3算法Java实现

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

时间: 2024-08-06 07:55:26

ID3算法Java实现的相关文章

ID3算法(Java实现)

数据存储文件:buycomputer.properties #数据个数 datanum=14 #属性及属性值 nodeAndAttribute=年龄:青/中/老,收入:高/中/低,学生:是/否,信誉:良/优,归类:买/不买 #数据 D1=青,高,否,良,不买 D2=青,高,否,优,不买 D3=中,高,否,良,买 D4=老,中,否,良,买 D5=老,低,是,良,买 D6=老,低,是,优,不买 D7=中,低,是,优,买 D8=青,中,否,良,不买 D9=青,低,是,良,买 D10=老,中,是,良,买

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

已知:流感训练数据集,预定义两个类别: 求:用ID3算法建立流感的属性描述决策树 流感训练数据集 No. 头痛 肌肉痛 体温 患流感 1 是(1) 是(1) 正常(0) 否(0) 2 是(1) 是(1) 高(1) 是(1) 3 是(1) 是(1) 很高(2) 是(1) 4 否(0) 是(1) 正常(0) 否(0) 5 否(0) 否(0) 高(1) 否(0) 6 否(0) 是(1) 很高(2) 是(1) 7 是(1) 否(0) 高(1) 是(1) 原理分析: 在决策树的每一个非叶子结点划分之前,先

决策树ID3算法的java实现

决策树的分类过程和人的决策过程比较相似,就是先挑“权重”最大的那个考虑,然后再往下细分.比如你去看医生,症状是流鼻涕,咳嗽等,那么医生就会根据你的流鼻涕这个权重最大的症状先认为你是感冒,接着再根据你咳嗽等症状细分你是否为病毒性感冒等等.决策树的过程其实也是基于极大似然估计.那么我们用一个什么标准来衡量某个特征是权重最大的呢,这里有信息增益和基尼系数两个.ID3算法采用的是信息增益这个量. 根据<统计学习方法>中的描述,G(D,A)表示数据集D在特征A的划分下的信息增益.具体公式: G(D,A)

ID3算法(决策树)

一,预备知识: 信息量: 单个类别的信息熵: 条件信息量: 单个类别的条件熵: 信息增益: 信息熵: 条件熵:(表示分类的类,表示属性V的取值,m为属性V的取值个数,n为分类的个数) 二.算法流程: 实质:递归的先根建树,结束条件(当前子集类别一致),建树量化方法(信息增益) 三.示例代码: package com.mechinelearn.id3; import java.io.BufferedReader; import java.io.File; import java.io.FileRe

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

本文申明:本文原创,如有转载请申明.数据代码来自实验数据都是来自[美]Peter Harrington 写的<Machine Learning in Action>这本书,侵删. Hello,又和大家见面了,今天心情出奇的好,不知道为什么.就是好...此处省略一万字...上一次和大家说了,决策树的理论部分,今天我们就来动手帮助眼科医生做一个系统,让这个系统学会给需要隐形眼睛的用户一个建议,让用户可以知道自己适合哪种眼睛.老规矩,系统先从数据中学习. 一:计算给定数据集的香浓熵 大家还记得我们上

决策树-预测隐形眼镜类型 (ID3算法,C4.5算法,CART算法,GINI指数,剪枝,随机森林)

1. 1.问题的引入 2.一个实例 3.基本概念 4.ID3 5.C4.5 6.CART 7.随机森林 2. 我们应该设计什么的算法,使得计算机对贷款申请人员的申请信息自动进行分类,以决定能否贷款? 一个女孩的母亲要给这个女孩介绍男朋友,于是有了下面的对话: 女儿:多大年纪了? 母亲:26. 女儿:长的帅不帅? 母亲:挺帅的. 女儿:收入高不? 母亲:不算很高,中等情况. 女儿:是公务员不? 母亲:是,在税务局上班呢. 女儿:那好,我去见见. 决策过程: 这个女孩的决策过程就是典型的分类树决策.

银行家算法java实现

关于银行家算法的理论知识,课本或者百度上有好多资料,我就不再多说了,这里把我最近写的银行家算法的实现带码贴出来. 由于这是我们的一个实验,对系统资源数和进程数都指定了,所以这里也将其指定了,其中系统资源数为3,进程数为5. import java.util.Scanner; import javax.swing.plaf.basic.BasicInternalFrameTitlePane.MaximizeAction; import javax.swing.text.StyledEditorKi

无向图的最短路径算法JAVA实现(转)

一,问题描述 给出一个无向图,指定无向图中某个顶点作为源点.求出图中所有顶点到源点的最短路径. 无向图的最短路径其实是源点到该顶点的最少边的数目. 本文假设图的信息保存在文件中,通过读取文件来构造图.文件内容的格式参考这篇文章第一部分. 二,算法实现思路 无向图的最短路径实现相对于带权的有向图最短路径实现要简单得多. 源点的最短路径距离为0,从源点开始,采用广度优先的顺序,首先将与源点邻接的顶点的路径求出,然后再依次求解图中其他顶点的最短路径. 由于顶点的最短路径的求解顺序 是一个 广度优先的顺

排序算法Java实现

排序算法Java实现 排序算法的分类: 内部排序,在排序过程中,全部记录放在内存中,称为内部排序: 外部排序,在排序过程中需要使用外部存储(磁盘),则称为外部排序. 主要介绍内部排序: 插入排序:直接插入排序.二分法插入排序.希尔排序 选择排序:简单选择排序.堆排序 交换排序:冒泡排序.快速排序 归并排序 基数排序 插入排序 直接插入排序 基本思想:对于给定的一组记录,初始时假设第一个记录自成一个有序序列,其余记录为无序序列.接着从第二个记录开始,按照记录的大小依次将当前处理的记录插入到其之前的