10.决策树!99.99%的地球人都使用过的人工智能算法!
本文由中山大学In+ Lab整理完成,转载注明出处
团队介绍 传送门
决策树!99.99%的地球人都使用过的人工智能算法!
前言
本文假设读者已经了解基本的数据挖掘概念,如 “训练“,”回归”,“分类”,“过拟合”等。
0 简介
决策树算法的思想,来自于人日常做决策过程。
举个例子,当你喜欢上班上的女神时,已经使用了决策树算法:你对班里的每一位同学依次进行考察,看他们的特征是否符合你的标准,以此来对班里的所有同学进行了分类。如果进入到你的意识中,你是按照下面的步骤考虑你喜不喜欢某个同学X的:
- X是女生吗? 是 → 继续判断, 不是 → 不喜欢 (假设读者性取向为女)
- X脾气好不好? 是 → 继续判断, 不是 → 不喜欢
- X长得好不好看? 是 → 继续判断, 不是 → 不喜欢
- X有没有男朋友? 是 → 转到5, 不是 → 转到6
- 我怂不怂? 怂 → 不喜欢, 不怂 → 转到 6
- 喜欢X
我们把以上过程可视化一下
显然,这就是一个树状的决策过程,并且它是有效的,它帮助你选择到了你喜欢的对象。
以上都是你在无意识的情况下做的决定,是长久的生物进化所赋予人类的天赋。我们人能够通过经验,在大脑中构建这棵树,并且用这棵树来对身边的人进行分类。
这样的方法通常是有效的,但是当遇到的样本量过大,或者需要的经验很多的情况下,人的作用往往就很难发挥了。设想一下,给你一千万个同学,让你挑一个你最喜欢的同学或者让你研读史书总结所有人的择偶观,最终来决定自己的择偶对象。
所以我们今天要弄清楚的,是如何让计算机通过决策树做到这两件事。
-
总结前人经验
-
做出决策
1 算法流程
我们以金融领域的征信问题为例,来讲述决策树的原理。
银行在给客户进行贷款时,需要考虑用户是否可信,来决定是否放贷。传统做法是派人对用户的各项指标进行考察,最终决定是否进行放贷。但是由于刚刚提到的效果和效率问题,传统做法存在着一定的弊端,决策树在解决这一问题上就能起到很好的作用。
我们从上文的决策树需要做的两件事进行考虑:
1.1 决策树如何总结“前人的经验”?(Train)
“前人的经验”往往由训练集给出,在征信问题中,为了简化问题,突出算法本质,将训练数据设置如下:
假设目前收集到了6个用户的信息,并且这6个用户已经被前人审核过,给出了是否贷款的建议(最后一列)。我们需要通过决策树来挖掘这个数据里的信息,并且总结出规律,以便后续的预测。
从另一个角度来讲,就是要根据这些数据,进行建树。
要建一棵树,只需要解决两个问题
- 如何分支?
- 如何构建子节点?
第一个问题,分支。其实反映的是考虑特征的顺序,从人的决策过程来看,必然是先考虑重要的特征,有区分度的特征。决策树采用信息增益来衡量一个特征是否重要。而信息增益又是通过信息熵来定义的。
物理学上的熵衡量的是物质的混乱程度,从字面意思上理解,信息熵其实衡量的就是信息的混乱程度。比如,把一堆西瓜和一堆梨放在一起,随机挑出一个水果,得到的结果是不确定的,证明信息比较混乱,即信息熵比较大。但是如果先通过“颜色”将这一堆水果分成两份,那从其中一堆水果中挑出水果的种类就是确定的,证明通过颜色这一特征,将信息熵减小了。而信息增益反应的其实就是信息熵减小的幅度。
信息熵准确的数学定义如下
\(H(X) = -\sum_{x\in X}p(x)\log{p(x)}\)
X是一个离散型随机变量(在这里是我们的标签)这个公式计算出来的结果,就代表当前分裂情况下,标签的不确定性。
例如:
如果不考虑任何特征,原始数据集的信息熵是\(H_{0}=-(\frac{2}{3}*\log{\frac{2}{3}} + \frac{1}{3}*\log{\frac{1}{3}}) = 0.918\)
在这个基础上,依次尝试考虑各个特征
a. 假设考虑房产,数据被分为了两部分,一部分是有房产的【3】,占\(\frac{1}{6}\),一部分是没有房产的【1,2,4,5,6】占\(\frac{5}{6}\),那考虑这一特征的信息熵,就是这两部分的信息熵加权和。
\(H_{1} = -\frac{1}{6}* (1 * \log{1}) - \frac{5}{6} * ( \frac{3}{5} *\log{\frac{3}{5} + \frac{2}{5} * \log\frac{2}{5}}) = 0.81\)
b. 假设考虑婚姻状况,那数据被分为了三部分,一部分是单身的【4】,占\(\frac{1}{6}\),一部分是离婚的【1,3】,占\(\frac{1}{3}\),一部分是已婚的【2,5,6】,占\(\frac{1}{2}\)。这一特征的信息熵为
\(H_{2} = \frac{1}{3}\)
c. 假设考虑年收入,数据被分为三部分,一部分是高收入【3】,占\(\frac{1}{6}\),一部分是中收入【1,4,6】,占\(\frac{1}{2}\),一部分是低收入【2,5】,占\(\frac{1}{3}\),这一特征的信息熵为
\(H_{3} = 0\)
通过这三个特征分裂后的信息熵,最低的是特征【年收入】的信息熵,即通过这个特征划分数据集,能为数据带来更高的确定性,也就是说,在当前节点上,选择【年收入】这个特征作为划分依据,能将数据的不确定性降到最低。
这样就找到了第一个分裂节点。此后再继续按同样的方法划分即可,直到达到下面的三个终止条件之一。
- 数据已被用完
- 特征已被用完
- 该子节点的标签全都一样, 即确定性已为100%
第二个问题,构建叶子节点。划分好数据后,往往通过多数投票的方法来决定该叶子节点的值,即观察该节点下的数据,取出现次数最多的那个标签。
解决完这两个问题以后,我们就通过训练数据,构建了如下的一棵决策树。
1.2 决策树如何进行决策?(Test)
通过1.1我们已经学到了长者给我们的经验,那利用这棵树来进行决策就不是什么难事了。
假设来了一个新的客户,它的特征如下
那我们通过遍历决策树的这一条路径,就能够给出一个预测的参考。
1.3 解释性
决策树的解释性一目了然,以刚刚ID=7的用户为例,我们预测其不能放贷的主要原因是由于其收入较低。
在真实的数据中,一个用户往往会有几十甚至几百维特征,建成的树要比上图所示的树大得多。决策树算法的贡献在于为我们依次挑选了比较重要的特征,并且为预测提供了极强的解释性。
2 延伸阅读
本文的目的旨在为数据挖掘初学者入门决策树算法提供一个较为感性的认识,在实际的企业应用中往往会有许多改进和优化,但是最基础的思想仍然与本文所想要传达的思想相一致。下面是决策树相关的部分内容,因超出本文主旨因此不再详细阐述,只介绍其背后的思想。
2.1 不同的特征选取依据
本文介绍的决策树算法为ID3决策树,即使用信息增益作为属性选取依据的决策树。但是其实并不一定在所有的数据中都使用信息增益。通常还有使用信息增益率的C4.5决策树和使用基尼系数的CART决策树。
信息增益率:信息增益仅仅考虑选择了这一列特征后,给数据带来的确定性有多少。假设给数据增加一列行号(即 1~N),如果按这一列行号进行划分,得到的熵为0,带来的确定性无疑是极高的,但是却忘了考虑这一列特征有多少值,有没有意义。信息增一律惩罚了这样的特征,同时保证增加确定性,尽量选择特征值较少的特征。
信息增益率:\(IG(X) = \frac{H(c) - H(c|X)}{H(X)}\)
即选用了特征X后的信息增益除以特征X的信息熵。
基尼系数:其含义与熵类似,是经济学中的一个概念,用于衡量地区的收入差距,从数据的角度来说,就是衡量给定数据的纯度,比如所有人的收入都差不多(Label都差不多),那么基尼系数就会比较低(确定性比较大)。它可以看做是信息熵的替代品,由于其计算不需要计算\(\log\),所以在效率上会较高。
基尼系数:\(Gini(D) = 1 - \sum_{i=1}^{n}p_{i}^{2}\)
2.2 剪枝策略
决策树的深度、宽度过大时,往往会导致过拟合的现象。通常会采用惩罚多余分支的思想来对决策树进行剪枝,达到限制决策树规模的目的,最终减轻过拟合的出现。
3 总结
本节首先从择偶现象中引出了对于决策树的直观理解;然后提出如何建树,如何使用树两个问题,通过解决这两个问题来达到理解决策树的目的;其次说明了决策树在解释性上的优势;最后简略介绍了优化决策树的两个思路。决策树作为一个简单的模型,往往被作为一个组件,用来组合成更强大的算法,如GBDT,xgboost等。但是这些算法的核心思想,都与决策树有相似之处。决策树可以说是学习数据挖掘体系上很重要的一环。
4 思考
在我的理解中,决策树做的事情其实是看训练数据中,大多数情况是怎样决策的,然后记住这个决策,在预测的阶段去模仿历史的做法。它的优点就是具有极强的可解释性,从一棵树的构造当中,就能够告诉任何一个使用你的模型的客户你所考虑的因素和过程。对比于当今大行其道的深度学习,决策树的在很多任务上可能无法胜任,甚至需要很多人工的因素去提取特征。而深度学习端到端的强大学习能力,让人不禁觉得,决策树就是一个将人思考过程统计并复现的过程,深度学习虽然无法解释,但是碰巧的是我们人类思考的过程也是无法解释的,是下意识的,这是不是一种引人深思的巧合?
参考文献
http://blog.csdn.net/xbinworld/article/details/44660339
http://blog.csdn.net/lemon_tree12138/article/details/51837983