• 分析问题难以决策,如何用一颗树来解决?


    分析问题难以决策,如何用一颗树来解决?

    1.什么是决策树

    大家好,我是王老狮,对于我们这种奔三的人,最头疼的就是家里催婚的问题,特别逢年过节的时候都会被家里催着去相亲,于是乎,就有了如下的场景

    • 妈妈:女儿,给你介绍个男朋友你要不要见一见?
    • 女儿:长的帅不帅?
    • 妈妈:挺帅的。
    • 女儿:收入高不高?
    • 妈妈:还不错,年薪百万。
    • 女儿:有没有房子
    • 妈妈:城里有一套

    那么女儿到底要不要答应呢?该如何来进行决策?

    • 女儿:做什么工作的?
    • 妈妈:IT 男,经常在C站发文章。
    • 女儿:好,我觉得在C站发文章的人还是很靠谱的,直接结婚吧。

    可见,做IT并且C站经常发文章的人,会被女儿认为靠谱所以答应[狗头]

    在现实生活中,我们会遇到各种选择,不管是选择男女朋友,还是买水果都是经过以往的经验进行判断,把判断逻辑整理成一个结构图,就是一个树状结构,这就是决策树。

    在这里插入图片描述

    决策树的工作原理决策树基本上就是把我们以前的经验总结出来。比如提供一个相亲的数据集。如果我们要不要出去相亲,一般会根据“经济条件”、“身高”、“长相”、“其他优点”这几个条件来判断,最后得到结果:见还是不见,这个图就是一棵典型的决策树。

    我们在做决策树的时候,一般会经历两个阶段:构造和剪枝

    2.树的构造

    构造就是生成一棵完整的决策树。简单来说,构造的过程就是选择什么属性作为节点的过程。

    构造的三个节点

    在这里插入图片描述

    根节点:就是树的最顶端,最开始的那个节点。在上图中,“经济条件”就是一个根节点;

    内部节点:就是树中间的那些节点,比如说“身高”、“长相”、“其他优点”;

    叶节点:就是树最底部的节点,也就是决策结果。

    因此,如何构造一棵树就是解决以下三个问题的过程。

    • 选择哪个属性作为根节点;
    • 选择哪些属性作为子节点;
    • 什么时候停止并得到目标状态,即叶节点。

    3.树的剪枝

    剪枝就是给决策树瘦身,因为如果所有的条件全部都计算一遍,计算量较大,效率较低。这一步实现的目标就是,不需要太多的判断,同样可以得到不错的结果。如下图就是剪枝要达到的比较好的效果。之所以这么做,也是为了防止“过拟合”或者欠拟合"现象的发生。
    在这里插入图片描述

    过拟合

    所谓过拟合(over-fitting)其实就是所建的机器学习模型或者是深度学习模型在训练样本中表现得过于优越导致在验证数据集以及测试数据集中表现不佳。过拟合就是学到了很多没必要的特征,比如你说的长得像猫的狗,和长得像狗的猫,其实这只是特例,但神经网络为了更好的降低Loss,就只能被迫学习这些特征用来区分猫和狗。但是学习的太过了,(举个例子:一个男人穿着蓝色的衣服,神经网络可能把是否穿蓝色衣服作为区分男人女人的特征,这就是过拟合)遇到了新样本这些错误的特征就没有什么用了。所以过拟合就是表现为训练的时候效果很好(因为神经网络已经学到了很多有用没用的特征),但是在测试样本上的效果就很差(有的特征完全没用啊,完全就是为了降低loss而得出来的特征)。至于为什么会产生过拟合,一般是因为参数过多,为了降低loss(神经网络的任务就是为了最小化loss),后者样本过少。总之就是参数/样本的比太大。

    在这里插入图片描述

    PS:Loss:损失函数。通常机器学习每一个算法中都会有一个目标函数,算法的求解过程是通过对这个目标函数优化的过程。在分类或者回归问题中,通常使用损失函数(代价函数)作为其目标函数。损失函数用来评价模型的预测值和真实值不一样的程度,损失函数越好,通常模型的性能越好。
    在这里插入图片描述

    欠拟合(under-fitting)

    所谓欠拟合呢(under-fitting)?相对过拟合欠拟合还是比较容易理解。还是拿刚才的模型来说,可能训练样本被提取的特征比较少,导致训练出来的模型不能很好地匹配,表现得很差,甚至样本本身都无法高效的识别。

    剪枝的方法

    剪枝可以分为“预剪枝”(Pre-Pruning)和“后剪枝”(Post-Pruning)。

    预剪枝是在决策树构造时就进行剪枝。方法是在构造的过程中对节点进行评估,如果对某个节点进行划分,在验证集中不能带来准确性的提升,那么对这个节点进行划分就没有意义,这时就会把当前节点作为叶节点,不对其进行划分。

    后剪枝就是在生成决策树之后再进行剪枝,通常会从决策树的叶节点开始,逐层向上对每个节点进行评估。如果剪掉这个节点子树,与保留该节点子树在分类准确性上差别不大,或者剪掉该节点子树,能在验证集中带来准确性的提升,那么就可以把该节点子树进行剪枝。方法是:用这个节点子树的叶子节点来替代该节点,类标记为这个节点子树中最频繁的那个类。

    本章给大家介绍下决策树的基本概念,下一篇给大家介绍下决策树的具体算法实现。

  • 相关阅读:
    LeetCode 110平衡二叉树 257.二叉树的所有路径 404左叶子之和
    Python 数据可视化:Seaborn 库的使用
    修完这个 Bug 后,MySQL 性能提升了 300%
    抽象工厂模式
    【Linux系列】计算机系统中的架构与发行版:理解与区分
    LinkedList与链表
    sql语句怎样实现求在列中选择某些相同名称的行,对这些相同名称行的数据进行累加.
    画流程图用什么软件好?安利这几款
    Stm32_标准库_16_串口&蓝牙模块_手机与蓝牙模块通信_手机传入信息能对芯片时间日期进行更改
    算法训练营第一天 704 .二分查找、27.移除元素
  • 原文地址:https://blog.csdn.net/b379685397/article/details/127106966