欢迎来到天天文库
浏览记录
ID:12936235
大小:21.01 KB
页数:21页
时间:2018-07-19
《c 决策树代码(c decision tree code)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、c++决策树代码(C++decisiontreecode)#包含iostream><#包括<列表>#包括<字符串>#包括<字符串>#包括<<向量>#包括<<地图>>#包括<#包括iomanip><#包括<#包括<文件#算法包括<>#包括<设置>#队列包括<>使用名称空间;类的ID3{类节点{公共:字符串值;布尔isleaf;映射<字符串、节点>映射;公共:node():价值(“”),isleaf(假){}};私人:向量<字符串>属性;//向量<<字符串>>属性值向量;向量<矢量>字符串>数据;国际decatt;节点*根;公共:id3(){//从文件中加载
2、数据ifstream在(“数据.txt”);如果(=NULL){cout<<“无法打开文件!”<>STR;push_back(STR)的属性;}而(!在eof())。{getline(在线);矢量vecstr<字符串>;此时istring(线);而(!istringeof())。{istring>>STR;vecstrpush_back(STR);}数据push_back(vecstr);}在();}无效run(){(4)setdec;向量<子集>;为(i
3、nti=0;i<数据。size();i++){push_back(我)的子集;}<国际>candidateatt矢量;为(inti=0;i<属性。size();i++){如果(i)!=decatt){candidateattpush_back(我);}}节点树=builddt(子集,candidateatt);//输出树结构根=树;向量<字符串>;printtreedepth(根、S);}无效setdec(intn){如果(n<0
4、
5、N>=属性。size()){cout<<“指定决策树变量错误!”<子集)
6、/获得子集信息熵{双重熵=0;双p,n;p=n=0;向量<字符串>;为(inti=0;i<子集。size();i++){如果(数据子集[我][][decatt]==“是”)++;其他的氮+;}//判断属于同一类,熵为零的情况如果(0==P
7、
8、0==n)返回0;双pr=p(p+n);熵=-公关*(log(PR)/日志(2))-天然橡胶*(log(NR)/日志(2));返回熵;}bool时(矢量<国际>的子集){字符串值=数据子集[0][][decatt];为(inti=1;i<子集。size();i++){如果数据集([][][我]decatt!=价值){返回false;}}返回true
9、;}双增益(向量<国际>的子集,intindex)/返回以指数为节点的信息增益{//统计正例个数和范例个数双熵=getentropy(子集);双和=0;//求可能的所有属性值映射<字符串,<国际>>mapsub矢量;为(inti=0;i<子集。size();i++){mapsub[数据[子集[我]][索引]]。push_back(子集[我]);}(图为<字符串、向量<国际>>::=mapsubbegin()迭代器iter;ITER!=mapsub();++ITER)。{双T=(ITER->二。size()/(双)的子集。size())*getentropy(ITER->二);//cou
10、t<第一<<“:”<<整数>属性子集,向量){节点p=新node();如果(纯(子集)){P>isleaf=真;P>值=数据子集[0][][decatt];/*如果(*树)!=null){(*树)>map[值]P;}其他的{(*树)=P;}/*返回p;}如果(ATTR。size()==0){整数,n;y=n=0;为(inti=0;i<子集。size();i++){如果(数据子集[我][][decatt]==“是”){++;}其他的氮+
11、;}如果(y=n){P>isleaf=真;值=“是”;}其他的{P>isleaf=真;值>“否”;}返回p;}//选择一个最优的属性int=0;双DMAX=0;国际bestindex=0;为(inti=0;i<属性。size();i++){双DD=增益(子集,ATTR[我]);如果(DD>DMAX){DMAX=DD;最好的=属性[我];bestindex=我;}}//获得这个属性的所有属性值和其所对应的子集图<字符串、向量<国际>>mapatt
此文档下载收益归作者所有