【ML】决策树(decesion Tree)从入门到放弃再到掌握

人类做决策的时候,往往基于一些经验或者条件,比如我开始写这篇文章之前,我做了这么一些判断:

1、我是否一心想要做工程师?——>是(执行下一步)/否(放弃写博客)

2、我是否需要写一篇博客来加深一下关于决策树的印象?——> 是(执行下一步)/否(放弃)

3、我写博客的水平如何——> 勉强(写博客)/一般(写博客)/完全不行(放弃)

4、写完会不会找到对象——>不知道(不重要,还是写博客)

这恰恰是一种树状结构的判断,经过这一系列的判断,并剔除一些不重要的问题之后,最终我写下了这篇博客。决策树也是基于树结构来做判断的,它的处理机制跟我一样。

当我们要利用决策树做分类或者回归任务时,我们需要先基于训练集学习一个跟上面类似的树。

构建一颗决策树的过程往往分为三个步骤:特征选择决策树的生成和决策树的剪枝

特征选择:

决策树一般包含一个叶子节点,若干内部节点,和若干叶子节点。如下图的一个示例:

为了进一步说明该算法,我们借助了周志华老师的西瓜数据集,并作了稍微的修改。数据集如图所示:

同时,我们借助一些问题来思考整个算法:

1、选谁作根节点呢?(或者说,怎么选择最优划分属性呢)?

ID3算法利用"信息增益"

C4.5算法在ID3基础上利用了"信息增益比". 因为信息增益对分类多的属性有偏好,会使得模型泛化能力不高

CART算法使用"GINI指数"

信息增益:

如果我们选择某个特征(假设为"色泽")进行好瓜坏瓜的决策后,刚好完美地把好瓜分在了一边,坏瓜分在另外一边,那是多么令人愉快的事情啊

当然事情不会这么完美,但是我们可以选择能使得上面的情况最大可能性出现的特征来作为当前的最优划分特征.

 

我们知道"熵"可以衡量一个集合的纯度:

Ent(x) = -\sum _{i=1}^{N}p_klogp_k

p_k 为某个类别在当前集合中所占的比列,从下图中我们可以看出,若p_k =0 或者 p_k  = 1,都有 -p_klogp_k = 0.而当集合中的元素都是平等分布的时候,信息熵最大.

Ent(x)表示将N个类别的信息熵上加起来,很自然的,Ent(x)越小,表示当前划分得到的集合纯度越高.

回到西瓜的预测问题上,如果我选择按照"色泽"来划分, 由于"色泽"有三个不同的属性(黑色,粉红,青緑),那么样本集会被分成三个部分,也就是说,选择"色泽"为根节点,则会有三个分支.

那么这三个分支对应的信息熵为:-\sum_{v=1}^{V}\frac{|D^v|}{|D|}Ent(D^v),因为每个属性对应的取值数量不同,\frac{|D^v|}{|D|}对应了不同的取值占比.例如:有20个样本参与划分,选择"色泽"属性进行划分,"色泽"属性分别有三种取值,分别是:"黑色":对应10个样例,"粉红"对应6个样例,"青緑"对应4个样例.则划分后,得到三个样本集合.他们的信息熵分别为: -\frac{10}{20} * Ent(D^{black}),-\frac{6}{20} * Ent(D^{pink}),-\frac{4}{20} * Ent(D^{Green}),其中

Ent(D^v) = -\sum _{i=1}^{N}p_klogp_k.

于是定义按照某属性a划分后的信息增益:

Gain(D,a)=Ent(D) - \sum _{i=1}^{v}\frac{|D^v|}{|D|}Ent(D^v)

选择按照信息增益最大的属性作为划分属性.如此迭代,构建出整个决策树.

 

信息增益:

我们不难发现(其实很难发现,但是很多书上都喜欢这么说) 信息增益对可取值数目较多的属性有多偏好,比如我选择"id" 属性作为划分属性,得到m个划分集合,每一个集合中间就包含一个元素,显然这个集合的信息熵是最小的,信息增益是最大的.为了减少这种偏好可能带来的不利影响,C4.5不直接使用信息增益,而是使用信息增益比.

公式如下:

Gain_ratio(D,a) = \frac{Gain(D,a)}{IV(a)}

其中,IV(a) = -\sum _{v = 1}^{V}\frac{|D^v|}{|D|}log\frac{|D^v|}{|D|}

信息增益比就是在信息增益的基础上加上 一个惩罚项IV(a).

如前文所述,当集合中的分类均匀(即类别数量多)的时候,信息熵则越大,对应的IV(a)值越大,于是Gain_ratio(D,a)就会越小.

但是很显然,Gain_ratio  对于可取值少的属性也有所偏好,于是在使用时,应该先从候选属性中选择Gain(D,a)高于某水平的属性,再从这些属性中选择Gain_ratio(D,a)高的属性.

 

基尼指数:

在CART决策树中,采用的是基尼指数来作为其衡量标准。基尼系数直观的理解是,从集合中随机抽取两个样本,如果样本集合越纯,取到不同样本的概率越小。这个概率反应的就是基尼系数。

Gini(D) = \sum _{k=1}^{|y|}\sum _{k^{'}\neq k}p_{k}p_{k^{'}} = 1 - \sum _{k=1}^{|y|}p^{_{k}^{2}}

所以,按照具有a个可能取值的属性划分,属性a的基尼指数为:

Gini_index(D,a) = \sum _{v = 1}^{V}\frac{|D^v|}{|D|}Gini(D^v)

选择基尼指数最小的属性作为最优划分属性即可.

 

2、ID3,C4.5,CART 有何区别?

C4.5实际上是对ID3进行优化,通过引入信息增益比,一定程度上对取值比较多的特征进行惩罚,避免ID3出现过拟合的特性,提
升了决策树的泛化能力.

ID3只能处理离散型变量,而C4.5和CART都可以处理连续型变量。C4.5处理连续型变量时,通过对数据排序之后找到类别不同的
分割线作为切分点
,根据切分点把连续属性转换为布尔型,从而将连续型变量转换多个取值区间的离散型变量。而对于CART,由于其构建时每次都会对特征进行二值划分,因此可以很好地适用于连续性变量。

ID3和C4.5只能用于分类任务,而CART(Classification and Regression Tree,分类回归树)从名字就可以看出其不仅可以用于分类,也可以应用于回归任务(回归树使用最小平方误差准则)。

ID3对样本特征缺失值比较敏感(没有对应的处理机制),而C4.5和CART可以对缺失值进行不同方式的处理;ID3和C4.5可以在每个结点上产生出多叉分支,且每个特征在层级之间不会复用,而CART每个结点只会产生两个分支,因此最后会形成一颗二叉树,且每个特征可以被重复使用;ID3和C4.5通过剪枝来权衡树的准确性与泛化能力,而CART直接利用全部数据发现所有可能的树结构进行对比

 

3、所有的属性都适合参与构建决策树吗?

我们即希望决策树能很好的进行预测,但一棵完全生长的决策树往往会面临过拟合的问题.于是我们通过预剪枝(Pre-Pruning)和后剪枝(Post-Pruning)来降低过拟合,提升泛化性能.

顾名思义:预剪枝,即在生成决策树的过程中提前停止树的增长。而后剪枝,是在已生成的过拟合决策树上进行剪枝,得到优化的剪枝决策树。

预剪枝

预剪枝通过以下方法判断树的停止生长,停止生长后,按照多数投票的原则判断该结点所属类别.

  • 当树到达一定深度的时候,停止树的生长。
  • 当到达当前结点的样本数量小于某个阈值的时候,停止树的生长。
  • 计算每次分裂对测试集的准确度提升,当小于某个阈值的时候,停止树的生长。

如何准确地估计何时停止树的生长,针对不同问题会有很大差别,需要一定经验判断。且预剪枝存在一定局限性,有欠拟合的风
险.

后剪枝

后剪枝的核心思想是让算法生成一棵完全生长的决策树,然后从最底层向上计算是否剪枝。剪枝过程将子树删除,用一个叶子结点替代,该结点的类别同样按照多数投票的原则进行类别分类。同样地,后剪枝也可以通过在测试集上的准确率进行判断,如果剪枝过后准确率有所提升,则进行剪枝。相比于预剪枝,后剪枝方法通常可以得到泛化能力更强的决策树,但时间开销会更大.

后剪枝有以下方法:

Reduced-Error Pruning(REP,错误率降低剪枝)

Pesimistic-Error Pruning(PEP,悲观错误剪枝)

Cost-Complexity Pruning(CCP,代价复杂度剪枝)

EBP(Error-Based Pruning)(基于错误的剪枝)

关于几种剪枝方法的介绍和比较可参考:https://www.cnblogs.com/starfire86/p/5749334.html

 

分类树和回归树的区别是什么

Difference 1: When to use classification vs regression tree

  • This might seem like a trivial issue - once you know the difference! Classification trees, as the name implies are used to separate the dataset into classes belonging to the response variable. Usually the response variable has two classes: Yes or No (1 or 0). If the target variable has more than 2 categories, then a variant of the algorithm, called C4.5(多分类), is used. For binary splits however, the standard CART procedure is used. Thus classification trees are used when the response or target variable is categorical in nature. 
  • Regression trees are needed when the response variable is numeric or continuous(数值型或连续性). For example, the predicted price of a consumer good. Thus regression trees are applicable for prediction type of problems as opposed to classification.
  • Keep in mind that in either case, the predictors or independent variables may be categorical or numeric. It is the target variable that determines the type of decision tree needed.

Difference 2: How they work

  • In a standard classification tree, the idea is to split the dataset based on homogeneity of data. Lets say for example we have two variables: age and weight that predict if a person is going to sign up for a gym membership or not. In our training data if it showed that 90% of the people who are older than 40 signed up, we split the data here and age becomes a top node in the tree. We can almost say that this split has made the data "90% pure". Rigorous measures of impurity, based on computing proportion of the data that belong to a class, such as entropy or Gini index are used to quantify the homogeneity in Classification trees.
  • In a regression tree the idea is this: since the target variable does not have classes, we fit a regression model to the target variable using each of the independent variables. Then for each independent variable, the data is split at several split points. At each split point, the "error" between the predicted value and the actual values is squared to get a "Sum of Squared Errors (SSE)". The split point errors across the variables are compared and the variable/point yielding the lowest SSE is chosen as the root node/split point. This process is recursively continued.
  • We discussed a C4.5 classification tree (for more than 2 categories of target variable) here which uses information gain to decide on which variable to split. In a corresponding regression tree, standard deviation is used to make that decision in place of information gain. More technical details are here. Regression trees, by virtue of using regression models lose the one strength of standard decision trees: ability to handle highly non-linear parameters. In such cases, it may be better to use the C4.5 type implementation.

 

 

 

 

 

########################################################

 

向您推荐我的其他文章:

支持向量机(SVM)从入门到放弃再到掌握 :https://blog.csdn.net/b285795298/article/details/81977271

逻辑回归(Logistic Regression-LR)从入门到放弃再到掌握 :https://blog.csdn.net/b285795298/article/details/88683987

决策树(decesion Tree)从入门到放弃再到掌握 :https://blog.csdn.net/b285795298/article/details/89086854

随机森林(Random Forest) 从入门到放弃再到掌握:https://blog.csdn.net/b285795298/article/details/89084257
 

 

 

 

  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

半九拾

援助一个bug吧

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

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

打赏作者

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

抵扣说明:

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

余额充值