资源简介
使用Java实现的ID3决策树,内含数据文件及ID3类的源代码。实现了决策树分类,结果存储为XML文件,以及基于模型进行的分类预测。
代码片段和文件信息
package ID3;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.Character.Subset;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.linkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.xmlWriter;
import org.w3c.dom.NodeList;
public class ID3 {
/**
* 同时保留训练集和测试集的数据在模型中,防止训练集和测试集的列顺序不同
*/
private ArrayList trainAttribute = new ArrayList(); // 存储训练集属性的名称
private ArrayList> train_attributeValue = new ArrayList>(); // 存储训练集每个属性的取值
private ArrayList predictAttribute = new ArrayList(); // 存储测试集属性的名称
private ArrayList> predict_attributeValue = new ArrayList>(); // 存储测试集每个属性的取值
private ArrayList train_data = new ArrayList(); // 训练集数据 ,即arff文件中的data字符串
private ArrayList predict_data = new ArrayList(); // 测试集数据
private String[] preLable;
int decatt; // 决策变量在属性集中的索引(即类标所在列)
public static final String patternString = “@attribute(.*)[{](.*?)[}]“;
//正则表达,其中*? 表示重复任意次,但尽可能少重复,防止匹配到更后面的“}“符号
Document xmldoc;
Element root;
public ID3() {
//创建并初始化xml文件,以用于储存决策树结构
xmldoc = DocumentHelper.createDocument();
root = xmldoc.addElement(“root“);
root.addElement(“DecisionTree“).addAttribute(“value“ “null“);
}
/**
* 模型训练函数
* @param class_name 类标变量
* @param data_pathname 训练集
* @return xml决策树文件
*/
public Document train(String class_nameString data_pathname){
read_trainARFF(new File(data_pathname));
setDec(class_name);
linkedList ll=new linkedList(); //linkList用于增删比ArrayList有优势
for(int i=0;i if(i!=decatt) ll.add(i); //防止类别变量不在最后一列发生错误
}
ArrayList al=new ArrayList();
for(int i=0;i al.add(i);
}
buildDT(“DecisionTree“ “null“ al ll);
return xmldoc;
}
/**
* 预测/分类函数(利用保留在类里的xml决策时模型进行预测)
* @param data_pathname 测试集
* @return 预测结果集
*/
public String[] predict(String data_pathname){
read_predictARFF(new File(data_pathname));
preLable=new String[predict_data.size()];
ArrayList subset=new ArrayList();
for(int i=0;i subset.add(i);
}
Element root=xmldoc.getRootElement();
Element DecisionTree=root.element(“DecisionTree“);
giveLable(DecisionTree subset);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 533 2017-09-20 15:03 ID3_Decision_Tree\.classpath
文件 393 2017-09-20 15:12 ID3_Decision_Tree\.project
文件 598 2017-09-18 17:38 ID3_Decision_Tree\.settings\org.eclipse.jdt.core.prefs
文件 313898 2017-09-18 18:35 ID3_Decision_Tree\bin\dom4j-1.6.1.jar
文件 10960 2017-09-20 15:12 ID3_Decision_Tree\bin\ID3\ID3.class
文件 398 2017-09-20 11:35 ID3_Decision_Tree\bin\ID3\ID3_Tree.xm
文件 1186 2017-09-20 15:12 ID3_Decision_Tree\bin\ID3\Main.class
文件 530 2017-09-20 10:41 ID3_Decision_Tree\bin\ID3\predict.arff
文件 606 2017-09-18 18:27 ID3_Decision_Tree\bin\ID3\train.arff
文件 226915 2017-09-19 11:50 ID3_Decision_Tree\bin\jaxen-1.1.1.jar
文件 313898 2017-09-18 18:35 ID3_Decision_Tree\external jars\dom4j-1.6.1.jar
文件 226915 2017-09-19 11:50 ID3_Decision_Tree\external jars\jaxen-1.1.1.jar
文件 398 2017-09-20 11:35 ID3_Decision_Tree\files\ID3\ID3_Tree.xm
文件 530 2017-09-20 10:41 ID3_Decision_Tree\files\ID3\predict.arff
文件 606 2017-09-18 18:27 ID3_Decision_Tree\files\ID3\train.arff
文件 12820 2017-09-20 15:07 ID3_Decision_Tree\src\ID3\ID3.java
文件 349 2017-09-20 15:04 ID3_Decision_Tree\src\ID3\Main.java
目录 0 2017-09-20 15:12 ID3_Decision_Tree\bin\ID3
目录 0 2017-09-20 11:03 ID3_Decision_Tree\files\ID3
目录 0 2017-09-19 14:26 ID3_Decision_Tree\src\ID3
目录 0 2017-09-18 17:38 ID3_Decision_Tree\.settings
目录 0 2017-09-20 15:12 ID3_Decision_Tree\bin
目录 0 2017-09-18 18:35 ID3_Decision_Tree\external jars
目录 0 2017-09-19 11:42 ID3_Decision_Tree\files
目录 0 2017-09-20 15:04 ID3_Decision_Tree\src
目录 0 2017-09-20 15:03 ID3_Decision_Tree
----------- --------- ---------- ----- ----
1111533 26
- 上一篇:C4.5决策树Java实现
- 下一篇:jsp+mysql实现图书管理系统
评论
共有 条评论