网站大量收购独家精品文档,联系QQ:2885784924

c++决策树代码(C++ decision tree code).doc

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c决策树代码(Cdecisiontreecode)

c++决策树代码(C++ decision tree code) #包含iostream #包括列表 #包括字符串 #包括字符串 #包括向量 #包括地图 #包括 sstream #包括iomanip #包括 cmath #包括文件 #算法包括 #包括设置 #队列包括 使用名称空间; 类的ID3 { 类节点 { 公共: 字符串值; 布尔isleaf; 映射字符串、节点映射; 公共: node():价值(“”),isleaf(假) { } }; 私人: 向量字符串属性; //向量 字符串 属性值向量; 向量矢量字符串数据; 国际decatt; 节点*根; 公共: id3() { / /从文件中加载数据 ifstream在(“数据.txt”); 如果(= NULL) { cout “无法打开文件!” endl; 返回; } 字符串行; getline(在线); 此时istring(线); 而(!istring eof())。 { istring STR; push_back(STR)的属性; } 而(!在eof())。 { getline(在线); 矢量vecstr 字符串; 此时istring(线); 而(!istring eof())。 { istring STR; vecstr push_back(STR); } 数据push_back(vecstr); } 在(); } 无效run() { (4)setdec; 向量子集; 为(int i = 0;i 数据。size();i++) { push_back(我)的子集; } 国际 candidateatt矢量; 为(int i = 0;i 属性。size();i++) { 如果(i)!= decatt) { candidateatt push_back(我); } } 节点树= builddt(子集,candidateatt); / /输出树结构 根=树; 向量字符串; printtreedepth(根、S); } 无效setdec(int n) { 如果(n<0 | | N>=属性。size()) { cout “指定决策树变量错误!” endl; 出口(0); } decatt = N; } 双getentropy(向量 in子集)/获得子集信息熵 { 双重熵= 0; 双p,n; p=n=0; 向量字符串; 为(int i = 0;i 子集。size();i++) { 如果(数据子集[我] [ ] [ decatt ] = =“是”) ++; 其他的 氮+; } / /判断属于同一类,熵为零的情况 如果(0 = = P | | 0 = = n) 返回0; 双pr=p(p+n); 熵= pr *(log(pr)/ log(2))- NR *(log(NR)/ log(2)); 返回熵; } bool时(矢量国际的子集) { 字符串值=数据子集[ 0 ] [ ] [ decatt ]; 为(int i = 1;i 子集。size();i++) { 如果数据集([ ] [ ] [我] decatt!=价值) { 返回false; } } 返回true; } 双增益(向量国际的子集,int index)/返回以指数为节点的信息增益 { / /统计正例个数和范例个数 双熵= getentropy(子集); 双和=0; / /求可能的所有属性值 映射字符串, 国际 mapsub矢量; 为(int i = 0;i 子集。size();i++) { mapsub [数据[子集[我] ] [索引] ]。push_back(子集[我]); } (图为字符串、向量国际 ::= mapsub begin()迭代器iter; ITER!= mapsub();+ + ITER)。 { 双T =(ITER -二。size() /(双)的子集。size())* getentropy(ITER -二); / / cout ITER -第一“:” endl TT; 求和; } 返回熵和; } / / suset指子集,价值:属性值属性:候选属性树:根节点指针的指针 结* builddt(向量国际 整数属性子集,向量) { 节点p =新node(); 如果(纯(子集)) { P isleaf =真; P 值=数据子集[ 0 ] [ ] [ decatt ]; / *如果(*树)!= null) { (*树) map [值] P; } 其他的 { (*树)= P; } /* 返回p; } 如果(ATTR。size() = = 0) { 整数,n; y=n=0; 为(int i = 0;i 子集。size();i++) { 如果(数据子集[我] [ ] [ decatt ] = =“

您可能关注的文档

文档评论(0)

f8r9t5c + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档