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类):借助于上面决策树建立类,决策树节点之间连接已经建立完成。以下将以上第二部分的样本数据作为測试数据,而且实现递归打印方法,输出决策树详细内容。
ID3算法Java实现的更多相关文章
- 决策树ID3算法的java实现(基本试用所有的ID3)
已知:流感训练数据集,预定义两个类别: 求:用ID3算法建立流感的属性描述决策树 流感训练数据集 No. 头痛 肌肉痛 体温 患流感 1 是(1) 是(1) 正常(0) 否(0) 2 是(1) 是(1 ...
- 决策树ID3算法的java实现
决策树的分类过程和人的决策过程比较相似,就是先挑“权重”最大的那个考虑,然后再往下细分.比如你去看医生,症状是流鼻涕,咳嗽等,那么医生就会根据你的流鼻涕这个权重最大的症状先认为你是感冒,接着再根据你咳 ...
- ID3算法(Java实现)
数据存储文件:buycomputer.properties #数据个数 datanum=14 #属性及属性值 nodeAndAttribute=年龄:青/中/老,收入:高/中/低,学生:是/否,信誉: ...
- 决策树ID3算法的java实现(基本适用所有的ID3)
已知:流感训练数据集,预定义两个类别: 求:用ID3算法建立流感的属性描述决策树 流感训练数据集 No. 头痛 肌肉痛 体温 患流感 1 是(1) 是(1) 正常(0) 否(0) 2 是(1) 是(1 ...
- 机器学习笔记----- ID3算法的python实战
本文申明:本文原创,如有转载请申明.数据代码来自实验数据都是来自[美]Peter Harrington 写的<Machine Learning in Action>这本书,侵删. Hell ...
- 归纳决策树ID3(Java实现)
先上问题吧,我们统计了14天的气象数据(指标包括outlook,temperature,humidity,windy),并已知这些天气是否打球(play).如果给出新一天的气象指标数据:sunny,c ...
- ID3算法(决策树)
一,预备知识: 信息量: 单个类别的信息熵: 条件信息量: 单个类别的条件熵: 信息增益: 信息熵: 条件熵:(表示分类的类,表示属性V的取值,m为属性V的取值个数,n为分类的个数) 二.算法流程: ...
- 归并排序算法 java 实现
归并排序算法 java 实现 可视化对比十多种排序算法(C#版) [直观学习排序算法] 视觉直观感受若干常用排序算法 算法概念 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Di ...
- 快速排序算法 java 实现
快速排序算法 java 实现 快速排序算法Java实现 白话经典算法系列之六 快速排序 快速搞定 各种排序算法的分析及java实现 算法概念 快速排序是C.R.A.Hoare于1962年提出的一种划分 ...
随机推荐
- hihoCoder 1467 2-SAT·hihoCoder音乐节(2-SAT模版)
#1467 : 2-SAT·hihoCoder音乐节 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 hihoCoder音乐节由hihoCoder赞助商大力主办,邀请了众 ...
- [luoguP2657] [SCOI2009]windy数(数位DP)
传送门 f[i][j]表示位数为i,第i位为j的windy数的个数 先预处理出f数组. 求的时候先算没有前导0的答案,再算位数和给定的数相同的答案. #include <cmath> #i ...
- BZOJ3295 [Cqoi2011]动态逆序对 【CDQ分治】
题目 对于序列A,它的逆序对数定义为满足i 输入格式 输入第一行包含两个整数n和m,即初始元素的个数和删除的元素个数.以下n行每行包含一个1到n之间的正整数,即初始排列.以下m行每行一个正整数,依次为 ...
- 蔬菜(vegetable)
蔬菜(vegetable) 题目描述 题目背景:您使用脚本刷出了上题游戏 998244353 关的最高分 (最优解),心满意足的准备点继续学习,忽然一条弹窗弹了出来:你想明白活着的意义吗?你想真正的. ...
- Xposed初体验
Xposed初体验 1 测试环境 硬件:小米2s 16GB 电信版 系统:MIUI 4.4.18(开发版) Xposed版本: 2.5 注:Xposed版本号必须大于2.3,MIUI系统版本号也必须大 ...
- MySQL服务器端&客户端常见错误
目录(?)[+] 客户端 服务器端 客户端 1.ERROR 2013 (HY000) at line 1: Lost connection to MySQL server during query 使 ...
- MVC3 中使用 Ajax.ActionLink Ajax.BeginForm
原文发布时间为:2011-05-01 -- 来源于本人的百度文章 [由搬家工具导入] http://msdn.microsoft.com/en-us/library/dd381533%28VS.98% ...
- usb 2.0 支援的速度
from http://www.usb.org/developers/docs/usb20_docs/ high speed : 480 Mb/s full speed : 12 Mb/s low s ...
- Bioconda安装与使用
1. Bioconda是一个自动化管理生物信息软件的工具,就像APPstore.360软件管家一样. Bioconda的优点是安装简单,各个软件依赖的环境一同打包且相互隔离,非常适合在服务器中建立自 ...
- hexo安装问题解决方法
常见错误 { [Error: Cannot find module './build/Release/DTraceProviderBindings'] code: 'MODULE_NOT_FOUND' ...