首页 > 编程知识 正文

python决策树模型剪枝,决策树算法实例

时间:2023-05-05 16:47:37 阅读:46755 作者:3971

1 .决策树

1.1从LR到决策树

我想大家都做过用LR分类的事情。 让我们总结一下LR模型的优缺点。

好处

适用于需要得到分类概率的场景。

效率高。

处理好线性特性。

缺点

特征空间大时,逻辑回归的性能不好。

不能很好地处理大量的多种特征。

对于非线性特性,需要转换。

以上是LR模型的优缺点。 没错,决策树的出现是为了解决LR模型的不足之处。 这就是为什么我们要学习决策树。 没有万能的型号。

决策树的优点

模拟人的直觉决策规则。

可以处理非线性特性。

考虑了特征之间的相互作用。

实际上,使用照片可以更好地理解LR模型和决策树模型算法的根本区别。 想想是否去相亲,女孩子的母亲是否会把对象介绍给这个女人的大海,这样的决策问题吧。

图像

大家都很明白吧! LR模型的根本区别在于用头脑填充学习所有的特征,而决策树像编程语言的if-else那样进行条件判断。

1.2“树”生长过程

决策树根据“树”的结构进行决策,这时我们必须面对两个问题。

“树”有多长?

这颗“树”要生长到什么时候才能停止?

只要理解了这两个问题,这个模式就已经建立起来了。 决策树的总体流程是“分而治之”的思想,一是从根到叶的递归过程,二是每个中间节点寻找“分”属性,相当于特征属性。 接下来,让我们逐一解决这两个问题。

这棵“树”要长到什么时候才能停下来

当前节点中包含的所有样本属于同一类别,无需分类; 例如,一些样品属于同一类别,他们决定相亲。 也就是说,无论特征如何变化都不会影响结果。 这种东西不需要分开。

当前属性集为空,或者所有示例在所有属性中具有相同的值,并且不能拆分; 例如,所有样本的特征都一样,分不开了,训练集太单一了。

当前节点中包含的示例集合为空,无法拆分。

1.3“树”有多长

在生活中,你会遇到很多需要决策的地方,比如吃饭的地方、购买数码产品、旅游的地方等等。 可见,在这些选择中,大部分取决于人的选择,也就是服从大众的选择。 其实在决策树中也是一样的,如果大部分样本是同一种类的,就已经做出了决定。

我们可以抽象出大众的选择。 这引入了纯度这个概念。 想想也是这样。 大众的选择意味着纯度很高。 那么,稍微深入一点,就和信息熵越低纯度越高这个词有关。 我想大家也或多或少听说过“熵”这个概念。 平均说来,信息熵是用来衡量所包含的“信息量”的。 如果示例属性相同,则包含的信息似乎是单一的,没有区别。 相反,如果示例属性不同,则包含的信息量会变大。

一来这里就头疼。 因为很快就会引入信息熵公式,所以其实很简单:

图像

Pk指示类别k的样本占当前样本集合d的比例为Pk。

信息增益

不说废话直接上官方:

图像

暂且不论不明白,简单来说,分割前的信息熵——分割后的信息熵。 表示向纯度方向迈出的“步骤”。

1.3.1ID3算法

说明:在根节点上计算信息熵,然后按属性顺序划分,计算该节点的信息熵。 使用根节点的信息熵属性节点的信息增益=信息增益,根据信息增益按降序排列。 排在前面的是首先分割属性,然后依次类推,从而得到决策树的形状,即如何“长”。

如果听不懂,请看我分享的例子,结合我说的话,看看包:

但是,信息增益有问题。 可取值多的属性有自己的喜好。 例如,假设将“编号”作为属性。 这引出了另一个算法C4.5。

1.3.2C4.5

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

图像

属性a可取的值越多,即v越大,IV(a )的值通常越大。 信息增益比的本质:是在信息增益的基础上乘以惩罚参数。 特征个数较多时,惩罚参数较小;特征个数较少时,惩罚参数较大。 但是,有一个缺点:

缺点:信息增益比偏差值少的特征。

使用信息增益比:基于以上缺点,从当前候选特征中找出信息增益高于平均的特征,并从这些特征中选择信息增益率最高的特征,而不是直接选择信息增益率最大的特征。

1.3.3CART算法

数学家真聪明,想出了另一个表示纯度的方法。 基尼指数(讨厌的公式) :

图像

指示在样本集合中随机选择的样本被错误分类的概率。 例如,现在一个袋子里有几个三色的球,伸手取出两个球,你就知道颜色不同的概率了。 Gini(d )越小,数据集d的纯度越高。

举一个例子

假设现在有特色的“学历”。 这个特征有“系”、“硕士”、“博士”三个特征。

“使用时

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

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

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

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

对于上述的每一种划分,都可以计算出基于 划分特征= 某个特征值 将样本集合D划分为两个子集的纯度:

image

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

然后从所有的可能划分的Gini(D,Ai)中找出Gini指数最小的划分,这个划分的划分点,便是使用特征A对样本集合D进行划分的最佳划分点。到此就可以长成一棵“大树”了。

1.3.4三种不同的决策树

ID3:取值多的属性,更容易使数据更纯,其信息增益更大。

训练得到的是一棵庞大且深度浅的树:不合理。

C4.5:采用信息增益率替代信息增益。

CART:以基尼系数替代熵,最小化不纯度,而不是最大化信息增益。

1.4随机森林(Random Forest)

Bagging思想

Bagging是bootstrap aggregating。思想就是从总体样本当中随机取一部分样本进行训练,通过多次这样的结果,进行投票获取平均值作为结果输出,这就极大可能的避免了不好的样本数据,从而提高准确度。因为有些是不好的样本,相当于噪声,模型学入噪声后会使准确度不高。

举个例子:

假设有1000个样本,如果按照以前的思维,是直接把这1000个样本拿来训练,但现在不一样,先抽取800个样本来进行训练,假如噪声点是这800个样本以外的样本点,就很有效的避开了。重复以上操作,提高模型输出的平均值。

随机森林

RandomForest(随机森林)是一种基于树模型的Bagging的优化版本,一棵树的生成肯定还是不如多棵树,因此就有了随机森林,解决决策树泛化能力弱的特点。(可以理解成三个臭皮匠顶过zzdxq)

而同一批数据,用同样的算法只能产生一棵树,这时Bagging策略可以帮助我们产生不同的数据集。Bagging策略来源于bootstrap aggregation:从样本集(假设样本集N个数据点)中重采样选出Nb个样本(有放回的采样,样本数据点个数仍然不变为N),在所有样本上,对这n个样本建立分类器(ID3C4.5CARTSVMLOGISTIC),重复以上两步m次,获得m个分类器,最后根据这m个分类器的投票结果,决定数据属于哪一类。

总的来说就是随机选择样本数,随机选取特征,随机选择分类器,建立多颗这样的决策树,然后通过这几课决策树来投票,决定数据属于哪一类(投票机制有一票否决制、少数服从多数、加权多数)

优点:

在当前的很多数据集上,相对其他算法有着很大的优势,表现良好。

它能够处理很高维度(feature很多)的数据,并且不用做特征选择(因为特征子集是随机选择的)。

在训练完后,它能够给出哪些feature比较重要。

训练速度快,容易做成并行化方法(训练时树与树之间是相互独立的)。

在训练过程中,能够检测到feature间的互相影响。

对于不平衡的数据集来说,它可以平衡误差。

如果有很大一部分的特征遗失,仍可以维持准确度。

缺点:

随机森林已经被证明在某些噪音较大的分类或回归问题上会过拟合。

对于有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。