昆明理工大学天气决策树(共16页)

上传人:des****85 文档编号:220514975 上传时间:2021-12-09 格式:DOC 页数:16 大小:319.50KB
返回 下载 相关 举报
昆明理工大学天气决策树(共16页)_第1页
第1页 / 共16页
昆明理工大学天气决策树(共16页)_第2页
第2页 / 共16页
昆明理工大学天气决策树(共16页)_第3页
第3页 / 共16页
昆明理工大学天气决策树(共16页)_第4页
第4页 / 共16页
昆明理工大学天气决策树(共16页)_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《昆明理工大学天气决策树(共16页)》由会员分享,可在线阅读,更多相关《昆明理工大学天气决策树(共16页)(16页珍藏版)》请在金锄头文库上搜索。

1、精选优质文档-倾情为你奉上昆明理工大学信息工程与自动化学院学生实验报告( 学年 第1学期 )课程名称:人工智能 开课实验室:信自楼504 年12月 24日年级、专业、班学号姓名成绩实验项目名称天气决策树指导教师 吴霖教师评语该同学是否了解实验原理:A.了解B.基本了解C.不了解该同学的实验能力:A.强 B.中等 C.差 该同学的实验是否达到要求:A.达到B.基本达到C.未达到实验报告是否规范:A.规范B.基本规范C.不规范实验过程是否详细记录:A.详细B.一般 C.没有 教师签名: 年 月 日一、上机目的及内容1.上机内容根据下列给定的14个数据,运用Information Gain构造一个天

2、气决策树。例子编号属 性分类天况温度湿度风况1晴热大无N2晴热大有N3多云热大无P4雨中大无P5雨冷正常无P6雨冷正常有N7多云冷正常有P8晴中大无N9晴冷正常无P10雨中正常无P11晴中正常有P12多云中大有P13多云热正常无P14雨中大有N2.上机目的(1)学习用Information Gain构造决策树的方法;(2)在给定的例子上,构造出正确的决策树;(3)理解并掌握构造决策树的技术要点。二、实验原理及基本技术路线图(方框原理图或程序流程图)(1)设计并实现程序,构造出正确的决策树;(2)对所设计的算法采用大O符号进行时间复杂性和空间复杂性分析;实验考虑到几个属性:天况晴、雨、多云; 温

3、度热、中、冷; 湿度大、正常; 风况有、无;然后根据每个属性来算出信息增益,接下来我们根据信息增益最大的来进行划分。根据问题设计算法,建立数据结构,设计需要用的类,然后通过编程实现问题求解。了解和求解最大信息增益和最小熵选择平均熵最小的属性作为根节点,用同样的方法选择其他节点直至形成整个决策树。dataset就是具体的划分过程,首先找到可用的划分项目,再第一次划分之后再相关的数据来计算熵。 Main函数流程图 Dataset函数主要流程图 Basefun函数流程图Attributevalue函数流程图Datapiont函数流程图三、所用仪器、材料(设备名称、型号、规格等或使用软件)1台PC及V

4、ISUAL C+软件四、实验方法、步骤(或:程序代码或操作过程)源代码:main函数:#include #include #include #include #include #include #include #include #include DataPoint processLine(std:string const& sLine)std:istringstream isLine(sLine, std:istringstream:in);std:vector attributes;while( () )std:string rawfield;isLine rawfield;( Attri

5、buteValue( rawfield ) );AttributeValue v = ();();bool type = ();return DataPoint(attributes, type);void main()std:ifstream ifs(, std:ifstream:in);DataSet initDataset;while( () )std:string sLine;std:getline(ifs, sLine);( processLine(sLine) );std:list processQ;std:vector finishedDataSet;(initDataset);

6、while ( () 0 )std:vector splittedDataSets;DataSet dataset = ();(splittedDataSets);();for (int i=0; i(); +i)float prob = splittedDataSetsi.getPositiveProb();if (prob = | prob = (splittedDataSetsi);else(splittedDataSetsi);std:cout The dicision tree is: std:endl;for (int i = 0; i (); +i)finishedDataSet

7、i.display();DataSet函数:#include #include #include #include void SplitAttributeValue:display()std:cout tSplit attribute ID( m_attributeIndex )t;std:cout Split attribute value( () ) std:endl;void DataSet:addDataPoint(DataPoint const& datapoint)(datapoint);float DataSet:getPositiveProb()float nPositive

8、= 0;for(int i=0; i(); +i)if ( m_datai.isPositive() )nPositive+;return nPositive / ();struct Statint nPos;int nNeg;int id;void DataSet:splitDataSet(std:vector& splittedSets)etNAttributes();int i, j;std:vector splittingAttributeBV;(nAttributes);for (i=0; inAttributes; +i)splittingAttributeBVi = true;f

9、or (i=0; i(); +i)splittingAttributeBV m_splitAttributesi.getAttributeIndex() = false;std:vector splittingAttributeIds;for (i=0; inAttributes; +i)if (true = splittingAttributeBVi)(i);typedef std:map AttributeValueStat;typedef std:map:iterator AttributeValueStat_iterator;typedef std:map:const_iterator

10、 AttributeValueStat_const_iterator;etAttribute(splittingAttributeIdsj);AttributeValueStat_iterator it = splittingStatsj.find(v);if ( splittingStatsj.end() = it )Stat stat;if ( m_datai.isPositive() ) = 1; = 0; = 0;else = 0; = 1; = 0;splittingStatsj.insert(std:pair(v, stat);elseif ( m_datai.isPositive() )it-+;elseit-+;egin();it != splittingStatsj.end(); +it)std:cout t () t t + it-;float p = it-;p /= nSamples;entropy += calEntropy(p) * nSamples / n;if (entropy minEntropy | -1 = sp

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号