`
holoblog
  • 浏览: 1225990 次
博客专栏
E0fcf0b7-6756-3051-9a54-90b4324c9940
SQL Server 20...
浏览量:18917
文章分类
社区版块
存档分类
最新评论

AI 决策树ID3 代码(c++)

 
阅读更多

源代码工程文件(vs2005)http://d.download.csdn.net/down/1018461/cctt_1

过去在网上找了段代码,发现写的代码要改些地方,而且也想顺便练习下自己的c++编码。

首先我要建立一个真正的树形结构。于是使用了自己过去的GeneralTree.h(当然这里还是改动些GeneralTree的代码例如增添了些函数,另外把有些私有函数变成了公有函数)。

训练文本格式如下:并命名为decision2.txt 并发在自己的工程目录下。当然你也可以改改相关源代码

概念 颜色 形状 轻重
苹果 红 球 一般
苹果 绿 球 一般
香蕉 黄 弯月 一般
草莓 红 球 轻
草莓 绿 球 轻
西瓜 绿 椭球 重
西瓜 绿 球 重
桔子 桔黄 椭球 轻

测试格式文本格式如下:命名为test.txt并放在工程目录下(试试改改源代码)

颜色 形状 轻重
红 球 一般
绿 球 一般
黄 弯月 一般

这里应该考虑各个类分开的。不过为了看起来方便,就合在一起了。

下面是具体代码:

这里的main函数这样写(自己使用的VS2005):

自己感觉DT 的注释比较详细,所以在我的blog中就不再做太多的解释。另外这段代码会将测试结果放在工程目录下的testResult.txt中。

另外在控制台上会有生成决策树ID3的相关相关的信息显示,例如:

红概率为:0.25
黄概率为:0.125
桔黄概率为:0.125
绿概率为:0.5
颜色的G为:1
球概率为:0.625
椭球概率为:0.25
弯月概率为:0.125
形状的G为:1.20121
轻概率为:0.375
一般概率为:0.375
重概率为:0.25
轻重的G为:0.688722
choose attribute:轻重
go into the branch:一般
红概率为:0.125
黄概率为:0.125
绿概率为:0.125
颜色的G为:0
球概率为:0.25
弯月概率为:0.125
形状的G为:0
..choose attribute:颜色
..go into the branch:红
....decision type:苹果
..go into the branch:绿
....decision type:苹果
..go into the branch:黄
....decision type:香蕉
..go into the branch:桔黄
....decision type:
go into the branch:轻
红概率为:0.125
桔黄概率为:0.125
绿概率为:0.125
颜色的G为:0
球概率为:0.25
椭球概率为:0.125
形状的G为:0
..choose attribute:颜色
..go into the branch:红
....decision type:草莓
..go into the branch:绿
....decision type:草莓
..go into the branch:黄
....decision type:
..go into the branch:桔黄
....decision type:桔子
go into the branch:重
..decision type:西瓜

这一段信息是什么意思呢?

红概率为:0.25
黄概率为:0.125
桔黄概率为:0.125
绿概率为:0.5
颜色的G为:1

红,黄,桔黄,绿的概率是颜色的具体属性。这里没有把entropy打印出来。如果此段代码被中科院的师弟师妹有幸看到,

你们可以在AttribDifferComputer()函数中添加几行代码就可以把每一个entropy打印出来。反正老师也会让你们看代码,这里就当作作业题吧。(另外老师第十章机器学习ppt上的决策树的这个例子计算结果有错误。如果你认真计算过的话)颜色G的含义是颜色G的决策值,决策值越小,选择此属性的概率就越大。


那决策树是什么样子的呢?

choose attribute:轻重
go into the branch:一般

..choose attribute:颜色
..go into the branch:红

......................

看看上面的这些.这里代表根节点是“轻重”,然后进入“一般”分支,然后进入“一般”分支的节点为颜色..然后进入”红“分支.这里一定要注意”..“,相等的"..”代表树的相同的层次。


做出这个Decision Tree 的ID3代码主要是为了学弟学妹们在考试中测试用的。因为我只是测试了老师ppt中的例子,不保证对于所有的例子都正确。而且老师出的考试题比较变态(属性十个左右)..如果手工计算应该需要一个小时左右的时间。

当初后悔没有先编一个程序。祝各位考试顺利..(我想我这段代码可能会在考试之前被搜到)。


同时提醒大家一点, ID3也不是什么很好的算法。当两个属性的G值一致时,如果它并不能给出一个更好的判断标准。而且如果采用顺序选择很有可能生成一个非最小决策树。这点还值得研究一下。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics