Java实现的决策树算法完整实例实现的决策树算法完整实例
主要介绍了Java实现的决策树算法,简单描述了决策树的概念、原理,并结合完整实例形式分析了java实现决策树
算法的相关操作技巧,代码中备有较为详尽的注释便于理解,需要的朋友可以参考下
本文实例讲述了Java实现的决策树算法。分享给大家供大家参考,具体如下:
决策树算法是一种逼近离散函数值的方法。它是一种典型的分类方法,首先对数据进行处理,利用归纳算法生成可读的规则和
决策树,然后使用决策对新数据进行分析。本质上决策树是通过一系列规则对数据进行分类的过程。
决策树构造可以分两步进行。第一步,决策树的生成:由训练样本集生成决策树的过程。一般情况下,训练样本数据集是根据
实际需要有历史的、有一定综合程度的,用于数据分析处理的数据集。第二步,决策树的剪枝:决策树的剪枝是对上一阶段生
成的决策树进行检验、校正和修下的过程,主要是用新的样本数据集(称为测试数据集)中的数据校验决策树生成过程中产生
的初步规则,将那些影响预衡准确性的分枝剪除。
java实现代码如下:
package demo;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class DicisionTree {
public static void main(String[] args) throws Exception {
System.out.print("我们测试结果:");
String[] attrNames = new String[] { "AGE", "INCOME", "STUDENT",
"CREDIT_RATING" };
// 读取样本集
Map<Object, List<Sample>> samples = readSamples(attrNames);
// 生成决策树
Object decisionTree = generateDecisionTree(samples, attrNames);
// 输出决策树
outputDecisionTree(decisionTree, 0, null);
}
/**
* 读取已分类的样本集,返回Map:分类 -> 属于该分类的样本的列表
*/
static Map<Object, List<Sample>> readSamples(String[] attrNames) {
// 样本属性及其所属分类(数组中的最后一个元素为样本所属分类)
Object[][] rawData = new Object[][] {
{ "<30 ", "High ", "No ", "Fair ", "0" },
{ "<30 ", "High ", "No ", "Excellent", "0" },
{ "30-40", "High ", "No ", "Fair ", "1" },
{ ">40 ", "Medium", "No ", "Fair ", "1" },
{ ">40 ", "Low ", "Yes", "Fair ", "1" },
{ ">40 ", "Low ", "Yes", "Excellent", "0" },
{ "30-40", "Low ", "Yes", "Excellent", "1" },
{ "<30 ", "Medium", "No ", "Fair ", "0" },
{ "<30 ", "Low ", "Yes", "Fair ", "1" },
{ ">40 ", "Medium", "Yes", "Fair ", "1" },
{ "<30 ", "Medium", "Yes", "Excellent", "1" },
{ "30-40", "Medium", "No ", "Excellent", "1" },
{ "30-40", "High ", "Yes", "Fair ", "1" },
{ ">40 ", "Medium", "No ", "Excellent", "0" } };
// 读取样本属性及其所属分类,构造表示样本的Sample对象,并按分类划分样本集
Map<Object, List<Sample>> ret = new HashMap<Object, List<Sample>>();
for (Object[] row : rawData) {
Sample sample = new Sample();
int i = 0;
for (int n = row.length - 1; i < n; i++)
sample.setAttribute(attrNames[i], row[i]);
sample.setCategory(row[i]);
List<Sample> samples = ret.get(row[i]);
if (samples == null) {
samples = new LinkedList<Sample>();
ret.put(row[i], samples);
}
samples.add(sample);
}
return ret;
}
/**
* 构造决策树
*/
static Object generateDecisionTree(
评论0