资源简介
决策树生成算法的Java实现,可能还有一些BUG,没有做仔细校验与测试,完成主要功能。决策树具体详解移步:http://blog.csdn.net/adiaixin123456/article/details/50573849
项目的目录结构分为四个文件夹algorithm,common,data,test
(1)algorithm为算法,包括DecisionTree(决策树生成算法)、IAttrSelector(最佳分裂点属性选择算法接口)、BaseAttrSelector(基础的属性选择算法实现)
(2)common为公用类,只包含了表示多叉树的类TreeNode
(3)data为数据,包含了BaseRecord(基础记录,这里只有一个属性,就是要分类的属性Boolean的,其他数据库实体都应该继承该类)
HummanAttrRecord(描述用户的属性类,包括收入、年龄、是否为学生、信用评级)、
EmAgeLevel(年龄枚举类)、EmCreditRate(信用枚举类)、EmIncome(收入枚举类)。
(4)test为测试类
代码片段和文件信息
package com.adi.datamining.algorithm;
import com.adi.datamining.data.baseRecord;
import java.lang.reflect.Field;
import java.util.*;
/**
* Created by wudi10 on 2016/1/23.
*/
public class baseAttrSelector implements IAttrSelector{
/**通过记录集合与记录的属性集合,挑选出属性中增益度最大的属性*/
@Override
public Field select(ListseRecord> records Set atrrs){
Field bestField = null;
Double highestScore = 0D;
Double setInfo = entropy(records);
for(Field field : atrrs) {
Double gainScore = setInfo - infoScore( records field);
if(gainScore > highestScore) {
highestScore = gainScore;
bestField = field;
}
}
return bestField;
}
/**根据记录列表求关于所求类的熵,此方法中要分的类是DcisionAtrr*/
private Double entropy(ListseRecord> records) {
Double positCount = 0D;
Double negatCount = 0D;
for(baseRecord record : records) {
if(record.getDecisionAttr())
++positCount;
else
++negatCount;
}
return - positCount/records.size()* log2N(positCount / records.size())
- negatCount/records.size()* log2N(negatCount / records.size());
}
/**log2(N) log 以2为底N的对数*/
private Double log2N(Double d) {
return Math.log(d) / Math.log(2.0);
}
/**求某个属性对于分类DecisionAttr的期望分数,公式见<数据挖掘概念与技术>中决策树那节*/
private Double infoScore(ListseRecord> records Field field) {
Double infoScore = 0D;
try {
//1.求该属性每个值对于分类的正负样例个数,即有多少是true,多少个false;
MapjectList> count4Values = new HashMapjectList>();//key:存放该属性不同值value:长度为2,存放该属性值对分类正负样例数
Integer size = records.size();
field.setAccessible(true);
for(baseRecord record : records) {
object attrValue = field.get(record);
List countList = count4Values.get(attrValue);
if(countList == null) {
countList = new ArrayList(2);
countList.add(00);
countList.add(10);
}
if(record.getDecisionAttr()){
countList.set(0countList.get(0) + 1);
} else {
countList.set(1countList.get(1) + 1);
}
count4Values.put(attrValue countList);
}
//2.遍历map算出期望值
for(object key : count4Values.keySet()) {
List countList = count4Values.get(key);
double positCount = countList.get(0);
double negatCount = countList.get(1);
if(positCount == 0 || negatCount == 0) //对于正负样例个数为0的情况,视为无效,对分类影响最大,分数为0;
continue;
double valueCount = positCount + negatCount;
infoScore +=
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-01-24 18:05 DecisionTree\
目录 0 2016-01-24 18:05 DecisionTree\src\
目录 0 2016-01-24 18:04 DecisionTree\src\com\
目录 0 2016-01-24 18:04 DecisionTree\src\com\adi\
目录 0 2016-01-24 18:04 DecisionTree\src\com\adi\datamining\
目录 0 2016-01-24 18:04 DecisionTree\src\com\adi\datamining\algorithm\
文件 3509 2016-01-24 00:06 DecisionTree\src\com\adi\datamining\algorithm\ba
文件 3476 2016-01-24 15:29 DecisionTree\src\com\adi\datamining\algorithm\DecisionTree.java
文件 320 2016-01-24 17:47 DecisionTree\src\com\adi\datamining\algorithm\IAttrSelector.java
目录 0 2016-01-24 18:04 DecisionTree\src\com\adi\datamining\common\
文件 1148 2016-01-24 17:48 DecisionTree\src\com\adi\datamining\common\TreeNode.java
目录 0 2016-01-24 18:04 DecisionTree\src\com\adi\datamining\data\
文件 442 2016-01-23 17:16 DecisionTree\src\com\adi\datamining\data\ba
文件 405 2016-01-23 15:46 DecisionTree\src\com\adi\datamining\data\EmAgeLevel.java
文件 380 2016-01-23 15:46 DecisionTree\src\com\adi\datamining\data\EmCreditRate.java
文件 395 2016-01-23 15:46 DecisionTree\src\com\adi\datamining\data\EmIncome.java
文件 1218 2016-01-24 16:27 DecisionTree\src\com\adi\datamining\data\HumanAttrRecord.java
目录 0 2016-01-24 18:04 DecisionTree\src\test\
文件 4240 2016-01-24 17:36 DecisionTree\src\test\Test.java
相关资源
- Java程序设计清华大学出版社-习题参考
- mysql-connector-java-5.1.46.jar
- java版QQ聊天室源代码
- Java加密与解密的艺术.rar 完整源代码
- RSA与AES混合加密算法的实现java版
- Java web 大作业
- 电子文档查重系统
- Java EE互联网轻量级框架整合开发 SS
- java简单版飞鸽传书
- java 路由分组转发仿真
- TF*IDFjava实现
- java源码分水岭算法
- java实现的sift全部代码
- java实现的R树
- JAVAEE图书管理系统
- java 简单购物车
- JAVA学生教师信息录入小系统
- servlet jar包
- hibernate.jar
- java 复数的类Complex
-
Java+sql数据库+fr
ame图形化界面 - 会议室预定系统java
- java画出一个八边形
- JAVA在服务器端和客户端传输图片和文
- myaql5.0.8驱动程序jar包:mysql-connector
- 超市收银系统 JAVA
- java实现基于websocket的聊天室
- Java反序列化生成Payload附利用脚本
- 达梦数据库jar包包含达梦67
- GsonFormat
评论
共有 条评论