决策树算是比较常见的数据挖掘算法了,最近也想写点算法的东西,就先写个决策树吧。html
决策树是什么,咱们来“决策树”这个词进行分词,那么就会是决策/树。你们不妨思考一下,重点是决策仍是树呢?其实啊,决策树的关键点在树上。java
咱们平时写代码的那一串一串的If Else其实就是决策树的思想了。看下面的图是否是以为很熟悉呢?算法
固然决策树算法比这复杂那么一丢丢,因此在说决策树以前,咱们须要先了解一些基本知识,先来讲说信息论中的信息熵。编程
决策树之因此叫决策树,就是由于它的结构是树形状的,若是你以前没了解过树这种数据结构,那么你至少要知道如下几个名词是什么意思。数据结构
学过树这种数据结构的同窗可能一看就明白了,没有学过也不要紧,咱们能够用上面的图来讲明各部分分别是什么。并发
要说决策树,那信息熵是绕不过去的一座山~函数式编程
假设你要知道一件未知的事情,好比明天会不会下雨。这时候你就须要去获取一些信息,好比空气干湿度,今天是万里无云仍是多云等等(假设没有天气预报)。这些信息中,有的可让你能更加准确判断明天会不会下雨(好比今天有没有云),而有信息些则不会(好比今天晚餐吃什么)。如何度量这些信息对你决策的帮助呢?这里要使用到的就是信息熵了,信息熵正是对信息量有效性的一种度量方法。
函数
若是你还记得高中化学的知识的话,那对熵这个字应该不会陌生。熵在化学中是表示分子的混乱程度,分子越混乱,它的熵就越大,而若分子越有序,熵值就越小。oop
信息熵也是同样的,它能对信息的不肯定性进行恒量,若是某个信息让咱们的判断更加有序,清晰,则它信息熵越小,反之越大。大数据
仍是接上面的例子,如今你知道了空气的湿度,那么你就能更准确得判断明天是否会下雨。你获得的信息让你的结论更加清晰,准确,因此它的熵值就比较小,由于它让信息更加准确。而对今天晚餐吃什么这个信息,显然它对你判断明天会不会下雨是没什么帮助的,因此它的信息熵是比较大的,由于这个信息和明天有没有下雨没有关系,它并无让咱们的判断更加清晰,甚至让咱们的判断趋于混乱。
计算信息熵的公式以下:
其中U指的是某一信息,pi则是指信息中各类可能出现的结果的几率。
好比U为空气湿度,空气湿度一共有3中(干燥,微湿,湿润),则能够p1表示空气干燥的几率,p2表示空气微湿的几率,p3表示空气湿润的几率,这些几率都是能够经过样本统计出来的。
而后空气湿度的信息熵就能够计算出来了:
H(空气湿度) = p1 * log(p1) + p2 * log(p2) + p3 * log(p3)
咱们能够举吴军老师的「数学之美」中的一个例子来解释这条式子。 假设2018年,有32支球队参加世界杯,每只球队最终得到冠军的几率同样。在世界杯以后,你去问别人世界杯冠军是哪一个国家的?那我的不直接跟你说,让你猜!而且每猜一次,你须要支付1块钱,这时你怎么才能花最少的钱呢? 学过算法的咱们天然知道能够用二分法,把32支球队分红两半,猜对猜错以后天然知道球队在哪一半,再二分再猜,这样最终你须要猜5次,也就是须要支付5块钱,没错吧。这样一来,这条信息的价值就是5块钱,而在计算机中,则用***bit***表示。假如一共有64支球队,那咱们就须要多猜一次,这条信息的价格就变成了6。从这里咱们就能够看出信息的度量跟log有关,log32=5,log64=6嘛。 如今咱们来运用上面的公司,咱们让p1,p2,p3...p32表示每支球队获胜的几率,运用公式,则
H(获胜) = p1*logp1 + p2*logp2 + ... + p32*log32
这样最终算出的结果正是等于5,就是说哪一个国家获胜这条信息的信息熵是5。
信息熵最先是用在通讯领域的,而决策树的诞生是缘于澳大利亚计算机科学家昆兰,在一次研究生课程大做业中,引入了信息增益准则来改进程序。然后在1979年发表这一相关论文后,决策树算法正式问世,并掀起一股决策树算法的研究热潮。
那么它被用在哪里呢?
咱们知道决策树由许多属性和分支组成,那么如何决定哪一个属性在前,哪一个在后呢。这里就须要用到信息熵了。
前面咱们提到过信息熵是对信息不肯定性的度量,既然信息能够度量,那每次咱们只要找到信息熵的值最小,也就是让决策更加清晰的那个属性来做为根进行分支,那不就好了吗?什么,你说分支后怎么办,对树处理的基本方法就是递归,分支后,每一分支节点均可以看成一棵新的树,而后再来重复上面的步骤啦。
今天先介绍决策树的一些基础知识,后面咱们会经过一个实际的例子以及代码来看看决策树的运行原理。
推荐阅读:
Scala 函数式编程指南(一) 函数式思想介绍
Actor并发编程模型浅析
大数据存储的进化史 --从 RAID 到 Hadoop Hdfs
C,java,Python,这些名字背后的江湖!