常用决策树模型介绍与python实现

1. 引言

    决策树(decision tree)是一种基本的分类和回归方法,由于其采用的是一种树形的结构,因此,具有很强的解释性和计算速度,也正是因为这些特点,使得决策树在很多行业都得到了应用,比如风控行业等。决策树的建模过程一般分为三个步骤:特征选择、决策树的生成和决策树的剪枝,根据这三个步骤所采用的规则,衍生出了很多不同的模型,比较经典的有Quinlan在1986年提出的ID3算法和1993年提出的C4.5算法,以及Breiman等人在1984年提出的CART算法,本文将以分类决策树为例,对这几个算法分别进行介绍,并用python进行实现。

2. 常用决策树模型介绍

2.1 决策树的定义

    决策树是由结点和有向边组成的树形结构,其中,结点包含两种类型:内部结点和叶结点。内部结点表示一个特征或者属性,叶结点则表示一个类。如下图所示,其中每个圆圈表示内部结点,每个正方形表示叶结点。
在这里插入图片描述
    对于给定的训练数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x N , y N ) } D=\left\{\left(x_{1}, y_{1}\right),\left(x_{2}, y_{2}\right), \cdots,\left(x_{N}, y_{N}\right)\right\} D={ (x1,y1),(x2,y2),,(xN,yN)},其中, x i = ( x i ( 1 ) , x i ( 2 ) , ⋯   , x i ( n ) ) T x_{i}=\left(x_{i}^{(1)}, x_{i}^{(2)}, \cdots, x_{i}^{(n)}\right)^{\mathrm{T}} xi=(xi(1),xi(2),,xi(n))T表示输入的特征向量, n n n为特征的个数, y i ∈ { 1 , 2 , ⋯   , K } y_{i} \in\{1,2, \cdots, K\} yi{ 1,2,,K}为类别标记, K K K表示类别的个数, N N N表示训练集的大小。决策树的思想大致如下:

  1. 首先,构建根结点,然后将整个训练集都放在根结点。
  2. 接着,从所有特征中选择一个最优特征,并根据该特征将训练数据集分割为多个子集,使得每一个子集有一个当前条件下的最好分类,如果某个子集已经基本分类正确,则将其作为叶结点,其对应的类别作为该叶结点的类别,否则,对每个子集继续选择最优的特征进行分割,如此递归下去,直到所有的子集基本被正确分类为止。最后,每个叶结点都代表一个子集,也是特征空间中的一个子区域,每个子区域之间都是不相交的。
  3. 最后,由于第二步为了将训练集划分正确,往往构建的决策树会过于庞大,这时,模型可能会出现过拟合,导致对新的测试数据可能分类效果不好,因此,需要对决策树自下而上进行剪枝,去掉一些过于细分的叶结点,使其回退到父结点或者更高的结点,然后将父结点或者更高的结点作为新的叶结点。

    这样一来,当对一个实例 x x x进行预测时,会根据决策树的分支情况,将实例 x x x划分到其归属的叶结点,并将该叶结点对应的类别作为实例 x x x的预测类别,从而达到分类的效果。下面,我们将根据决策树的三个步骤,对各个算法的思想进行介绍和对比。

2.2 ID3算法

适用场景:特征和目标变量都是离散型

2.2.1 特征选择——信息增益

    特征选择是指决策树在每一次分支时,从所有的特征中选择能够对当前数据集具有最优分类能力的特征,这样可以提高模型的学习效率。ID3决策树的特征选择采用的是信息增益的方法。在介绍信息增益的概念之前,需要先介绍一下条件熵的概念。

    在信息论中,熵表示随机变量不确定性的度量,设 X X X是一个取有限个值的离散随机变量,则其熵的计算公式如下:
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 i = P ( X = x i ) , i = 1 , 2 , ⋯   , n p_{i}=P\left(X=x_{i}\right), \quad i=1,2, \cdots, n pi=P(X=xi),i=1,2,,n表示 X X X取某个类别时的概率,当 p i = 0 p_{i}=0 pi=0时,定义 0 log ⁡ 0 = 0 0 \log 0=0 0log0=0,由于熵只依赖于 X X X的分布,因此,也可以将 X X X的熵记作 H ( p ) H(p) H(p),即
H ( p ) = − ∑ i = 1 n p i log ⁡ p i H(p)=-\sum_{i=1}^{n} p_{i} \log p_{i} H(p)=i=1npilogpi从熵的计算公式可以发现,当随机变量的不确定性越大时,熵的值会越大,其取值范围为:
0 ⩽ H ( p ) ⩽ log ⁡ n 0 \leqslant H(p) \leqslant \log n 0H(p)logn

    条件熵则表示在已知随机变量 X X X的条件下随机变量 Y Y Y的不确定性,其计算公式如下:
H ( Y ∣ X ) = ∑ i = 1 n p i H ( Y ∣ X = x i ) H(Y | X)=\sum_{i=1}^{n} p_{i} H\left(Y | X=x_{i}\right) H(YX)=i=1npiH(YX=xi)其中, p i = P ( X = x i ) , i = 1 , 2 , ⋯   , n p_{i}=P\left(X=x_{i}\right), \quad i=1,2, \cdots, n pi=P(X=xi),i=1,2,,n

    信息增益则表示在得知特征 X X X的信息而使得类 Y Y Y的信息的不确定性减少的程度。其计算公式如下:
g ( Y , X ) = H ( Y ) − H ( Y ∣ X ) g(Y, X)=H(Y)-H(Y | X) g(Y,X)=H(Y)H(YX)当信息增益越大时,表示给定 X X X后,对 Y Y Y进行分类后的不确定性越低,也就是说 X X X Y Y Y的分类能力越强。因此,ID3在每一次分支时,采用信息增益作为每个结点特征选择的规则。

2.2.2 ID3决策树的构造

    ID3算法构造决策树的思想大致如下:首先从根结点开始,对结点,对结点计算所有可能特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点,再对子结点递归地调用以上方法,构建决策树,直到所有特征的信息增益均很小或没有特征可以选择为止,最终得到一个决策树。其具体的算法步骤如下:

  1. 给定训练数据集 D D D,特征集 A A A,阈值 ε \varepsilon ε;
  2. D D D中所有实例属于同一类 C k C_k Ck,则T为单结点树,并将类 C k C_k Ck作为该结点的类标记,返回决策树 T T T;
  3. A = ∅ A=\varnothing A=,则 T T T为单结点树,并将 D D D中实例数最大的类 C k C_k Ck作为该结点的类标记,返回决策树 T T T
  4. 否则,计算 A A A中各特征对 D D D的信息增益,选择信息增益最大的特征 A g A_g Ag
  5. 如果 A g A_g Ag的信息增益小于阈值 ε \varepsilon ε,则 T T T为单结点树,并将 D D D中实例数最大的类 C k C_k Ck作为该结点的类标记,返回决策树 T T T;
  6. 否则,对 A g A_g Ag的每一可能值 a i a_i ai,依 A g = a i A_{g}=a_{i} Ag=ai D D D分割为若干非空子集 D i D_i Di,将 D i D_i
  • 2
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值