AI基础:决策树,基于ID3、C4.5、CART构建原理

决策树是很多算法模型的基础,回顾下

什么是决策树

image

  • 如图,思考一下一个决策问题:是否去相亲,一个女孩的母亲要给这个女孩介绍对象。

  • 决策树相对于LR模型,简单清晰可解释性好很多,就是构造一课树,从根节点走到叶子节点就有答案了。

  • 决策树更像是编程语言中的if-else一样,去做条件判断。

以上就是决策树的基本思想,那么如果有了一棵决策树,就相当于有了一个模型,接下来就是应用了。和其他模型一样,关注的还是决策树如何构造。

决策树的生成

决策树基于“树”结构进行决策的,这时我们就要面临两个问题 :

  • “树”怎么长。
  • 这颗“树”长到什么时候停。

决策树的总体流程是“分而治之”的思想,分而治之之后就是继续用贪心思想去构造,一是自根至叶的递归过程,一是在每个中间节点寻找一个“划分”属性,相当于就是一个特征属性了。接下来我们来逐个解决以上两个问题。

这颗“树”长到什么时候停

  • 当前结点包含的样本全属于同一类别,无需划分;例如:样本当中都是决定去相亲的,属于同一类别,就是不管特征如何改变都不会影响结果,这种就不需要划分了。
  • 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分;例如:所有的样本特征都是一样的,就造成无法划分了,训练集太单一。
  • 当前结点包含的样本集合为空,不能划分。
  • 早停:预剪枝。预剪枝就想象生活中场景,一棵树的一个分叉生长到一定程度我提前剪掉它这分叉叉头,它就不能继续生长了,此分叉就长停在这里了。

"树"怎么长:特征选择

就是说,我第一个节点选哪个特征,选好后往下分叉时继续怎么选特征。后面就重点讲树怎么长的过程。

往下看的前提是能明白信息熵、条件熵、信息增益、信息增益率、基尼指数这些概念,可以参看文章

信息熵、信息增益、信息增益率、基尼指数

特征选择:ID3算法

决策树最核心的就是每个节点该选择哪个特征。ID3算法使用信息增益来进行选择,公式如下。

image

  • Gain(D,a)表示的是D数据集在a特征上的信息增益。Ent(D)表示D数据集的信息熵,实际上的表示符号也可以写成H(D)。后面减的那一坨是按a特征的v个特征值划分的数据集的信息熵之和,就是条件熵H(D|a)
  • 公式图里有关键信息:信息增益=划分前的信息熵 - 划分后的信息熵(按a特征v个特征值划分的v个数据集信息熵之和,也叫条件熵,因为是在a的条件下划分的信息熵)。
  • ID3算法选取信息增益最大的作为当前选取的特征。为啥?信息熵是混乱度的度量对吧,越混乱则信息熵越大,那么我们的目标是啥?目标是把通过决策树计算后把分类或回归的结果出来,结果就是一个数,就是相亲的去还是不去,信息熵是0,也就是说我们目的是把信息熵降下来对吧!所以就选取信息增益最大的,也就是划分后信息熵降的最多的那个特征
  • ID3算法流程就是逐步算出每个特征的信息增益,然后选择最大的那个,作为当前节点,然后继续往下划分同样逻辑。
  1. 第一张图.jpg
  2. 第二张图.jpg
  3. 第三张图.jpg
  4. 第四张图.jpg

不过,信息增益有一个问题:对可取值数目较多的属性有所偏好,看公式就能理解。例如:考虑将“编号”作为一个属性。为了解决这个问题,引出了另一个 算法C4.5。

特征选择:C4.5算法

为了解决信息增益的问题,引入一个信息增益率:

G a i n R a t i o ( D , a ) = G a i n ( D , a ) I V ( a ) I V ( a ) = − Σ V v = 1 ∣ D v ∣ ∣ D ∣ log ⁡ 2 ∣ D v ∣ ∣ D ∣ GainRatio\left( D,a \right) =\frac{Gain\left( D,a \right)}{IV\left( a \right)} \\ IV\left( a \right) =-\underset{v=1}{\overset{V}{\varSigma}}\frac{|D^v|}{|D|}\log _2\frac{|D^v|}{|D|} GainRatio(D,a)=IV(a)Gain(D,a)IV(a)=v=1ΣVDDvlog2DDv

  • 特征a的可能取值数目越多(即V越大),则IV(a)的值通常就越大。IV是实际上是特征的信息熵

  • 信息增益比本质: 是在信息增益的基础之上乘上一个惩罚参数。特征个数较多时,惩罚参数较小;特征个数较少时,惩罚参数较大。不过有一个缺点:信息增益率偏向取值较少的特征。

  • 使用信息增益率:基于以上缺点,并不是直接选择信息增益率最大的特征,而是现在候选特征中找出信息增益高于平均水平的特征,然后在这些特征中再选择信息增益率最高的特征。

特征选择:CART算法

CART:classification and regression tree

ID3和C4.5是使用信息熵来表示纯度,CART是使用基尼指数来表示纯度。

image

  • 公式表示在样本集合中一个随机选中的样本被分错的概率。

  • 举例来说,现在一个袋子里有2种颜色的球若干个,伸手进去掏出2个球,颜色不一样的概率,这下明白了吧。**Gini(D)越小,数据集D的纯度越高。**基尼指数可以理解为熵模型的一阶泰勒展开

  • 对于某个特征的基尼系数计算公式

G i n i _ i n d e x ( D , a ) = Σ V v ∣ D v ∣ ∣ D ∣ G i n i ( D v ) Gini\_index\left( D,a \right) =\underset{v}{\overset{V}{\varSigma}}\frac{|D^v|}{|D|}Gini\left( D^v \right) Gini_index(D,a)=vΣVDDvGini(Dv)

举个例子

假设现在有特征 “学历”,此特征有三个特征取值: “本科”,“硕士”, “博士”,

当使用“学历”这个特征对样本集合D进行划分时,划分值分别有三个,因而有三种划分的可能集合,划分后的子集如下:

1.划分点: “本科”,划分后的子集合 : {本科},{硕士,博士}

2.划分点: “硕士”,划分后的子集合 : {硕士},{本科,博士}

3.划分点: “博士”,划分后的子集合 : {博士},{本科,硕士}}

对于上述的每一种划分,都可以计算出基于 划分特征“学历”= 某个特征值比如本科、硕士、博士 ,将样本集合D划分为两个子集的纯度:

img

因而对于一个具有多个取值(超过2个)的特征,需要计算以每一个取值作为划分点,对样本D划分之后子集的纯度Gini(D,Ai),(其中Ai 表示特征A的可能取值)

然后从所有的可能划分的Gini(D,Ai)中找出Gini指数最小的划分,这个划分的划分点,便是使用特征A对样本集合D进行划分的最佳划分点。这里划分直接划分成两个集合噢!如上划分点加入G(D,“本科”)最小,那么划分了两个集合{本科},{硕士,博士}。仍然存在多个类型的集合{硕士,博士}仍然按照上述计算规则进行往下划分

综上案例,实际上CART树是一个二叉树。从二分类视角看CART

  • 每一个产生分支的过程是一个二分类过程这个过程叫作“决策树桩”
  • 一棵CART是由许多决策树桩拼接起来的
  • 决策树桩是只有一层的决策树

决策树如何剪枝

决策树的剪枝基本策略有 预剪枝 (Pre-Pruning) 和 后剪枝 (Post-Pruning)。

  • 预剪枝:其中的核心思想就是,在每一次实际对结点进行进一步划分之前,先采用验证集的数据来验证如果划分是否能提高划分的准确性。如果不能,就把结点标记为叶结点并退出进一步划分;如果可以就继续递归生成节点。
    • 优点:使得决策树的部分分支没有展开,降低了过拟合的风险,节省了训练时间;
    • 缺点:有可能出现欠拟合。
  • 后剪枝:后剪枝则是先从训练集生成一颗完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来泛化性能提升,则将该子树替换为叶结点。
    • 优点:欠拟合风险很小,泛化性能也较高;
    • 缺点:训练时间比预剪枝长

三种不同的决策树对比

基本不用ID3和C4.5,仅作原理和演变了解

  • ID3
    • 取值多的属性,更容易使数据更纯,其信息增益更大。
    • 训练得到的是一棵庞大且深度浅的树:不合理。
    • 多叉树 只能处理分类问题
    • 只能处理离散特征
    • 不能处理缺失值
    • 无剪枝
  • C4.5
    • 采用信息增益率替代信息增益。 多叉树
    • 只能处理分类问题
    • 连续特征离散化
    • 可以处理缺失值:把缺失样本同时划分到所有子节点
    • 后剪枝
  • CART
    • 以基尼系数替代熵,最小化不纯度,而不是最大化信息增益。 二叉树
    • 可以处理回归问题
    • 连续特征多种切分点
    • 缺失值的惩罚:缺失百分比的重要度评估
    • 基尼系数避免log计算
    • 交叉验证剪枝法

树形结构为什么不需要归一化?

  • 因为数值缩放不影响分裂点位置,对树模型的结构不造成影响。

  • 按照特征值进行排序的,排序的顺序不变,那么所属的分支以及分裂点就不会有不同。而且,树模型是不能进行梯度下降的,因为构建树模型(回归树)寻找最优点时是通过寻找最优分裂点完成的,因此树模型是阶跃的,阶跃点是不可导的,并且求导没意义,也就不需要归一化。

  • 既然树形结构(如决策树、RF)不需要归一化,那为何非树形结构比如Adaboost、SVM、LR、Knn、KMeans之类则需要归一化?因为对于线性模型,特征值差别很大时,运用梯度下降的时候,损失等高线是椭圆形,需要进行多次迭代才能到达最优点。 但是如果进行了归一化,那么等高线就是圆形的,促使SGD往原点迭代,从而导致需要的迭代次数较少。

分类决策树和回归决策树的区别

Classification And Regression Tree(CART)是决策树的一种,CART算法既可以用于创建分类树(Classification Tree),也可以用于创建回归树(Regression Tree),两者在建树的过程稍有差异。

这里只说回归树了,上述聊的就是分类树

回归树:选择均方差最小的切分点

CART回归树是假设树为二叉树,通过不断将特征进行分裂。比如当前树结点是基于第j个特征值进行分裂的,设该特征值小于s的样本划分为左子树,大于s的样本划分为右子树。

R 1 ( j , s ) = { x ∣ x ( j ) ⩽ s }    a n d    R 2 ( j , s ) = { x ∣ x ( j ) > s } R_1\left( j,s \right) =\left\{ x|x^{\left( j \right)}\leqslant s \right\} \,\,and\,\,R_2\left( j,s \right) =\left\{ x|x^{\left( j \right)}>s \right\} R1(j,s)={xx(j)s}andR2(j,s)={xx(j)>s}
而CART回归树实质上就是在该特征维度对样本空间进行划分,而这种空间划分的优化是一种NP难问题,因此,在决策树模型中是使用启发式方法解决。典型CART回归树产生的目标函数为:

Σ x i ϵ R m ( y i − f ( x i ) ) 2 \mathop {\varSigma} \limits_{x_i\epsilon R_m}\left( y_i-f\left( x_i \right) \right) ^2 xiϵRmΣ(yif(xi))2
因此,当我们为了求解最优的切分特征j和最优的切分点s,就转化为求解这么一个目标函数:

min ⁡ j , s [ min ⁡ c 1 Σ x i ϵ R 1 ( j , s ) ( y i − c 1 ) 2 + min ⁡ c 2 Σ x i ϵ R 2 ( j , s ) ( y i − c 2 ) 2 ] \underset{j,s}{\min}\left[ \underset{c_1}{\min}\mathop {\varSigma} \limits_{x_i\epsilon R_1\left( j,s \right)}\left( y_i-c_1 \right) ^2+\underset{c_2}{\min}\mathop {\varSigma} \limits_{x_i\epsilon R_2\left( j,s \right)}\left( y_i-c_2 \right) ^2 \right] j,smin[c1minxiϵR1(j,s)Σ(yic1)2+c2minxiϵR2(j,s)Σ(yic2)2]
所以我们只要遍历所有特征的的所有切分点,就能找到最优的切分特征和切分点。最终得到一棵回归树。

后面再补代码吧,有描述错的欢迎指出,不闹笑话。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值