这个图就非常鲜明了,这些同学每天呆在宿舍里,去不去上课首先判断这节课会不会点名,如果不会点名的话就不去了,非常的现实,如果点名了的话,他们就判断这个寝室到教室的距离,如果寝室到教室的距离在三分钟以下,那么就走着去。如果在需要多过三分钟,就跑着去,如果十分钟还到不了啊,就干脆不去了。这也是他们这个脑海中每天进行的一次分类,他们对于每天关于上不上课的信息主要考虑两个属性,一个是是否点名,一个是能否及时赶到,然后分类的结果,就有三种,一种是不去,一种是跑着去,一种是走着去。南开大一个老师啊,为了惩罚这些学生,在考卷前面加了这么一道选择题。
我们还是回到这个决策树算法上来。我们下面来讲讲怎么样才能得到这样一颗决策树呢?就跟我们学习时,需要例题一样,我们需要给电脑一组数据去训练它,大家应该发现了,这个决策树算法对训练数据有一定的要求,这些数据都应该有一些共同的属性并且每一个数据都有一个明确的分类。
例如我们有这样一组数据,可以看到这组数据都有这些属性,年龄,收入,学生,信用等级,且都有一个分类,会买电脑,和不会买电脑。这些属性里面有些是数值的,比如年龄,有些是有几种等级,比如收入和信用等级,还有些是判断性质的,比如是否是学生。类别这里是两种,其实可以有很多种不同的分类。在这样一组数据的基础上,我们就能生成一棵决策树。生成决策树有什么好处呢?假如你问老师:“老师你什么时候心情比较好?”我说:“我在以下1000种情况下,心情比较好。第一种,天气晴朗,我头脑清晰,在咖啡厅喝咖啡......第二种......哎哎,我还没说完,你别走......"估计没听几条你就走人了,如果老师这样回答:”我只要身体健康,且睡眠充足的时候,就心情比较好。“明显后者比较有智能对不对。
我们生成决策树,一方面对数据进行了整理和归纳,也就是说在数据中学习到了有用的规则,另一方面,我们能够通过决策树来对没有见过的数据进行分类。
比如这个买电脑这组数据,年龄这个属性有三种情况,收入也有三种情况,学生两种,信用两种,总共啊,有3*3*2*2=36种情况,但我们只有14个数据,所以我们要通过这14个数据来得到一个对这36种情况的一个是否会买电脑的判断。
决策树举例
在充分了了解了这个决策树的重要性以后啊,我们来讲讲怎么从数据中生成一个决策树。生成决策树有很多种方法,我们介绍一种最典型的,叫做ID3的算法。这个算法早在1975年就被提出来了。为了更加通俗的解释这个算法,我们再举一个例子。
这里我们借鉴了一个非常流行的例子。Cs这个游戏大家应该都听说过吧,这是我们读中学的时候非常流行一个游戏,现在有这个穿越火线等都是属于这种系列的,我们统称为第一人称射击游戏。假设你在玩这个Cs的时候,有一个非常难缠的对手,我们管他叫小明吧,你和他玩了四局游戏以后,感觉他很厉害,所以想从他的游戏数据里面来分析他的这个战术行为来学习学习。我们看看有些什么游戏数据。
决策树举例
武器 | 子弹数量 | 血 | 行为
——————————————
机枪 | 多 | 少 | 战斗
机枪 | 少 | 多 | 逃跑
手枪 | 少 | 多 | 战斗
手枪 | 少 | 少 | 逃跑
这是这个小明啊,他在玩CS 的时候,什么时候打,什么时候跑的例子。这个数据中包含了3种考虑的因素,分别是武器种类,子弹数量,和血量。分类有两种行为,一种叫战斗,一种叫逃跑。总共有四条数据。我们先看这三个属性,武器种类,玩过的大家都知道,对于我们这个作战能力的影响非常的大,能不能迅速的解决敌人,主要就看你手上的武器,明显这个机枪肯定比手枪要强。
然后
是这个子弹数量,这也是一个关键因素,子弹充足的时候打起来肯定比较有信心,你枪再强,没子弹也只能先逃跑找个地方躲起来。最后这个血量也是很好理解的,没血了冲上去就是送人头对不对。
理解好这三个属性我们就要看看如果说我们通过ID3这个算法来分析这组数据,能够得到一个什么样的结果呢?首先我们先介绍一下信息熵这个概念。
信息熵:是关于这组信息的有序度,也可以说是确定性的一个衡量值,我们通常用它来描述某个属性值的数据对于分类的重要性,如果这组数据越有序,那么它的熵就越低,反之就越高。
这个有序就是有用,可以说这个属性对于做出分类是否给出了确定性的信息。比如说,你问一个人晚上出不去散步,他说月亮圆他出去,月亮不圆他也出去,那他给出的这两条信息啊,其实就是无序的,也就是非常不确定的。这个时候月亮圆和不圆的熵都很高,如果他说月亮圆他就出去,月亮不圆他就不出去,这两句话就非常明确了,这个时候熵就很低。注意到我们说熵的时候可以是指的属性值,比如说月亮圆的熵很高,也可以是指的属性,比如说月亮这个属性的熵很高,这些都是可以计算出来的。我们觉得这组数据给出的信息非常的明确,比如,我们看到CS游戏那组数据中其实子弹的多少就是一个信息很明确的一组数据,当子弹多的时候这个玩家小明很明确的会去打一打试试看,实在打不过再跑嘛。这个时候我们说子弹多,这个属性值的熵很低,它为0,就是明确得不能再明确了。这个是怎么算出来的呢?它是由下面这个公式计算出来的。