人工智能天气决策树源代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
昆明理工大学信息工程与自动化学院学生实验报告
( 2011 — 2012 学年第 1 学期)
课程名称:人工智能开课实验室:信自楼计算机机房444 2011 年12月 16 日专业班级0 学号200 姓名成绩
实验名称天气决策树指导教师
教师评语该同学是否了解实验原理: A.了解□ B.基本了解□ C.不了解□该同学的实验能力: A.强□ B.中等□ C.差□该同学的实验是否达到要求: A.达到□ B.基本达到□ C.未达到□实验报告是否规范: A.规范□ B.基本规范□ C.不规范□实验过程是否详细记录: A.详细□ B.一般□ C.没有□
教师签名:
2011 年12 月日
一、上机目的及内容
1.上机内容
根据下列给定的14个数据,运用Information Gain构造一个天气决策树。
例子编号
属性
分类天况温度湿度风况
1 晴热大无N
2 晴热大有N
3 多云热大无P
4 雨中大无P
5 雨冷正常无P
6 雨冷正常有N
7 多云冷正常有P
8 晴中大无N
9 晴冷正常无P
10 雨中正常无P
11 晴中正常有P
12 多云中大有P
13 多云热正常无P
14 雨中大有N
2.上机目的
(1)学习用Information Gain构造决策树的方法;
(2)在给定的例子上,构造出正确的决策树;
(3)理解并掌握构造决策树的技术要点。
二、实验原理及基本技术路线图(方框原理图或程序流程图)
(1)设计并实现程序,构造出正确的决策树;
(2)对所设计的算法采用大O符号进行时间复杂性和空间复杂性分析;
主函数流程图:
Attributevalue.cpp流程图
Basefun流程图:
Datapiont.cpp流程图:
Dataset主要流程图:
三、所用仪器、材料(设备名称、型号、规格等或使用软件)
1台PC及VISUAL C++6.0软件
四、实验方法、步骤(或:程序代码或操作过程)
工程源代码:
Main.cpp:
#include
#include
#include
#include
#include
#include
#include "AttributeValue.h"
#include "DataPoint.h"
#include "DataSet.h"
DataPoint processLine(std::string const& sLine)
{
std::istringstream isLine(sLine, std::istringstream::in);
std::vector
// TODO: need to handle beginning and ending empty spaces.
while( isLine.good() )
{
std::string rawfield;
isLine >> rawfield;
attributes.push_back( AttributeValue( rawfield ) );
}
AttributeValue v = attributes.back();
attributes.pop_back();
bool type = v.GetType();
return DataPoint(attributes, type);
}
void main()
{
std::ifstream ifs("in.txt", std::ifstream::in);
DataSet initDataset;
while( ifs.good() )
{
// TODO: need to handle empty lines.
std::string sLine;
std::getline(ifs, sLine);
initDataset.addDataPoint( processLine(sLine) );
}
std::list
std::vector
processQ.push_back(initDataset);
while ( processQ.size() > 0 )
{
std::vector
DataSet dataset = processQ.front();
dataset.splitDataSet(splittedDataSets);
processQ.pop_front();
for (int i=0; i { float prob = splittedDataSets[i].getPositiveProb(); if (prob == 0.0 || prob == 1.0) { finishedDataSet.push_back(splittedDataSets[i]); } else { processQ.push_back(splittedDataSets[i]); }