没有合适的资源?快使用搜索试试~ 我知道了~
人工智能实验 ID3决策树(java实现)
5星 · 超过95%的资源 需积分: 23 43 下载量 22 浏览量
2017-11-12
11:28:29
上传
评论 3
收藏 242KB DOC 举报
温馨提示
已知:UCI标准数据集Car-Evaluation,定义了汽车性价比的4 个类别; 求:用ID3算法建立Car-Evaluation的属性描述决策树 Car-Evaluation训练数据集文件: 1. car_databases.pdf 2. car_evalution-databases.pdf
资源推荐
资源详情
资源评论
实验课程名称: __ 人工智能 _
实验项目名称 决策树 ID3 算法
实验成绩
实 验 者 专业班级 学 号
实验日期
2017.11.05
一、实验内容
已知:UCI 标准数据集 Car-Evaluation,定义了汽车性价比的 4 个类别;
求:用 ID3 算法建立 Car-Evaluation 的属性描述决策树
Car-Evaluation 训练数据集文件:
1. car_databases.pdf
2. car_evalution-databases.pdf
二、实验设计(原理分析及流程)
1.基于 ID3 算法的决策树构建
决策树是一种树状结构,其中每个节点代表数据集的一个属性分支,树梢节
点则代表样本的类分布。
ID3 算法则是通过计算样本在不同属性分支下的条件熵,寻找使样本信息
熵损失最小的属性分支实现样本的决策分类的。条件熵的计算公式:
其中,X 代表样本,Y 代表属性,上式计算的是在不同属性条件下样本的分
布情况。最优的属性是使得样本分布最集中的,因此其相应的条件熵也应最小。
2.算法伪代码:
算法 Decision_Tree(data,AttributeName)
输入训练样本集 car_evaluation-databases
输出一棵决策树
1 候选属性集合列表 attribute_list;
2 Ifattribute_list 为空 then
以 samples中最普遍的类标记,并 exit
3 选择 attribute_list中具有最小条件熵的属性 test_attribute
4 将 test_attribute 标记为节点 N
5 for each test_attribute 的已知值 v
6 由节点 N 分出一个对应 test_attribute = v 的分支
7 令 S
v
为 samples 中 test_attribute = v 的样本集合
8 If S
v
的条件熵为 0,
then 加上一个叶节点,以该集合中最普遍的类标记
else 从 attribute_list 删去 test_attribute,并加入一
个由 Decision_Tree(S
v
, attribute_list)返回的节点值
流程图如下:
三、实验代码及数据记录
1.代码
//File.java
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URL;
import java.util.Vector;
public class File {
@SuppressWarnings({ "unchecked", "unused" })
public Vector<Object>[] ReadDataFromFile(String filename) throws Exception {
Vector<Object>[]data = null;
InputStream inputstream = new FileInputStream(filename);
if(inputstream == null){
System.out.println("inputstream is null!\n");
}
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
String rowdata = bufferedreader.readLine();
rowdata = bufferedreader.readLine();//跳过属性行
if (rowdata!=null) {
data=new Vector[rowdata.split(",").length];
for (int i = 0; i < data.length; i++) {
data[i]=new Vector<Object>();
}
}
while ((rowdata=bufferedreader.readLine()) != null) {
String []s=rowdata.split(",");
for (int i = 0; i < data.length; i++) {
data[i].add(s[i]);
}
}
inputstreamreader.close();
bufferedreader.close();
return data;
}
/**
* 获取属性
*/
@SuppressWarnings("unused")
public Vector<Object> GetAttributeFromFile(String filename) throws IOException {
Vector<Object> data=new Vector<Object>();
InputStream inputstream = new FileInputStream(filename);
if(inputstream == null){
System.out.println("inputstream is null!\n");
}
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
String rowdata = bufferedreader.readLine();
if (!rowdata.equals("")) {
String []t=rowdata.split(",");//读了两行
for (String st : t) {
data.add(st);
}
}
inputstreamreader.close();
bufferedreader.close();
return data;
}
}
//Gain.java
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Vector;
public class Gain {
/**
剩余21页未读,继续阅读
资源评论
- Shawn-Yang2018-01-29挺好的,可以使用
- Ellen_1379543532018-11-19还行可以运行,但是数据有点问题
普通网友
- 粉丝: 3
- 资源: 25
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功