决策树算法梳理

  1. 信息论基础
    熵、联合熵、条件熵、信息增益、基尼不纯度
    熵:熵的本质是一个系统“内在的混乱程度”
    在这里插入图片描述
    联合熵:联合熵是一集变量之间不确定性的衡量手段。

条件熵:
在这里插入图片描述
信息增益:

在这里插入图片描述
基尼不纯度:基尼不纯度,是指将来自集合中的某种结果随机应用在集合中,某一数据项的预期误差率。是在进行决策树编程 的时候,对于混杂程度的预测中,一种度量方式。其公式为:IG(f)=∑i=1mfi(1−fi)=∑i=1mfi−∑i=1mf2i=1−∑i=1mf2i

2.决策树算法(ID3、C4.5、CART分类树)原理及应用场景
ID3:
ID3算法的核心思想即在决策树的各个节点上使用信息增益选择特征。从根节点开始,计算所有特征的信息增益,选择信息增益最大的特征作为节点特征,再根据该特征的取值建立子节点,对子节点递归调用上述过程
输入:训练数据集D,特征A,阈值beta :
输出:决策树T

1)若D中所有实例属于同一类Ck则T为单节点树,并将Ck作为该节点的类标记,返回T
2)若A为空集,则通过统计D中实例数最大的类作为该节点类标记(即对于某一节点而言,没有其它特征可以进行分辨了,则对将该节点的类设置为分到该节点数据最多属于的类中),返回T
3)否则计算A中各特征对D的信息增益,选择信息增益最大的特征 Ag :
在这里插入图片描述
信息增益:g(D,A)=H(D)−H(D|A)
4)若Ag的信息增益小于阈值,则将T作为单节点树,将D中实例数最大的类作为该节点的标记
5)否则,对Ag每一个可能值 ai 将D划分为若干非空子集,将子集中实例数最大的类作为标记,构建子节点,返回树T
6)对第i个子节点,以(5)中的子集作为训练集,A-Ag
作为特征集,递归调用(1)~(5),构建决策树

C4.5:
信息增益与训练数据集D关于特征A的值的熵之比:
gr(D,A)=g(D,A)HA(D)
gr(D,A)=g(D,A)HA(D)

其中:
HA(D)=∑|Di||D|log(|Di||D|)
HA(D)=∑|Di||D|log(|Di||D|)

C4.5算法即是将ID3算法中选择特征的标准用信息增益比代替

CART分类树:
CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支。这样的决策树等价于递归地二分每个特征,将输入空间即特征空间划分为有限个单元,并在这些单元上确定预测的概率分布,也就是在输入给定的条件下输出的条件概率分布。

CART算法由以下两步组成:
决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大;
决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时损失函数最小作为剪枝的标准。
CART决策树的生成就是递归地构建二叉决策树的过程。CART决策树既可以用于分类也可以用于回归。本文我们仅讨论用于分类的CART。对分类树而言,CART用Gini系数最小化准则来进行特征选择,生成二叉树。

CART生成算法如下:
输入:训练数据集D,停止计算的条件:
输出:CART决策树

根据训练数据集,从根结点开始,递归地对每个结点进行以下操作,构建二叉决策树:
设结点的训练数据集为D,计算现有特征对该数据集的Gini系数。此时,对每一个特征A,对其可能取的每个值a,根据样本点对A=a的测试为“是”或 “否”将D分割成D1和D2两部分,计算A=a时的Gini系数。
在所有可能的特征A以及它们所有可能的切分点a中,选择Gini系数最小的特征及其对应的切分点作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
对两个子结点递归地调用步骤l~2,直至满足停止条件。
生成CART决策树。
算法停止计算的条件是结点中的样本个数小于预定阈值,或样本集的Gini系数小于预定阈值(样本基本属于同一类),或者没有更多特征。

3.回归树原理

4.决策树防止过拟合手段

产生原因1:样本问题
(1)样本里的噪音数据干扰过大,大到模型过分记住了噪音特征,反而忽略了真实的输入输出间的关系;(什么是噪音数据?)
(2)样本抽取错误,包括(但不限于)样本数量太少,抽样方法错误,抽样时没有足够正确考虑业务场景或业务特点,等等导致抽出的样本数据不能有效足够代表业务逻辑或业务场景;
(3)建模时使用了样本中太多无关的输入变量。
针对原因1的解决方法:
合理、有效地抽样,用相对能够反映业务逻辑的训练集去产生决策树;

原因2:构建决策树的方法问题
在决策树模型搭建中,我们使用的算法对于决策树的生长没有合理的限制和修剪的话,决策树的自由生长有可能每片叶子里只包含单纯的事件数据或非事件数据,可以想象,这种决策树当然可以完美匹配(拟合)训练数据,但是一旦应用到新的业务真实数据时,效果是一塌糊涂。
上面的原因都是现象,但是其本质只有一个,那就是“业务逻辑理解错误造成的”,无论是抽样,还是噪音,还是决策树等等,如果我们对于业务背景和业务知识非常了解,非常透彻的话,一定是可以避免绝大多数过拟合现象产生的。因为在模型从确定需求,到思路讨论,到搭建,到业务应用验证,各个环节都是可以用业务敏感来防止过拟合于未然的。
针对原因2的解决方法(主要):
剪枝:提前停止树的增长或者对已经生成的树按照一定的规则进行后剪枝。

5.模型评估
分类树模型:采用通用的分类模型评估指标
Accuracy
Precision
Recall
F1-score
ROC曲线和AUC
PR曲线

回归树模型:采用通用的回归模型评估指标
MSE
MAE
R^2

6.sklearns参数详解
criterion
默认基尼系数,写’entropy’使用信息增益。
一般,数据维度大、噪音大的时候,用基尼系数;感觉模型拟合程度不够的时候,用信息熵。

random_state
整数,随机数种子,确定之后不管运行多少次这个树不会变。

splitter
默认"best",可以改成"random",树就会更大。

一开始就设置random_state和splitter,防止模型过拟合。

以下参数用于剪枝,防止过拟合的关键:
max_depth
最大深度,最常用的参数,适用于高纬度样本量较少。一般可以从3开始试。
min_samples_split
一个节点想再往下分,需要包含的最少样本数。
整数,就是最小数目;浮点数,分完每个节点样本数的最小比例。

属性
feature_importances_
每个特征的重要性。
方法
xx.apply()
返回每条数据最终落在哪个叶子节点。
xx.fit()
返回建好的模型对象。
xx.predict()
返回每条数据预测的标签。
xx.score()
返回accuracy值

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
优化python决策树可以通过以下几个方面进行: 1. 修剪树:决策树可能会过度拟合训练数据,导致无法很好地推广到新数据上。为了避免过度拟合,可以通过设置叶节点所需的最小样本数或限制树的最大深度等机制来修剪树。这样可以限制树的复杂度,提高泛化能力。 2. 使用集成算法决策树的一个缺点是它对数据中微小变化非常敏感,可能会导致生成完全不同的树。为了解决这个问题,可以使用集成算法,如随机森林。随机森林通过对特征和样本的随机采样来生成多个决策树,并将它们组合起来进行预测。这种集成方法可以降低决策树的方差,提高稳定性。 3. 平衡数据集:如果数据中某些类占主导地位,决策树可能会偏向于主导类。为了避免这种偏差,建议在拟合决策树之前平衡数据集。可以使用技术如欠采样、过采样或生成合成样本等方法来平衡数据集。 4. 使用适当的剪枝策略:剪枝是优化决策树算法的关键。预剪枝和后剪枝是常用的剪枝策略。预剪枝在决策树生成过程中,在每个节点划分前先估计其划分后的泛化性能,如果不能提升,则停止划分,将当前节点标记为叶节点。后剪枝则是在生成决策树后,自下而上对非叶节点进行考察,如果将该节点标记为叶节点可以提升泛化性能,则进行修剪。 5. 使用合适的参数:在使用Python中的决策树库(如scikit-learn)时,可以根据具体问题调整决策树的参数。例如,可以设置树的最大深度、节点分裂的最小样本数、节点分裂的标准(如基尼系数或信息增益)等参数来优化决策树的性能。 6. 可视化决策树:使用Python可以使用绘图库(如matplotlib)来绘制决策树,这可以帮助我们更好地理解决策树的结构和规则,从而进行进一步的优化。 通过以上方法和策略,可以优化Python决策树,提高其性能和泛化能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [决策树算法梳理以及python实现](https://blog.csdn.net/laojie4124/article/details/90316926)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值