资源简介
决策树生成算法的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源码,servlet+jsp),适
- java串口通信全套完整代码-导入eclip
- jsonarray所必需的6个jar包.rar
- 三角网构TIN生成算法,Java语言实现
- java代码编写将excel数据导入到mysql数据
- Java写的cmm词法分析器源代码及javacc学
- JAVA JSP公司财务管理系统 源代码 论文
- JSP+MYSQL旅行社管理信息系统
- 推荐算法的JAVA实现
- 基于Java的酒店管理系统源码(毕业设
- java-图片识别 图片比较
- android毕业设计
- java23种设计模式+23个实例demo
- java Socket发送/接受报文
- JAVA828436
- java界面美化 提供多套皮肤直接使用
- 在线聊天系统(java代码)
- 基于Java的图书管理系统807185
- java中实现将页面数据导入Excel中
- java 企业销售管理系统
- java做的聊天系统(包括正规课程设计
- Java编写的qq聊天室
- 商店商品管理系统 JAVA写的 有界面
- JAVA开发聊天室程序
- 在linux系统下用java执行系统命令实例
- java期末考试试题两套(答案) 选择(
- JAVA3D编程示例(建模、交互)
- Java 文件加密传输
- java做的房产管理系统
- 基于jsp的bbs论坛 非常详细
评论
共有 条评论