F#真棒 - 决策树 – 第二部分

 在我的前一篇文章中过了一遍ID3 算法后面的理论。现在我们在此基础上得到了那个痛苦的数学公式,让我们写一些代码吧!这里是一个用F#实现了的算法(同时在文章底部有附件下载)


entropyinformationGain这两个函数在上篇文章中已经提到过了,所以让我们来过一遍这个实际的决策树是怎样构建的。这里还有点小工作,即计算出最佳的决策树分割点,然后用F#你能非常美观地用代码表达它。


首先,它需要所有分裂的潜在属性...

attributesLeft 


...然后匹配这个属性名字到一个新的属性名字和一个信息元组...

|> List.map(fun attrName -> attrName, (informationGain data attrName))
...再从新生成的列表中取出那个最高信息增益的元组

 

|> List.maxBy(fun (attrName, infoGain) -> infoGain)
...最后返回该元组的第一个元素,即有最高信息增益的属性。
|> fst


当你能在内存里构成一个决策树时,怎样获取它呢?最简单的方法是在控制台输出它。

image

这里的代码非常的直接了当。注意"padding parameter"的使用,这使递归调用获得越来越多的缩进。在控制台打印出树类型数据结构时,这是一个非常有帮助的技术。


然而现在都快2010年了,因此对于代替飞行汽车而言,或许我们至少可以比控制台打印出数据做得更好。理想情况是我们可以生成出一些像这样的性感图像:


image


你可以用Microsoft Visio精心构造这决策树,但幸运地是已经有现成工具为你做这些工作了。AT&T研究已经生产出了一个很棒的工具叫GraphViz。虽然最终结果并不是完全没有瑕疵,但这已足够简单去进行下去了。


下面这个函数把决策树转换到一个GraphViz能够进行绘图的格式(复制打印出来的内容到该工具,然后用默认设置进行绘图)。


现在你有了F# ID3. 用很少一些数学和一些聪明的输出,你可以为你所有的机器学习需求构造决策树。在你以后的工作中,如你想挖掘客户的交易、分析服务器日志、或为你的杀手机器人编写程序去找到沙拉康纳(电影终结者里的女主角)。



<完全无耻的插入>如果你想学习更多F#,就去看下O'ReillyProgramming F#(F#学习资料汇总里有下载)</完全无耻的插入>

源代码下载:ID3.fsx

原文链接 :http://blogs.msdn.com/b/chrsmith/archive/2009/11/02/awesome-f-decision-trees-part-ii.aspx

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值