【机器学习入门】决策树的原理

什么是决策树?

决策树(Decision Tree) 是一种数据结构,可以用来分类和回归,决策树是数据结构,但构建决策树有一系列的算法,决策树的核心之一就是利用算法构建最佳的决策树,以达到在训练数据和测试数据都表现优秀的效果。

决策树的构建和人类的思维过程非常的类似。

假设,我现在要招聘算法工程师,现在有下面一份已经存在的面试记录。

姓名PYTHON机器学习数学录取
莫大
柯二不会
张三不会
李四不会不会
王五不会
赵六不会不会
秦七不会
古八不会
宋九不会不会

那好,现在有一个新的求职者的面试记录

姓名PYTHON机器学习数学录取
朱十不会?

现在的问题是,该不该录取宋九?

决策树就是用来解决这类问题的。

比如,我们可以这样思考。

Created with Raphaël 2.2.0 面试者 机器学习 数学 录取 Python 淘汰 yes no yes no yes no

这是流程图,我们大概都是这样思考问题的。

翻译成决策树如下图所示:

在这里插入图片描述

这里需要注意两个重要的概念。

内部节点

上图中菱形表示的都是内部节点,内部节点用来表示特征或者属性。

机器学习、数学、Python 这些都是数据集中的特征。

叶节点

叶节点表示类别。

上图位于每个分支末端的圆形都是叶节点。

我们本次示例中的类别有两种,录取和淘汰。

当我们顺着决策树进行决策时,很自然地会有一个答案。

心细的同学会有疑问,既然有多种特征,为什么上面的决策树一定要把机器学习作为根节点呢?

是的,把不同的特征作为根节点构建决策树都可以,但是最后的效果就不一样。

在这里插入图片描述

上面可以看到,决策树是构建成功了,但是效果恐怕不能让人满意。

所以,决策树最核心的一步就是选择合适的根节点,然后递归进行。

怎么做呢?

这里通过数学手段完成。

决策树中的数学

决策树中用到的数学知识可以看做是条件概率和熵的结合,实际上构建一棵决策树可以看做是拟合一种条件概率分布。

我们先简单回顾一下条件概率。

条件概率

事件 A:明天会下雨的
事件 B: 明天去加班

条件概率 P(B|A) 就是明天下雨的情况下,同时会要求加班的概率。
如果 A 和 B 是独立事件,那么条件概率就是 P(A)*P(B)

再回到我们的示例,我们可以这样看

事件 A:面试者会 Python
事件 B:面试者被录取

那么条件概率就是 P(B|A) 面试者会 Python 同时被录取的概率。
从根节点到叶节点,每一条路径对应一个条件概率,所以条件概率可以共同组成一个概率分布。

前面讲到过,选择哪一个特征作为决策树的根节点是非常重要的,这里需要另外一个数学知识解决,那就是熵(entropy)。

熵本来是物理概念,用来衡量一个封闭的系统中无法利用的能量。

在信息论中,熵是用来度量系统的不确定程度的。

怎么理解呢?

我们通常说一个人靠谱或者是不靠谱,这个通常是比较感性的,做感性的判断容易终究不好,所以很多人想到了量化。

比方说,判断某个人能不能完成任务的概率为 P.

  • P = 0,说明这个人的能力很差,肯定不能完成任务
  • P = 1, 说明这个人的能力很强,绝对可以完成任务

我们用熵来定义不确定性。

熵的公式如下

H ( X ) = − ∑ i = 1 n p i log ⁡ p i H(X)=-\sum_{i=1}^{n}p_{i}\log p_{i} H(X)=i=1npilogpi

如果 P 只有 0 或者 1 两种取值的话。

熵的结果都是 0.

熵等于 0 的意思是,百分百肯定,没有什么不确定的。

下次你再听到别人说:“我早就知道你肯定不行”

这个时候,你要在心里翻译过来,他对你建立了一个判断模型,这个模型中他认为熵几乎为 0,没有什么不确定性,他看死你了。

下面再讲条件熵。

对比之前的条件概率,我们可以很容易理解。

条件熵H(Y|X)是衡量在随机变量X已经确定的条件下,Y取值的不确定性。

可以这么理解。

假设随机变量 X 表示面试者的 Python 等级,取值有会和不会两种。
随机变量 Y 表示最终的录取结果,有录取和淘汰两种。

那么,H(Y|X) 就是已知面试者的 Python 等级,求面试者最终录取结果的不确定性。

公式如下:

H ( Y ∣ X ) = ∑ i = 1 n p i H ( Y ∣ X = x i ) H(Y|X) = \sum_{i=1}^{n}p_{i}H(Y|X=x_{i}) H(YX)=i=1npiH(YX=xi)

信息增益(information gain)

有了熵和条件熵还不够,我们的目的是减少熵,为此引入了信息增益。

g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A) = H(D) - H(D|A) g(D,A)=H(D)H(DA)
上面 D 指代训练集。
H(D) 被称为经验熵。
H(D|A) 经验条件熵
g(D,A) A 对 D 的信息增益

H(D) 说明的是训练集合,分类的不确定程度。
H(D|A) 说明的是特征 A 选定条件下,训练集的分类不确定程度。
g(D,A) 说明的是选定特征 A 后,对于提升 D 的分类确定性有多少。

g(D,A) 自然是越高越好,这也是它增益的意义体现。

不同的特征,信息增益不一样,所以它们对于构建准确的决策树价值也不一样。

我们构建决策树时,以信息增益最大的特征为基础。

信息增益

我们可以针对示例中不同的特征,求其信息增益

首先看经验熵。

所以的训练样本记为 D,分类结果为 C

C 有两种取值:录取和淘汰

姓名PYTHON机器学习数学录取
莫大
柯二不会
张三不会
李四不会不会
王五不会
赵六不会不会
秦七不会
古八不会
宋九不会不会

我们观察表格,可以知道录取 2 人,淘汰 7 人,共 9 人。

H ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ log ⁡ 2 ∣ C k ∣ ∣ D ∣ H(D) = -\sum_{k=1}^{K}\frac{|C_{k}|}{|D|}\log_{2}\frac{|C_{k}|}{|D|} H(D)=k=1KDCklog2DCk

C k C_{k} Ck 表示某一类别, ∣ C k ∣ |C_{k}| Ck 该类别下的样本数量。

比如 C 1 C_{1} C1代表录取的人,录取的人数是 2 个, C 2 C_{2} C2代表淘汰的人,淘汰的人数是 7 个。

所以
H ( D ) = − 2 9 ∗ log ⁡ 2 2 9 − 7 9 ∗ log ⁡ 2 7 9 = 0.764 H(D)=-\frac{2}{9}*\log_{2} \frac{2}{9}-\frac{7}{9}*\log_{2} \frac{7}{9} = 0.764 H(D)=92log29297log297=0.764

经验条件熵也有公式

H ( D , A ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ H ( D i ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ ∑ k = 1 K log ⁡ 2 ∣ D i k ∣ ∣ D i ∣ H(D,A) = -\sum_{i=1}^{n}\frac{|D_{i}|}{|D|}H(D_{i})=-\sum_{i=1}^{n}\frac{|D_{i}|}{|D|}\sum_{k=1}^{K}\log_{2}\frac{|D_{ik}|}{|D_{i}|} H(D,A)=i=1nDDiH(Di)=i=1nDDik=1Klog2DiDik

公式可能比较复杂,但是还是比较容易理解的。

A 指代某种特征,A 将 D D D 划分了不同的子集, D i D_{i} Di 是某一个子集。 ∣ D i ∣ |D_{i}| Di 是对应的子集中样本的数量。

比如按照Python 这个特征,可以将 D 划分为 D1,D2 两个子集,D1 代表会,D2 代表不会。两者的数量分别为 4 和 5。

D i k D_{ik} Dik 表示 Di 子集中,属于类别 C k C_{k} Ck 的集合。

比如会 Python 的人中,最终被录取的那些人。

下面求Python这一特征的经验条件熵,设 Python 为 特征 A1.

H ( D 1 ) = − 1 4 ∗ log ⁡ 2 1 4 − 3 4 ∗ log ⁡ 2 3 4 = 0.811 H(D_{1})=-\frac{1}{4}*\log_{2} \frac{1}{4}-\frac{3}{4}*\log_{2} \frac{3}{4} = 0.811 H(D1)=41log24143log243=0.811

H ( D 2 ) = − 1 5 ∗ log ⁡ 2 1 5 − 4 5 ∗ log ⁡ 2 4 5 = 0.722 H(D_{2})=-\frac{1}{5}*\log_{2} \frac{1}{5}-\frac{4}{5}*\log_{2} \frac{4}{5} = 0.722 H(D2)=51log25154log254=0.722

H ( D , A 1 ) = − 2 9 ∗ H ( D 1 ) − 7 9 ∗ H ( D 2 ) = 0.762 H(D,A_{1})=-\frac{2}{9}*H(D_{1})-\frac{7}{9}*H({D_{2}}) = 0.762 H(D,A1)=92H(D1)97H(D2)=0.762

有了 H ( D ) H(D) H(D) H ( D , A ) H(D,A) H(D,A)之后,就可以求信息增益了

g ( D , A 1 ) = H ( D ) − H ( D , A 1 ) = 0.764 − 0.762 = 0.002 g(D,A_{1})=H(D)-H(D,A_{1}) = 0.764 - 0.762 = 0.002 g(D,A1)=H(D)H(D,A1)=0.7640.762=0.002

增益为 0.002 ,这代表着以 Python 为特征划分数据集 D,对于减少分类不确定性毫无帮助。

那么,设机器学习为 A2,数学为 A3,按照同样的结果,它们的信息增益分别是:

H ( D , A 2 ) = − 3 9 ∗ 0.918 − 6 9 ∗ 0 = 0.306 g ( D , A 2 ) = 0.764 − 0.306 = 0.458 H(D,A_{2}) = -\frac{3}{9}*0.918- \frac{6}{9}*0 = 0.306 g(D,A_{2}) = 0.764 - 0.306 = 0.458 H(D,A2)=930.918960=0.306g(D,A2)=0.7640.306=0.458

H ( D , A 3 ) = − 4 9 ∗ 0.811 − 5 9 ∗ 0.722 = 0.762 g ( D , A 2 ) = 0.764 − 0.762 = 0.002 H(D,A_{3}) = -\frac{4}{9}*0.811 -\frac{5}{9}*0.722= 0.762 g(D,A_{2}) = 0.764 - 0.762 = 0.002 H(D,A3)=940.811950.722=0.762g(D,A2)=0.7640.762=0.002

按照信息增益,机器学习应该就是最关键的特征。

但是,信息增益 有个缺点,就是结果容易偏向样本多的特征。

因此,除了信息增益外还有个信息增益比.

定义如下
g R ( D , A ) = g ( D , A ) H A ( D ) g_{R}(D,A)=\frac{g(D,A)}{H_{A}(D)} gR(D,A)=HA(D)g(D,A)

其中,
H A ( D ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ log ⁡ 2 ∣ D i ∣ ∣ D ∣ H_A(D)=-\sum_{i=1}^{n}\frac{|D_{i}|}{|D|}\log_{2}\frac{|D_{i}|}{|D|} HA(D)=i=1nDDilog2DDi

我们也可以按照公式来计算,每个特征的信息增益比。

g R ( D , A 1 ) = 0.003 g_{R}(D,A_{1}) = 0.003 gR(D,A1)=0.003

g R ( D , A 2 ) = 0.499 g_{R}(D,A_{2}) = 0.499 gR(D,A2)=0.499

g R ( D , A 3 ) = 0.003 g_{R}(D,A_{3}) = 0.003 gR(D,A3)=0.003

可以看到,仍然说明了机器学习是录取判断中的关键特征。

特征的选取是递归进行的,先选取最优的特征,然后用同样的方法选取次优的特征,直到满足预设的条件。

常见的有 2 种算法,ID3 和 C4.5。

ID3 是以信息增益为选择依据,C4.5 以信息增益比为算法依据。

后续的博文将详细讲解它们的算法实践过程。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

frank909

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值