F#真棒 - 决策树 - 第一部分

Programming F#这本书已经发行了! 这意味着你可以,也应该去商店并买上一本.

既然已经有Programming F# 这么出色的F#语言编程指导书了,那么对于语言特性而言,我更愿意写更多关于程序方面的东西. 这就是说,让我们看看,能用这么棒的F#语言做些什么.

这是名为”F#真棒”系列博客中的第一篇.这些博客为我们展示了先进的,贴近实际的F# 应用程序能做的不可思议的事情.这篇博客是关于决策树和ID3算法的,这些问题最初在StackOverflow.com上讨论的很激烈。

如果你想学习更多关于数据挖掘技术和机器智能学习知识,Tom Mitchell编写的Machine Learning 将是本很好的书籍。但是,提醒一下大家,这是我读过的内容最严谨且知识密度很大的书。真的,不是开玩笑的!

图片00

定义这个问题

那么,ID3算法是做什么的呢?它是用来创建决策树一项技术,就如同下图中用来决定是不是去打网球一样。从最上面的节点开始,如果天气是阴天,那么你就应该去打球。然而,如果是雨天,那么只有当风很小的时候你才应该去打球。

图片00

除了帮助策划你的体育活动,决策树也是用来收集商业情报一种简单地方法。假设,你经营着一家位于宾夕法尼亚州的斯克兰顿的造纸公司。你有一个收集了众多客户的IP地址的数据库,包括谁访问了你的网站, 谁需求的产品中有一些特殊交易,那个谁是否已经取消了购买纸品。

这种情况下,你就需要数据挖掘技术来抽取有用的数据了。 那么,这种情形下,如何优化你的销售额呢?

基于你拥有数据的类型与你查找的内容,有很多不同的数据挖掘技术算法。这篇博客将覆盖决策树——一种根据数据来预测其概念的机器学习技术。(例如,根据一个浏览器会话预测此用户是否会买些什么。)

更形象点:给定一个以”name/value”作为键值对的实例集合——判断值链在哪里断开——创建一个决策树来精确地识别任何一个新加的实例。在上面的例子中,这些name/value键值对就是Outlook:{Sunny,Rainy,Overcast},类别就是”是否去打网球”。

 

方法

这里最简单的方法就是尽可能多的创建树的分枝。根据练习的数据,先找到最合适的分枝,然后根据更多特定的特征子集条件继续筛减数据集。例如,如果试图根据某人将从网站上购买产品来判断他是否是一位老顾客,那么这将是一件很有价值的信息。

为了找到”黄金分割”我们将使用被称为”信息增益”的方法。 但是首先,让我们看看信息理论中的一个名为””的概念。假设你想创建一个决策树来判断某人是不是一个邪恶天才。每个论据包含了一些如性别、是否拥有博士学位等信息。

 图片00

熵和信息增益是衡量你从给定的分枝中获取信息多少的度量单位。如果正好50%的邪恶天才都是男性,那么你没能从性别分枝中获取任何有用的信息。(因为树的左右两边的邪恶天才数量是一样的。)然而,为了判定邪恶天才,教育情况将显得非常重要——因为我们假设大部分邪恶天才在很多方面拥有博士学位。那么,这个决策树将会尤为有效,在削减筛选这些数据到同类别的组:是否为邪恶天才。

 

输入数学公式

信息增益和熵只是些简单的概念,而数学就有点恐怖了。让我们使用下面的数据来继续完成这个邪恶天才预测器:

图片00

给定一个数据集S,此S可以被c整除得到商p,那么这个集合的熵就可以由一下公式求得:

图片00

例如,如果一个数据集合中的六个邪恶天才中有四个是男性,那么此集合的熵是多少呢?

图片00

或者0.9182。现在,如果一个集合中五个拥有博士学位的人中有四个士邪恶天才,那么此时的熵是多少呢?

图片00

或者0.6883。这个较小的数字意味着加密拥有博士学位邪恶天才的文件需要更少的信息。当一个集合中的所有东西都有相同类型并都是1,且当此集合是以50/50作为分割的,如果运行这个熵的数学公式,其结果将会是0。看看下面的这个图:

图片00 

(图象来自Wolfram Alpha)(请看此链接上的图片)

所以,同类别组成的集合的熵会低于混合类别的集合。这点是很重要的,因为在我们的决策树中,我们想筛选数据到更具体的一些值——如此,我们才能做出更精确地预测。

 

信息增益

现在我们已经知道如何计算同类别的数据了,那么我们如何才能决定哪个分枝才是最优的呢? 也就是我们是否根据性别,是否有博士学位,一些其它的属性等来分枝?我们可以用信息增益函数来计算这个,如下:

图片00

给定一个值集合S,在此集合中每个已知数都有一个标签(属性)A,判断能从这些已知的标签中获取多少的信息。注意Sv是集合S的子集,且此子集中的每个元素有一个属性值v。

那么,如果将根节点设置为“是否有博士学位”,那么我们能获得什么样的信息呢,还是没有任何信息呢?

图片00

图片00

或者0.2002。如果我们计算性别分枝上的信息增益,那么它的结果将是——(-0.0513)。所以,数学上已经证明了我们的断言:是否拥有博士学位比性别因素在判断是否为邪恶天才上更有价值。(如此表明,4/5的博士是邪恶天才,然而2/25的非博士是邪恶天才,看起来还是蛮合理的)

综上所述

在第二部分,我们将用F#实现ID3 算法,且它将贯穿下面的每个流程:

  1. 找到能给给我们带来最多信息的属性(标签)
  1. 为此属性(标签)加上一个分枝
  1. 对每个子节点重复使用上面步骤直到所有的数据拥有相同的分类

原文链接:http://blogs.msdn.com/b/chrsmith/archive/2009/10/31/awesome-f-decision-trees-part-i.aspx

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值