决策树原理

决策树

决策树模型

决策树是一种基本的分类和回归的方法,在它的基础上,会衍生出随机森林、XGBOOST等包含了模型融合的方法。

我们可以从两个视角来观察决策树模型:

决策树的构成

决策树由结点(node)和边(directed edge)组成,其中结点由两种类型:内部结点(internal node)和叶节点(leaf node)。如果训练数据被分到内部结点,表示它还可以继续往下分;如果被分类到叶结点上,则表示这些样本点不可以继续分类了。

决策树是if-then规则的集合

由决策树最开始的根节点到最终端的叶结点构建的一条条规则,每一个结点的规则决定着训练数据被分类的条件,而每一个结点对应着一个由条件得出的分类结论。每一个样本点都只有自己独特地一条路径从根节点直到叶结点。

决策树是特征空间与类空间上的条件概率分布

假设输入X表示特征值的随机变量,输出值Y表示分类的随机变量。在各个叶结点上条件概率偏向哪一类,决策树模型就会将这个样本点分类到那一类去。

也就是说,特征空间被一条条的规则划分开来,被划分开的单元没有任何交集,在每一个单元定义的类的概率分布就构成了一个个的条件概率分布,也就是P(Y|X)。

决策树模型的构建

我们希望决策树模型能够从训练数据中归纳出一组分类规则。其损失函数就是正则化的极大似然函数,决策树学习的策略就是最小化这个损失函数。也就是从所有可能的决策树模型中选择最优的决策树模型,然而,这是一个NP完全问题。我们必须另外找一条路来建模。

在现实中,我们通常递归地选择最优特征,并根据该特征对训练数据进行分割,使得各个子数据集有最好的分类过程。 具体来讲,就是先把所有数据放在根结点,利用一个规则将训练数据集分成多个子集,使得每个子集都有一个最好的分类结果。然后重复这个分类的过程,直到所有的数据都被很好地分开。

特征的选择

刚刚提到我们需要一个规则对整个数据集进行分割,这个规则通常是信息增益和信息增益比。

信息增益

我们首先需要回顾一下熵的公式,如果X是一个取有限个值得随机变量,那么X的熵就被定义为:

H(X)=i=1npilogpi

由于熵只依赖于X的分布,与x的取值没有关系,我们就可以把熵的公式中关于x的熵换成关于x的概率的熵,即:

H(p)=i=1npilogpi

条件熵 H(Y|X) 表示在已知随机变量X的条件下随机变量Y的不确定性。随机变量X给定的条件下随机变量Y的条件熵,定义为X给定条件下Y的条件概率分布的熵对X的数学期望:

H(Y|X)=i=1npiH(Y|X=xi)

当熵和条件熵中概率由数据估计得到的时候,就被称为经验熵和经验条件熵。

而信息增益(information gain)表示得知特征X的信息而使得类Y的信息不确定性减少的程度。具体来讲,特征A对训练数据集D的信息增益 g(D,A) ,定义为集合D和经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)的差值,即 g(D,A)=H(D)H(D|A) 具体表示由于特征A而使得对数据集D的分类的不确定性的降低程度。

那么信息增益准则选择特征的方法就是:对训练数据集D,首先就是计算其每一个特征的信息增益,然后选择信息增益最大的那个特征。

信息增益比

如果按照上面的信息增益的方法,有一个缺点就是分类器会选择取值较多的那个特征。例如,如果我们把数字编号这种也当作特征加进去的时候,如果选择数字编号作为分类结点的时候,信息增益自然是最大的,但是这样做是没有任何意义的。为了避免这种情况,我们有了信息增益比。

特征A对训练数据集D的信息增益比 gR(D,A) 定义为其信息增益与训练数据关于特征的值的熵的比值,即 gR(D,A)g(D,A)HA(D) ,其中 HA(D)=i=1n|Di||D|log2|Di||D|

使用信息增益的算法叫做ID3,使用信息增益比的改进算法叫做C4.5。

基尼系数

在分类问题中,假设有k个类,训练数据点属于第k类的概率为 pk ,那么概率分布的基尼系数(Gini Index)是:

Gini(p)=k=1Kpk(1pk)=1k=1Kp2k

对于分类算法,采用的准则和上面两种算法类似,这次是最小化基尼系数为准则。对于一个给定的样本集合,基尼系数为:

Gini(D)=1k=1K[|Ck|2|D|]

如果训练数据根据特征A的分类被分为 D1 D2 两个部分,此时的基尼系数为:

Gini(D,A)=|D1||D|Gini(D1)+|D2||D|Gini(D2)

决策树模型的剪枝

ID3和C4.5的剪枝

和真实世界的树一样,决策树的大小和深度决定了树的复杂程度,也就是模型的复杂程度,所以,为了防止模型的过拟合,我们需要减少模型的复杂程度,这个动作在决策树模型中叫做剪枝(pruning)。

损失函数

决策树的剪枝通常是通过极小化损失函数来实现的,决策树的损失函数为:

Cα(T)=t=1|T|NtHt(T)+α|T|

其中:
+ |T|是决策树叶结点的个数
+ t是树的叶结点,每个叶结点有 Nt 个样本点
+ H(T) 是叶结点t上的经验熵,具体为: Ht(T)=kNtkNtlogNtkNt
+ α 为参数

前半部分表示模型的样本内误差,也就是模型对样本内数据的拟合程度,|T|表示模型的复杂程度,参数 α0 控制着两者之间的影响,权衡着这两个要素。既不能让拟合程度太差,也不能让模型复杂度太高。

如果 α 较大的话就意味着选择较低的|T|,也就是较低的复杂度/较简单的模型,反之亦然。

根据之前的描述,找到一个完美的 α 平衡模型拟合程度和过拟合程度是剪枝的第一要务。最笨的办法就是挨个试,当然,对于每一个 α 都有其对应的决策树模型。 α 如果由人来确定的话,剩下的就是根据 α 找到那个平衡点了。

剪枝,就是在 α 确定的情况下,选择损失函数最小的子树。
就是我们在不用 α 进行调节的情况下,模型的复杂度和子树的大小成反比。
α 确定时,子树越大,模型的偏差就越小,但是方差就越大,子树越小,模型的偏差就越大,方差就越小。

剪枝步骤
  1. 计算每个结点的经验熵
  2. 递归地从树的叶结点往根结点回撤
  3. 如果这个叶结点回撤到上一级的结点之后,损失函数反而减小了,则剪掉这个叶结点。其上一级的结点成为新的叶结点
  4. 重复步骤直到得到最小的子树

CART的剪枝

在上面的算法中有一个缺点,就是 α 不太好确定。那么在CART算法中,有一个笨办法来确定 α ,就是一个个试。也就是对于每一个确定的 α , 都找一个最优的决策树模型出来,虽然 α 有可能取到正无穷,但是决策树的大小取决于特征值的数量,最大的决策树也是有限的,所以这时每一个决策树对应着的是一个个 α 的区间,而不是 α 的具体值。随着 α 从0 开始取值,我们的决策树模型也就从一个完全生长的决策树逐渐缩减成只有一个根结点的树,并随之生成一个树的序列,然后对这些子树的序列用测试集验证,就可以很容易地得出哪个是最优解了

具体的步骤为:
1. 从决策树 T0 的最底端开始不断地剪枝,从而得到 T0 的子树序列 {T0,T1,...Tn}

损失函数为: Cα(T)=C(T)+α|T|

对于一个固定的 α ,一定存在一个使损失函数最小的子树,暂时将其表示为 Tα 。也就是说每一个 α 都对应一个唯一的最优子树 Tα

剪枝过程下属叶节点拟合误差损失函数
剪枝前 |Tt| C(Tt) Cα(Tt)=C(Tt)+α|Tt|
剪枝后0 C(t) Cα(t)=C(t)+α

那么随着 α 大小的变化,一定存在一个 α 使得剪枝前后的损失函数值相同,即 Cα(Tt)=Cα(t) ,那么经过化简可得 α=C(t)C(Tt)|Tt|1 。那既然剪枝前后损失函数相同,就没有必多那么多下属的叶结点了,也就是有必要进行剪枝了。所以,随着 α 的增加,其实剪枝都会发生,只不过 α 的区间的大小不同罢了。

再看公式 α=C(t)C(Tt)|Tt|1 α 的分子是 C(t)C(Tt) ,意思是剪枝后的拟合误差减去剪枝前的拟合误差,所以 α 又称为误差增益值。对于某一个 α ,我们找到了很多个剪枝方案,当然要找其中剪枝后使拟合误差增加最小的方案啦,也就是 α 最小的子树 T1 就是最优子树,也就是说:每一个 α 的区间都对应着唯一的最优子树

继续进行剪枝:

我们减去 T1 后剩下了 T0T1 这棵树,重复上述的上述的操作可以得到第2个 α 区间的第2棵最优子树 T2 ,再重复得到整个子树序列 {T0,T1,...Tn}

2.通过交叉验证法在独立的验证数据集上对子树序列 {T0,T1,...Tn} 进行测试,具体来说就是利用测试集测试基尼系数最小那一个子树。

连续值与缺失值的处理

连续值

  1. 依照连续变量从小到大排序
  2. 假设有N个属性值,则计算两两之间的中间值,形成N-1个候选属性分割点
  3. 用信息增益(率)来选择最佳属性

缺失值

  • 丢弃该样本
  • 赋值为该属性的均值
  • 赋予其可能的概率,让同一个样本以不同的概率划入到不同的子结点中去。其概率值由已经被划分的非缺失值的权重来决定

决策树代码

请移步:ID3决策树的代码实现(Python篇)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值