ID3决策树预测的java实现

刚才写了ID3决策树的建立,这个是通过决策树来进行预测。这里主要用到的就是XML的遍历解析,比较简单。

关于xml的解析,参考了:

http://blog.csdn.net/soszou/article/details/8049220

http://lavasoft.blog.51cto.com/62575/71669/

思路:

先将要预测的数据,例如"sunny mild normal TRUE"根据特征表变成一个map,方便后续查找,结果为

outlook sunny

temperature windy

humidity normal

windy TRUE这样的map

接着就变量xml文件,从root的子节点开始,如果该节点不存在子节点,就说明是叶节点了,那么就直接输出text,就是其分类的类别。如果有子节点,就根据map中的value去找对应的节点,并将该节点作为下一次迭代的节点参数。

 1 import java.io.File;
 2 import java.io.IOException;
 3 import java.util.ArrayList;
 4 import java.util.HashMap;
 5 import java.util.List;
 6 import java.util.Map;
 7
 8 import org.dom4j.Document;
 9 import org.dom4j.DocumentException;
10 import org.dom4j.Element;
11 import org.dom4j.io.SAXReader;
12
13 public class Predict {
14
15     public static Map<String,String> getMap(String data,ArrayList<String> featureList){
16         Map<String,String> map=new HashMap();
17         String[] s=data.split(" ");
18         for(int i=0;i<s.length;i++){
19             map.put(featureList.get(i),s[i]);
20         }
21         return map;
22     }
23
24     public static int predict(Map<String,String> map,Element e){
25         List<Element> childList=e.elements();
26         if(childList.size()==0){
27             System.out.println( e.getText());
28             return 1;
29         }
30         String value=map.get(childList.get(0).getName());
31         for(Element next:childList){
32             String t=next.attributeValue("value");//这里的属性名都为value,所以这样就能获得该属性的值
33             if(t.compareTo(value)==0){
34                 predict(map,next);
35             }
36         }
37         return 1;
38     }
39
40
41     /**
42      * @param args
43      * @throws DocumentException
44      * @throws IOException
45      */
46     public static void main(String[] args) throws DocumentException, IOException {
47         // TODO Auto-generated method stub
48         String xml="C:/Users/Administrator/Desktop/upload/DT1.xml";
49         String file="C:/Users/Administrator/Desktop/upload/DT.txt";
50         String data="sunny mild normal TRUE";
51         ArrayList<String> featureList=Utils.loadFeature(file);
52         Map<String,String> map=getMap(data,featureList);
53
54         SAXReader saxReader=new SAXReader();
55         Document document =saxReader.read(new File(xml));
56         Element root=document.getRootElement();
57
58         predict(map,root);
59         System.out.println("finished");
60     }
61
62 }
时间: 2024-11-04 05:13:32

ID3决策树预测的java实现的相关文章

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

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

决策树ID3算法预测隐形眼睛类型--python实现

本节讲解如何预测患者需要佩戴的隐形眼镜类型. 1.使用决策树预测隐形眼镜类型的一般流程 (1)收集数据:提供的文本文件(数据来源于UCI数据库) (2)准备数据:解析tab键分隔的数据行 (3)分析数据:快速检查数据,确保正确地解析数据内容,使用createPlot()函数绘制最终的树形图 (4)训练算法:createTree()函数 (5)测试算法:编写测试函数验证决策树可以正确分类给定的数据实例 (6)使用算法:存储数的数据结构,以使下次使用时无需重新构造树 trees.py如下: #!/u

《机器学习实战》学习笔记:绘制树形图&amp;使用决策树预测隐形眼镜类型

上一节实现了决策树,但只是使用包含树结构信息的嵌套字典来实现,其表示形式较难理解,显然,绘制直观的二叉树图是十分必要的.Python没有提供自带的绘制树工具,需要自己编写函数,结合Matplotlib库创建自己的树形图.这一部分的代码多而复杂,涉及二维坐标运算:书里的代码虽然可用,但函数和各种变量非常多,感觉非常凌乱,同时大量使用递归,因此只能反复研究,反反复复用了一天多时间,才差不多搞懂,因此需要备注一下. 一.绘制属性图 这里使用Matplotlib的注解工具annotations实现决策树

ID3决策树

决策树是一个树形结构,类似下面这样: 上图除了根节点外,有三个叶子节点和一个非叶子节点. 在解决分类问题的决策树中,叶子节点就表示所有的分类,比如这里的分类就有3种:无聊时阅读的邮件.需及时处理的邮件.无需阅读的邮件. 使用决策树来分类某个样本数据,就是利用根节点选取的特征,将当前输入样本划分到根节点下的某个子节点上,然后再利用子节点表示的特征来将当前样本划分到该子节点下的某个子节点上,以此继续,直到到达某个叶子节点,那么这个叶子节点表示的类别就是当前决策树对该样本数据所属的类别的预测. 对于上

ID3决策树分析

1 简述 1.1    id3是一种基于决策树的分类算法,由J.Ross Quinlan在1986年开发.id3根据信息增益,运用自顶向下的贪心策略建立决策树.信息增益用于度量某个属性对样本集合分类的好坏程度.由于采用了信息增益,id3算法建立的决策树规模比较小,查询速度快.id3算法的改进是C4.5算法,C4.5算法可以处理连续数据,采用信息增益率,而不是信息增益.理解信息增益,需要先看一下信息熵. 1.2 信息熵    信息熵是随机变量的期望.度量信息的不确定程度.信息的熵越大,信息就越不容

决策树预测森林植被

1. 决策树和决策森林 决策树算法家族能自然地处理类别型和数值型特征 决策树算法容易并行化 它们对数据中的离群点(outlier)具有鲁棒性(robust),这意味着一些极端或可能错误的数据点根本不会对预测产生影响 2. Covtype数据集 https://archive.ics.uci.edu/ml/machine-learning-databases/covtype/ wget https://archive.ics.uci.edu/ml/machine-learning-database

ID3决策树---Java

1)熵与信息增益: 2)以下是实现代码: //import java.awt.color.ICC_ColorSpace; import java.io.*; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; //imp

数据挖掘-CART,C4.5,ID3,决策树

CART和C4.5决策树有什么区别? 1.C4.5算法是在ID3算法的基础上采用信息增益率的方法选择测试属性. ID3算法和C4.5算法虽然在对训练样本集的学习中可以尽可能多地挖掘信息,但其生成的决策树分支较大,规模较大.为了简化决策树的规模,提高生成决策树的效率,又出现了根据GINI系数来选择测试属性的决策树算法CART.2.CART算法采用一种二分递归分割的技术,与基于信息熵的算法不同,CART算法对每次样本集的划分计算GINI系数,GINI系数,GINI系数越小则划分越合理.CART算法总

数据挖掘-决策树

1.什么是决策树: 决策树是以树状结构表示数据分类的结果 ? 非叶子结点代表测试的条件. 分支代表测试的结果 2.如何构建决策树: ′1.信息熵(informationentropy):是度量样本集合纯度最常用的一种指标. ? 2.基尼系数(gini):是度量样本集合不确定性指标.(基尼指数与熵可近似看做是统一概念,都是越大,确定性越差) ? 基尼指数和信息熵的图像:(当熵和基尼指数为0.5时,即确定某件事的概率为50%,是最不能肯定的事件.如:小明后天再路上捡钱的概率为50%,很不确定.如果概