Python算法总结(三)决策树分类(附手写python实现代码)

本文详细介绍了决策树分类算法,包括ID3、C4.5和CART的区别,算法原理,特点及流程。着重讨论了C4.5算法,其优势在于处理连续型变量和采用增益率作为分支策略,并引入了剪枝策略。还提供了手写C4.5算法的代码,但未涵盖剪枝和连续型特征处理。
摘要由CSDN通过智能技术生成

(决策树既可以做分类也可以做回归,本篇侧重决策树分类)

一、算法类型

有监督的分类算法

二、算法原理

决策树本质上是一种图结构,由根节点、内部节点、叶节点组成。根节点&内部节点是决定性特征feature,用于分支决策;叶节点用于分类决策。决策树天生过拟合,为提高模型的精度,减少模型的复杂度,往往需要剪枝处理。
算法要解决三个核心问题,如何分支?如何剪枝?如何给出类别判定?为回答核心问题,算法给出三个核心策略,一是分支策略,二是剪枝策略,三是分类策略。

关于分支策略的几个重要指标

  • 信息量(不纯度)衡量方法一:Entropy
    在这里插入图片描述
    注:ID3算法、C4.5算法用该度量指标。
  • 信息量(不纯度)衡量方法二:Gini
    在这里插入图片描述
    注:CART算法用该度量指标。
  • I(child) 子节点总不纯度
    在这里插入图片描述
  • 分支的特征选择策略一:Information Gain 信息增益
    在这里插入图片描述
    选取IG值最大的特征进行分支
    注:ID3算法用该度量指标。
  • Information Value 分支度
    在这里插入图片描述
  • 分支的特征选择策略二:Gain Ratio 增益率
    在这里插入图片描述
    选取GR值最大的特征进行分支
    注:C4.5算法、CART算法用该度量指标。

三、算法演进(ID3 vs C4.5 vs CART)

ID3算法的局限性:
1、不能处理连续型变量
2、分支度越高的离散变量往往子节点的总信息熵会更小
3、对缺失值敏感,需提前对处理缺失值问题
4、没有剪枝设置,容易过拟合

C4.5算法的优势:
1、连续型变量特征的处理。(该方法辅助用于连续型变量分箱)
2、改用Gain Ratio作为分支策略的指标
3、提出了剪枝策略

CART算法说明:
1、CART算法构建决策树的流程与C4.5算法一致
2、CART算法构建的决策树是二元分类回归树
3、CART算法的减枝需用验证集配合进行

四、算法特点

  • 非参数方法
    不要求任何先验假设,不假定类和其他属性服从一定的概率分布
  • 执行效率高
    决策树是一种空间搜索方法,也快速建立模型,并快速对未知样本分类
  • 异常值忍耐度高
    异常值在剪枝过程中被裁剪,对建模基本没有影响
  • 模型入口极宽
    模型可同时处理离散型变量和连续型变量,且不需要对异常值进行数据清洗
  • 可解释性强
    可输出特征的重要性,在实际工作中有重要指导意义
  • 集成性强
    可集成为随机森林,解决系统性问题

五、算法流程

构建决策树的流程
第一步:准备已处理好的已知样本集Data(N个样本,M个特征,1列标签);
第二步:计算Data的总信息量,总样本集是父节点;(注:父节点与子节点是相对概念,不是绝对概念)
第三步:计算每个特征的总信息量,进而计算每个特征的信息增益;
第四步:选取信息增益量最大的特征进行分支,分支后的sub_Data子样本集是子节点(至少2个)。若子样本集的信息量为零,则停止分支,该节点即为叶节点。若子样本集的信息量不为零,则可继续分支。分支参考第二、三、四步,逐步迭代,最终构建一颗决策树。

剪枝的流程
(遗留问题:如何实现剪枝?)
预测新样本new-sample标签的流程
(遗留问题:如何预测新样本的标签?)

六、手写C4.5算法代码

-暂不涉及剪枝策略
-暂不涉及连续型特征处理
-暂不涉及新样本的标签预测

def i_entropy(dataset):
    '''
    函数功能:
    计算数据集的信息量(不纯度)
    参数说明:
    dataset:带有标签的数据集,最后一列是标签,df格式或array格式
    return:
    entropy:用entropy方法计算数据集的信息量
    '''
    N,M=dataset.shape
    target_names_counts=dataset.iloc[:,-1].value_counts
  • 2
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值