大家好,我是王老狮,对于我们这种奔三的人,最头疼的就是家里催婚的问题,特别逢年过节的时候都会被家里催着去相亲,于是乎,就有了如下的场景
那么女儿到底要不要答应呢?该如何来进行决策?
可见,做IT并且C站经常发文章的人,会被女儿认为靠谱所以答应[狗头]
在现实生活中,我们会遇到各种选择,不管是选择男女朋友,还是买水果都是经过以往的经验进行判断,把判断逻辑整理成一个结构图,就是一个树状结构,这就是决策树。
决策树的工作原理决策树基本上就是把我们以前的经验总结出来。比如提供一个相亲的数据集。如果我们要不要出去相亲,一般会根据“经济条件”、“身高”、“长相”、“其他优点”这几个条件来判断,最后得到结果:见还是不见,这个图就是一棵典型的决策树。
我们在做决策树的时候,一般会经历两个阶段:构造和剪枝。
构造就是生成一棵完整的决策树。简单来说,构造的过程就是选择什么属性作为节点的过程。
根节点:就是树的最顶端,最开始的那个节点。在上图中,“经济条件”就是一个根节点;
内部节点:就是树中间的那些节点,比如说“身高”、“长相”、“其他优点”;
叶节点:就是树最底部的节点,也就是决策结果。
因此,如何构造一棵树就是解决以下三个问题的过程。
剪枝就是给决策树瘦身,因为如果所有的条件全部都计算一遍,计算量较大,效率较低。这一步实现的目标就是,不需要太多的判断,同样可以得到不错的结果。如下图就是剪枝要达到的比较好的效果。之所以这么做,也是为了防止“过拟合”或者欠拟合"现象的发生。
所谓过拟合(over-fitting)其实就是所建的机器学习模型或者是深度学习模型在训练样本中表现得过于优越,导致在验证数据集以及测试数据集中表现不佳。过拟合就是学到了很多没必要的特征,比如你说的长得像猫的狗,和长得像狗的猫,其实这只是特例,但神经网络为了更好的降低Loss,就只能被迫学习这些特征用来区分猫和狗。但是学习的太过了,(举个例子:一个男人穿着蓝色的衣服,神经网络可能把是否穿蓝色衣服作为区分男人女人的特征,这就是过拟合)遇到了新样本这些错误的特征就没有什么用了。所以过拟合就是表现为训练的时候效果很好(因为神经网络已经学到了很多有用没用的特征),但是在测试样本上的效果就很差(有的特征完全没用啊,完全就是为了降低loss而得出来的特征)。至于为什么会产生过拟合,一般是因为参数过多,为了降低loss(神经网络的任务就是为了最小化loss),后者样本过少。总之就是参数/样本的比太大。
PS:Loss:损失函数。通常机器学习每一个算法中都会有一个目标函数,算法的求解过程是通过对这个目标函数优化的过程。在分类或者回归问题中,通常使用损失函数(代价函数)作为其目标函数。损失函数用来评价模型的预测值和真实值不一样的程度,损失函数越好,通常模型的性能越好。
所谓欠拟合呢(under-fitting)?相对过拟合欠拟合还是比较容易理解。还是拿刚才的模型来说,可能训练样本被提取的特征比较少,导致训练出来的模型不能很好地匹配,表现得很差,甚至样本本身都无法高效的识别。
剪枝可以分为“预剪枝”(Pre-Pruning)和“后剪枝”(Post-Pruning)。
预剪枝是在决策树构造时就进行剪枝。方法是在构造的过程中对节点进行评估,如果对某个节点进行划分,在验证集中不能带来准确性的提升,那么对这个节点进行划分就没有意义,这时就会把当前节点作为叶节点,不对其进行划分。
后剪枝就是在生成决策树之后再进行剪枝,通常会从决策树的叶节点开始,逐层向上对每个节点进行评估。如果剪掉这个节点子树,与保留该节点子树在分类准确性上差别不大,或者剪掉该节点子树,能在验证集中带来准确性的提升,那么就可以把该节点子树进行剪枝。方法是:用这个节点子树的叶子节点来替代该节点,类标记为这个节点子树中最频繁的那个类。
本章给大家介绍下决策树的基本概念,下一篇给大家介绍下决策树的具体算法实现。