📄 c45.java
字号:
/** * @(#)C45.java 1.5.0 09/01/18 */package ml.classifier.dt;import ml.dataset.DataSet;import ml.dataset.UCIDataSet;import ml.util.TreeView;import ml.util.Stopwatch;import ml.util.HtmlTreeView;import ml.util.PlainTreeView;/** * The main class of Fast C4.5. * * @author Ping He * @author Xiaohua Xu */public class C45 { /** * The c45 decision tree */ private DecisionTree tree; /** * Build a decision tree with the specified data set files. * @param dataSetName the base name of the .names, .data and .test files */ public C45(String dataSetName){ DataSet dataSet = new UCIDataSet(dataSetName); this.tree = new DecisionTree(dataSet); } /** * Get the decision tree. */ public DecisionTree getDecisionTree(){ return this.tree; } /** * Build a decision tree with the specified .names and .data files, prune it and print it in * the specified manner. */ public static void main(String[] args) { C45 c45 = null; String dataSetName; String output = "plain"; int repeat = 0; TreeView view = null; String buildTime = ""; // Illegal input if (args.length == 0) { usage(); return; } // Ask for help if (args.length == 1) { if (args[0].equalsIgnoreCase("-h") || args[0].equalsIgnoreCase("-help")){ usage(); return; } } dataSetName = args[0]; // Interpret the options for (int i = 1; i < args.length-1; i += 2) { if (args[i].equals("-output") || args[i].equals("-o")) { output = args[i+1]; continue; } if (args[i].equals("-repeat") || args[i].equals("-r")) { repeat = Integer.parseInt(args[i+1]); continue; } } Stopwatch.start(); for(int i = 0; i < Math.max(1, repeat); i ++) { c45 = new C45(dataSetName); } Stopwatch.stop(); // Compute the averaged tree building time if (repeat > 0) { buildTime = "build time : " + Stopwatch.runtime()/repeat + "ms"; } DecisionTree tree = c45.getDecisionTree(); if (!output.equals("plain") && !output.equals("html")) { System.out.println("Waring:Unsupported Output!"); output = "plain"; } if(output.equals("plain")) { view = plainView(tree, buildTime); } if(output.equals("html")) { view = htmlView(tree, buildTime); } System.out.println(view); } private static TreeView plainView(DecisionTree tree, String buildTime){ TreeView v1 = new PlainTreeView(tree); v1.insert("Tree Before Pruning"); v1.append("tree size : " + tree.size()); v1.append("train error : " + tree.getTrainError()); v1.append(buildTime+TreeView.CR); tree.prune(); TreeView v2 = new PlainTreeView(tree); v2.insert("Tree After Pruning"); v2.append("tree size : " + tree.size()); v2.append("train error : " + tree.getTrainError()); return v1.union(v2); } private static TreeView htmlView(DecisionTree tree, String buildTime) { TreeView v1 = new HtmlTreeView(tree); v1.insert("<h2>Tree Before Pruning</h2>"); v1.append("<p>tree size : "+tree.size()+"<br>"); v1.append("train error : "+tree.getTrainError()+"<br>"); v1.append(buildTime+"</p>").append(TreeView.CR); tree.prune(); TreeView v2 = new HtmlTreeView(tree); v2.insert("<h2>Tree After Pruning</h2>"); v2.append("<p>tree size : "+tree.size()+"<br>"); v2.append("train error : "+tree.getTrainError()+"</p>"); return v1.union(v2); } private static void usage(String... messages) { System.out.println("Usage: java " + C45.class + " dataSetName [-output plain | html -repeat times]"); for (String line : messages) { System.out.println(line); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -