决策树的原理及其实现


目录

一、决策树简介

二、决策树的基本流程

三. 划分选择,寻找最优划分属性

(一)、信息增益

(二)、信息增益率

(三) 、基尼指数

四、剪枝处理

五、决策树实现

(一)基于sklearn的代码实现 

(二)基于Python实现 

实例:基于CART算法,实现预测贷款用户是否具有偿还贷款的能力

六、小结


一、决策树简介

决策树(Decision Tree),它是一种以树形数据结构来展示决策规则和分类结果的模型,作为一种归纳学习算法,其重点是将看似无序、杂乱的已知数据,通过某种技术手段将它们转化成可以预测未知数据的树状模型,每一条从根结点(对最终分类结果贡献最大的属性)到叶子结点(最终分类结果)的路径都代表一条决策的规则。决策树就是形如下图的结构(机器学习西瓜书的图):

                 


二、决策树的基本流程

决策树是一个由根到叶的递归过程,在每一个中间结点寻找划分属性,递归重要的是设置停止条件:

  • (1)当前结点包含的样本属于同一类别,无需划分;
  • (2)当前属性集为空,或是所有样本在所有属性上取值相同无法划分,简单理解就是当分到这一节点时,所有的属性特征都用完了,没有特征可用了,就根据label数量多的给这一节点打标签使其变成叶节点(其实是在用样本出现的后验概率做先验概率);
  • (3)当前结点包含的样本集合为空,不能划分。这种情况出现是因为该样本数据缺少这个属性取值,根据父结点的label情况为该结点打标记(其实是在用父结点出现的后验概率做该结点的先验概率)。

    决策树算法的历史

  • 第一个决策算法(E.B.Hunt):CLS
  • 使决策树受到关注,成为机器学习主流技术的算法(J.R.Quinlan):ID3
  • 最常用的决策树算法(J.R.Quinlan):C4.5
  • 既可以分类可以用于回归任务的决策树算法:CART(Classfication and regression tree),从统计建模的角度出发考虑问题,前面都是用过信息论角度去考虑
  • 基于决策树的最强大算法之一:Random Forest

三. 划分选择,寻找最优划分属性

(一)、信息增益

划分数据集的最大原则是:将无序的数据变得更加有序。在介绍信息增益之前,首先介绍一下信息的定义:如果待分类的事物可能划分在多个分类中,则符号 x_{i}的信息定义为:

l(x_{i})=-log_{2}p(x_{i}),其中 p(x_{i}) 是选择该分类的概率。

熵的定义如下:H=-\sum_{k}^{|Y|}p_{k}log_{2}(p(x_{k})),这是计算所有类别所有可能值包含的信息期望,其含义是对信息的平均不确定性的度量,信息熵越大,集合D纯度越低。

信息增益Gain(D,a)=H(D)-\sum_{v=1}^{V}\frac{|D^v|{}}{|D|}H(D^v{})=H(D)-H(D|a) ,信息熵减去条件熵,表示的含义是该属性a能够为分类系数带来多少信息,信息愈多,该特征就越重要,所以当信息增益越大时,则意味着使用属性a来进行划分所获得的纯度越大。

决策树学习中的信息增益等价于训练数据集中类与特征的互信息。

平均互信息:表示得知特征Y的信息从而使得对X的信息的不确定性减少程度。

(二)、信息增益率

信息增益率是为了抑制过细的属性划分,在西瓜书上当我们考虑编号这一列(1-17)这17个数,显然由此划分信息增益最大,因为每个节点仅包含一个样本,分支节点纯度达到最大,但是这样构造的决策树泛化性能太差,无法对新样本进行预测。所以信选择最优划分属性息增益会对某个属性中类别数目多的属性偏爱,但是会产生不利影响,为了减小这种误差,可以使用信息增益率来。

信息增益率=Gain_ratio(D,a)=\frac{Gain(D,a)}{IV(a)} ,其中:IV(a)=-\sum_{v=1}^{V}\frac{|D^v|{}}{D}log_{2}(\frac{|D^v|{}}{D})

相当于是给定属性a下的信息增益与特特征个数的信息熵之间的比值。

参数说明:V表示属性a有V个可能取值 a^1{},a^2{},...,a^V{},若使用a来对样本集合D进行划分,则会产生V个分支结点,其中第v个分支结点包含了D中所有在样本属性a上取值为a^v{} 的样本,记为 D^v{}

这个比仅仅是看信息增益率的大小来选择最后划分属性,而是先通过信息增益从候选属性中找出信息增益高于平均水平属性,再从中选取增益率最高的属性作为最优属性

(三) 、基尼指数

基尼值:表示从集合中随机抽取两个样本,如果样本集合越纯,取到不同样本的概率越小,这个概率就是基尼值。

首先整个数据集D的纯度可用基尼值来度量:Gini(D)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值