决策树算法同样也是我们在机器学习中常用的算法之一,决策树算法是一种常用的分类算法,利用已有数据进行预测,例如我们要预测某位用户在你的应用商店中会下载那一个应用,在我们知道用户的一部分数据的情况下,我们可以根据其他用户的下载习惯,应用决策树的方法来预测用户的下载可能
在刚才的例子中决策树的具体做法是这样的,首先假设我们知道用户的类似性别,工作,爱好…之类的信息,决策树的做法是寻找其他在应用商店中拥有类似的信息的客户的下载偏好,然后将其推荐到这个用户的界面,决策树的大致做法就是这样,具体的我们向下看
这就是上面的例子,左面是我们已经知道的数据,我们根据已经知道的数据画出决策树,然后根据决策树,如果需要进行预测的用户的职业是学生,我们会推荐他Pokemon GO,如果正在工作那么我们判断是男性或者女性,男性我们会推荐Snapchat,女性我们会推荐WhatsAPP,那么我们的任务就是找出如何让机器测量出这两个特征,并且让机器知道,让机器先用职业分类,然后用性别分类
上面我们说明了多分类的情况,下面我们再举一个决策树应用于二分类的情况下的情况,我们依然使用上一篇中的的学校录取的情况
(其中蓝色的是已经录取,红色未录取)在我们在应用决策树预测某学生是否会被录取时,我们可以通过辨别测试分数是否大于?–若小于5平时分是否大于7?–若大于5平时分是否大于2?
通过这样的流程我们可以大致预测某位需要我们预测的同学是否会被录取,然而暂时我们建立的这个决策树只有两层,在分析复杂的实际问题的深度会很高,但是基本原理大同小异
在开始建立决策树之前,我们首先要对决策树分类的属性进行评分,比如最一开始的app下载预测,我们先对职业建立,然后对性别进行建立,使得得到了较好的效果,但是我们是如何决定哪个优先进行分类的呢?在上面的例子中如果们优先对性别分类然后再对职业分类,最终得到的效果可能就相对的差强人意,在这里要引入的是信息熵
熵值本来是热力学里面的术语,熵在信息论被引用为衡量信息的复杂度,还是应用上面app下载的例子,我们计算未使用算法分类时的熵值,这里信息的复杂程度是怎么计算的呢?
我们先浏览这个数据表,总共有六项,其中下载了Pokemon GO的有三个用户,下载了WhatsAPP的有两名用户,下载了Snapchat的有一名用户那么我们的计算共公式为
P(Pokemon GO) 3 6 \frac{3}{6} 63 × \times ×P(WhatsAPP) 2 6 \frac{2}{6} 62P(Snapchat) × \times × 1 6 \frac{1}{6} 61 ≈ \thickapprox ≈ 0.00077160493
简单点说就是在这个整体中的每一个概率相乘就是当前熵值,如果只有一种数据就是1,如果数据很混乱数值就会很小
但是这样的计算方法有个很大的弊端,这仅仅是六条数据,数值就已经很小了,如果是几万条数据那就会是一个无比小的数字,然而大致方法就是这样,但是我们要改变我们的计算方法,新的计算方法有这几个要求,首先原理必须相同,结果能衡量信息的混乱程度,结果数字不能太小或者过大,如果可以最好能用加法来代替乘法
可能你已经想到了,对数可以很好的帮我们解决上述问题,因为我们知道
log(a × \times ×b) = log(a) + log(b)
由于我们基于信息理论,我们这里默认以2为底取对数
我们再看回头看我们需要解决的问
- 结果不大
- 原理相同
- 是加法运算
我们来验证一下,如果使用对数来计算熵值的情况(默认以2为底)
3 6 \frac{3}{6} 63log( 3 6 \frac{3}{6} 6<