昆明理工大学天气决策树Word格式文档下载.docx
- 文档编号:3494702
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:18
- 大小:20.10KB
昆明理工大学天气决策树Word格式文档下载.docx
《昆明理工大学天气决策树Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《昆明理工大学天气决策树Word格式文档下载.docx(18页珍藏版)》请在冰点文库上搜索。
晴
热
大
无
N
2
有
3
多云
P
4
雨
中
5
冷
正常
6
7
8
9
10
11
12
13
14
2.上机目的
(1)学习用InformationGain构造决策树的方法;
(2)在给定的例子上,构造出正确的决策树;
(3)理解并掌握构造决策树的技术要点。
二、实验原理及基本技术路线图(方框原理图或程序流程图)
(1)设计并实现程序,构造出正确的决策树;
(2)对所设计的算法采用大O符号进行时间复杂性和空间复杂性分析;
实验考虑到几个属性:
天况——晴、雨、多云;
温度——热、中、冷;
湿度——大、正常;
风况——有、无;
然后根据每个属性来算出信息增益,接下来我们根据信息增益最大的来进行划分。
根据问题设计算法,建立数据结构,设计需要用的类,然后通过编程实现问题求解。
了解和求解最大信息增益和最小熵选择平均熵最小的属性作为根节点,用同样的方法选择其他节点直至形成整个决策树。
dataset就是具体的划分过程,首先找到可用的划分项目,再第一次划分之后再相关的数据来计算熵。
Main函数流程图Dataset函数主要流程图Basefun函数流程图
Attributevalue函数流程图
Datapiont函数流程图
三、所用仪器、材料(设备名称、型号、规格等或使用软件)
1台PC及VISUALC++软件
四、实验方法、步骤(或:
程序代码或操作过程)
源代码:
main函数:
#include<
fstream>
iostream>
list>
sstream>
string>
vector>
#include"
"
DataPointprocessLine(std:
:
stringconst&
sLine)
{
std:
istringstreamisLine(sLine,std:
istringstream:
in);
vector<
AttributeValue>
attributes;
while(())
{
std:
stringrawfield;
isLine>
>
rawfield;
(AttributeValue(rawfield));
}
AttributeValuev=();
();
booltype=();
returnDataPoint(attributes,type);
}
voidmain()
ifstreamifs("
std:
ifstream:
DataSetinitDataset;
std:
stringsLine;
getline(ifs,sLine);
(processLine(sLine));
list<
DataSet>
processQ;
finishedDataSet;
(initDataset);
while(()>
0)
splittedDataSets;
DataSetdataset=();
(splittedDataSets);
();
for(inti=0;
i<
();
++i)
{
floatprob=splittedDataSets[i].getPositiveProb();
if(prob==||prob==
{
(splittedDataSets[i]);
}
else
}
cout<
<
"
Thedicisiontreeis:
<
endl;
for(inti=0;
i<
finishedDataSet[i].display();
DataSet函数:
map>
voidSplitAttributeValue:
display()
\tSplitattributeID("
m_attributeIndex<
)\t"
;
Splitattributevalue("
()<
)"
voidDataSet:
addDataPoint(DataPointconst&
datapoint)
(datapoint);
floatDataSet:
getPositiveProb()
floatnPositive=0;
for(inti=0;
if(m_data[i].isPositive())
nPositive++;
returnnPositive/();
structStat
intnPos;
intnNeg;
intid;
};
splitDataSet(std:
&
splittedSets)
etNAttributes();
inti,j;
bool>
splittingAttributeBV;
(nAttributes);
for(i=0;
nAttributes;
splittingAttributeBV[i]=true;
splittingAttributeBV[m_splitAttributes[i].getAttributeIndex()]=false;
int>
splittingAttributeIds;
if(true==splittingAttributeBV[i])
(i);
typedefstd:
map<
AttributeValue,Stat,AttributeValueCmp>
AttributeValueStat;
iteratorAttributeValueStat_iterator;
const_iteratorAttributeValueStat_const_iterator;
etAttribute(splittingAttributeIds[j]);
AttributeValueStat_iteratorit=splittingStats[j].find(v);
if(splittingStats[j].end()==it)
Statstat;
if(m_data[i].isPositive())
{
=1;
=0;
}
else
splittingStats[j].insert(std:
pair<
AttributeValue,Stat>
(v,stat));
it->
++;
}
}
egin();
it!
=splittingStats[j].end();
++it)
std:
\t"
it->
()<
\t"
intnSamples=it->
+it->
floatp=it->
p/=nSamples;
entropy+=calEntropy(p)*nSamples/n;
if(entropy<
minEntropy||-1==splitAttributeId)
minEntropy=entropy;
splitAttributeId=j;
Splitatattribute("
splittingAttributeIds[splitAttributeId]<
endl<
=splittingStats[splitAttributeId].end();
it->
=k++;
(k);
k;
for(j=0;
j<
++j)
splittedSets[i].(m_splitAttributes[j]);
}
for(AttributeValueStat_iteratoritt=splittingStats[splitAttributeId].begin();
itt!
++itt)
splittedSets[itt->
].(SplitAttributeValue(itt->
first,attrId));
AttributeValueconst&
v=m_data[i].getAttribute(attrId);
AttributeValueStat_const_iteratorit=(v);
if(()!
=it)
splittedSets[it->
].addDataPoint(m_data[i]);
else
throwDataErrException();
}
inti;
Dataset("
this<
m_splitAttributes[i].display();
Data:
m_data[i].display();
DataPoint函数:
floatlog2(floatx)
return/log10
(2)*log10(x);
floatcalEntropy(floatprob)
floatsum=0;
if(prob==0||prob==1)
return0;
sum-=prob*log2(prob);
sum-=(1-prob)*log2(1-prob);
returnsum;
Basefun函数:
AttributeValue函数:
AttributeValue:
AttributeValue(std:
instring)
m_value(instring)
boolAttributeValue:
GetType()
if(m_value=="
P"
)
returntrue;
elseif(m_value=="
N"
returnfalse;
else
throwDataErrException();
AttributeValue头文件:
#ifndefATTRIBUTE_VALUE_H_
#defineATTRIBUTE_VALUE_H_
classAttributeValue
public:
AttributeValue(std:
instring);
boolGetType();
getValue()const
returnm_value;
private:
stringm_value;
structAttributeValueCmp
booloperator()(AttributeValueconst&
lhs,AttributeValueconst&
rhs)const
return()<
#endif
Base头文件:
classDataErrException:
publicstd:
exception
floatcalEntropy(floatprob);
DataPoint头文件:
#ifndefDATA_POINT_H_
#defineDATA_POINT_H_
classDataPoint
DataPoint(std:
const&
attributes,booltype);
boolisPositive()
returnm_type;
intgetNAttributes()
return();
AttributeValueconst&
getAttribute(intindex)
returnm_attributes[index];
voiddisplay();
m_attributes;
boolm_type;
DataSet头文件:
utility>
classSplitAttributeValue
SplitAttributeValue(AttributeValuev,intid)
:
m_v(v)
m_attributeIndex(id)
intgetAttributeIndex()
returnm_attributeIndex;
intm_attributeIndex;
AttributeValuem_v;
classDataSet
voidaddDataPoint(DataPointconst&
datapoint);
floatgetPositiveProb();
voidsplitDataSet(std:
splittedSets);
SplitAttributeValue>
m_splitAttributes;
DataPoint>
m_data;
五、实验过程原始记录(测试数据、图表、计算等)
六、实验结果、分析和结论(误差分析与数据处理、成果总结等。
其中,绘制曲线图时必须用计算纸或程序运行结果、改进、收获)
Attributevalue的作用是判断正反例,以便下面的的划分决策过程,basefun的作用则是计算熵,通过熵的比。
dataset就是具体的划分过程,首先找到可用的划分项目,再第一次划分之后再手机相关的数据来计算熵。
通过该实验,我了解了如何采用InformationGain构建天气决策树,以及了解什么是熵,如何计算熵等等。
同时也意识到自己基础知识的欠缺,今后的学习中会更加注重基础知识的掌握和巩固,争取熟练运用所学的知识。
注:
教师必须按照上述各项内容严格要求,认真批改和评定学生成绩。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 昆明 理工大学 天气 决策树