决策树 订阅
决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。由于这种决策分支画成图形很像一棵树的枝干,故称决策树。在机器学习中,决策树是一个预测模型,他代表的是对象属性与对象值之间的一种映射关系。Entropy = 系统的凌乱程度,使用算法ID3, C4.5和C5.0生成树算法使用熵。这一度量是基于信息学理论中熵的概念。决策树是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别。分类树(决策树)是一种十分常用的分类方法。他是一种监督学习,所谓监督学习就是给定一堆样本,每个样本都有一组属性和一个类别,这些类别是事先确定的,那么通过学习得到一个分类器,这个分类器能够对新出现的对象给出正确的分类。这样的机器学习就被称之为监督学习。 展开全文
决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。由于这种决策分支画成图形很像一棵树的枝干,故称决策树。在机器学习中,决策树是一个预测模型,他代表的是对象属性与对象值之间的一种映射关系。Entropy = 系统的凌乱程度,使用算法ID3, C4.5和C5.0生成树算法使用熵。这一度量是基于信息学理论中熵的概念。决策树是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别。分类树(决策树)是一种十分常用的分类方法。他是一种监督学习,所谓监督学习就是给定一堆样本,每个样本都有一组属性和一个类别,这些类别是事先确定的,那么通过学习得到一个分类器,这个分类器能够对新出现的对象给出正确的分类。这样的机器学习就被称之为监督学习。
信息
外文名
Decision Tree
中文名
决策树
决策树组成
□——决策点,是对几种可能方案的选择,即最后选择的最佳方案。如果决策属于多级决策,则决策树的中间可以有多个决策点,以决策树根部的决策点为最终决策方案。 [1]  ○——状态节点,代表备选方案的经济效果(期望值),通过各状态节点的经济效果的对比,按照一定的决策标准就可以选出最佳方案。由状态节点引出的分支称为概率枝,概率枝的数目表示可能出现的自然状态数目每个分枝上要注明该状态出现的概率。 [1]  △——结果节点,将每个方案在各种自然状态下取得的损益值标注于结果节点的右端。 [1]  【概述来源】 [2] 
收起全文
精华内容
下载资源
问答
  • 决策树 千次阅读
    2021-03-25 14:08:31

    决策树是一种常见的分类模型,在金融风控、医疗辅助诊断等诸多行业具有较为广泛的应用。决策树的核心思想是基于树结构对数据进行划分,这种思想是人类处理问题时的本能方法。例如在婚恋市场中,女方通常会先询问男方是否有房产,如果有房产再了解是否有车产,如果有车产再看是否有稳定工作……最后得出是否要深入了解的判断。

    决策树的主要优点:

    1. 具有很好的解释性,模型可以生成可以理解的规则。
    2. 可以发现特征的重要程度。
    3. 模型的计算复杂度较低

    决策树的主要缺点:

    1. 模型容易过拟合,需要采用减枝技术处理。
    2. 不能很好利用连续型特征
    3. 预测能力有限,无法达到其他强监督模型效果。
    4. 方差较高,数据分布的轻微改变很容易造成树结构完全不同

    决策树的应用

    由于决策树模型中自变量与因变量的非线性关系以及决策树简单的计算方法,使得它成为集成学习中最为广泛使用的基模型。梯度提升树(GBDT),XGBoost以及LightGBM等先进的集成模型都采用了决策树作为基模型,在广告计算、CTR预估、金融风控等领域大放异彩,成为当今与神经网络相提并论的复杂模型,更是数据挖掘比赛中的常客。

    决策树的原理:

    通过不断的划分条件来进行分类,其中决策树最关键的就是,找出那些对结果影响最大的条件(信息熵小的),放在前面,来节省查找次数。

     

    信息熵:log2以2为底

     

    排序:是否有房子、信贷情况的信息增益、是否有工作、年龄

    决策树算法选择

    ID3信息增益大的放前面,C4.5信息增益率大的放前面,CRAT选基尼系数小的放前面(CART分类树算法使用基尼系数来代替信息增益比,基尼系数代表了模型的不纯度,基尼系数越小,则不纯度越低,特征越好。这和信息增益(比)是相反的。)

    树的层级和叶子节点不能过于复杂,如果过于复杂,那么容易导致过拟合现象(过拟合:在训练的时候得分很高,但是测试的时候得分很低)。而预剪枝和后剪枝手段,都是为了防止决策树太复杂的手段。

    预剪枝:

    预剪枝就是在决策树的建立过程中不断的调节,可以调节的条件有:
    1.数的深度:如果在决策树建立过程中,发现深度超过指定的值,那么就不再分了。

    2.叶子节点个数:在决策树建立过程中,发现叶子节点的个数超过指定值,就不会再分了。
    3.叶子节点样本数:如果某个叶子节点的个数已经低于指定的值,那么就不会再分了。
    4.信息增益量/Gini系数:计算信息增益量或者Gini系数,如果信息增益量小于指定的值或者Gini系数大于指定的值,那么也不会再分了。

    以上的参数,都需要在建模的过程中,不断的调节,来达到最优。
    优点:

    预剪枝可以有效的降低过拟合现象,并且因为是在决策树建立的过程中进行调节,因此显著的减少了训练时间开销和测试时间的开销。

    缺点:

    另外因为预剪枝是通过限制一些建树的条件来实现的,这种方式容易导致(欠拟合:模型训练得不够好)的现象。
     

    后剪枝:

    后剪枝就是在决策树建立完成后再进行的,根据以下公式:

    C=gini*samples+α*叶子节点个数

    c表示损失,C越大,表示损大越多,我们要选择损失小的。
    其中的α我们是可以调节的,如果α越大,那么叶子结点个数越多的,损失越大。因此 α值越大,那么偏向叶子节点少的。α越小,那么偏向叶子节点多的。

    优点:

    后剪枝通常比预剪枝保留更多的分支,因此欠拟合风险比预剪枝要小,

    缺点:

    但是因为后剪枝是在树建立完成后再自底向上对所有非叶子节点进行逐一考察,因此训练时间开销比预剪枝要大得多。


    决策树案例-泰坦尼克号获救预测:

     

     

     

     

    重要参数详解

    https://www.cnblogs.com/juanjiang/p/11003369.html

    https://blog.csdn.net/cindy407/article/details/93300235

    1. 重要参数:criterion

       Criterion这个参数正是用来决定不纯度的计算方法的。sklearn提供了两种选择:

      1)输入”entropy“,使用信息熵(Entropy)

      2)输入”gini“,使用基尼系数(Gini Impurity)

    对于高维数据或者噪音很多的数据,信息熵很容易过拟合,基尼系数在这种情况下效果往往比较好。当然,这不是绝对的。

    参数criterion
    如何影响模型?确定不纯度的计算方法,帮忙找出最佳节点和最佳分枝,不纯度越低,决策树对训练集的拟合越好
    可能的输入有哪些?不填默认基尼系数,填写gini使用基尼系数,填写entropy使用信息增益
    怎样选取参数?通常就使用基尼系数、数据维度很大,噪音很大时使用基尼系数 维度低,数据比较清晰的时候,信息熵和基尼系数没区别 当决策树的拟合程度不够的时候,使用信息熵 两个都试试,不好就换另外一个

      到这里,决策树的基本流程其实可以简单概括如下:

     

    2. 重要参数: random_state & splitter【一般在样本量不大的时候,选择best,样本量过大,可以用random】

      splitter也是用来控制决策树中的随机选项的,有两种输入值,

      可以是best,前者是在特征的全部划分点中找到最优的划分点

              random,是在随机选择的部分划分点找到局部最优的划分点

    当你预测到你的模型会过拟合,用这两个参数来帮助你降低树建成之后过拟合的可能性

    3. 剪枝参数

      在不加限制的情况下,一棵决策树会生长到衡量不纯度的指标最优,或者没有更多的特征可用为止。这样的决策树往往会过拟合,这就是说,它会在训练集上表现很好,在测试集上却表现糟糕。我们收集的样本数据不可能和整体的状况完全一致,因此当一棵决策树对训练数据有了过于优秀的解释性,它找出的规则必然包含了训练样本中的噪声,并使它对未知数据的拟合程度不足。

      为了让决策树有更好的泛化性,我们要对决策树进行剪枝。剪枝策略对决策树的影响巨大,正确的剪枝策略是优化决策树算法的核心。sklearn为我们提供了不同的剪枝策略:

    3.1 max_depth树的最大深度【样本过多或者特征过多的情况下,可以设定一个上限,一般取10~100

      限制树的最大深度,超过设定深度的树枝全部剪掉。

      这是用得最广泛的剪枝参数,在高维度低样本量时非常有效。决策树多生长一层,对样本量的需求会增加一倍,所以限制树深度能够有效地限制过拟合。在集成算法中也非常实用。实际使用时,建议从=3开始尝试,看看拟合的效果再决定是否增加设定深度。

    3.2 min_samples_leaf叶子节点所需最少样本数

      min_samples_leaf 限定,一个节点在分枝后的每个子节点都必须包含至少min_samples_leaf个训练样本,否则分枝就不会发生,或者,分枝会朝着满足每个子节点都包含min_samples_leaf个样本的方向去发生

      一般搭配max_depth使用,在回归树中有神奇的效果,可以让模型变得更加平滑。这个参数的数量设置得太小会引起过拟合,设置得太大就会阻止模型学习数据。一般来说,建议从=5开始使用。如果叶节点中含有的样本量变化很大,建议输入浮点数作为样本量的百分比来使用。同时,这个参数可以保证每个叶子的最小尺寸,可以在回归问题中避免低方差,过拟合的叶子节点出现。对于类别不多的分类问题,=1通常就是最佳选择。

    3.3 min_samples_split

      min_samples_split限定,一个节点必须要包含至少min_samples_split个训练样本,这个节点才允许被分枝,否则分枝就不会发生。

    3.4 max_features

      一般max_depth使用,用作树的”精修“

      max_features限制分枝时考虑的特征个数,超过限制个数的特征都会被舍弃。和max_depth异曲同工,max_features是用来限制高维度数据的过拟合的剪枝参数,但其方法比较暴力,是直接限制可以使用的特征数量而强行使决策树停下的参数,在不知道决策树中的各个特征的重要性的情况下,强行设定这个参数可能会导致模型学习不足。如果希望通过降维的方式防止过拟合,建议使用PCA,ICA或者特征选择模块中的降维算法。

    3.5 min_impurity_decrease

      min_impurity_decrease限制信息增益的大小,信息增益小于设定数值的分枝不会发生。这是在0.19版本种更新的功能,在0.19版本之前时使用min_impurity_split。

    4. 确认最优的剪枝参数

      那具体怎么来确定每个参数填写什么值呢?这时候,我们就要使用确定超参数的曲线来进行判断了,继续使用我们已经训练好的决策树模型clf。超参数的学习曲线,是一条以超参数的取值为横坐标,模型的度量指标为纵坐标的曲线,它是用来衡量不同超参数取值下模型的表现的线。在我们建好的决策树里,我们的模型度量指标就是score。

      思考:

    1. 剪枝参数一定能够提升模型在测试集上的表现吗? - 调参没有绝对的答案,一切都是看数据本身。
    2. 2.这么多参数,一个个画学习曲线?

      无论如何,剪枝参数的默认值会让树无尽地生长,这些树在某些数据集上可能非常巨大,对内存的消耗。所以如果你手中的数据集非常大,你已经预测到无论如何你都是要剪枝的,那提前设定这些参数来控制树的复杂性和大小会比较好。

    5. 目标权重参数

    5.1 class_weight

      完成样本标签平衡的参数。样本不平衡是指在一组数据集中,标签的一类天生占有很大的比例。比如说,在银行要判断“一个办了信用卡的人是否会违约”,就是是vs否(1%:99%)的比例。这种分类状况下,即便模型什么也不做,全把结果预测成“否”,正确率也能有99%。因此我们要使用class_weight参数对样本标签进行一定的均衡,给少量的标签更多的权重,让模型更偏向少数类,向捕获少数类的方向建模。该参数默认None,此模式表示自动给与数据集中的所有标签相同的权重。

    class_weight: 类别权重,在样本有较大缺失值或类别偏差较大时可选,防止决策树向类别过大的样本倾斜。可设定或者balanced,后者会自动根据样本的数量分布计算权重,样本数少则权重高,与min_weight_fraction_leaf对应

    5.2 min_weight_fraction_leaf

      有了权重之后,样本量就不再是单纯地记录数目,而是受输入的权重影响了,因此这时候剪枝,就需要搭配min_ weight_fraction_leaf这个基于权重的剪枝参数来使用。另请注意,基于权重的剪枝参数(例如min_weight_ fraction_leaf)将比不知道样本权重的标准(比如min_samples_leaf)更少偏向主导类。如果样本是加权的,则使用基于权重的预修剪标准来更容易优化树结构,这确保叶节点至少包含样本权重的总和的一小部分。

    6. 重要属性和接口

      属性是在模型训练之后,能够调用查看的模型的各种性质。对决策树来说,最重要的是feature_importances_,能够查看各个特征对模型的重要性。

      sklearn中许多算法的接口都是相似的,比如说我们之前已经用到的fit和score,几乎对每个算法都可以使用。除了这两个接口之外,决策树最常用的接口还有apply和predict。apply中输入测试集返回每个测试样本所在的叶子节点的索引,predict输入测试集返回每个测试样本的标签。返回的内容一目了然并且非常容易,大家感兴趣可以自己下去试试看。

      总结:

        七个参数:Criterion,两个随机性相关的参数(random_state,splitter),四个剪枝参数(max_depth, ,min_sample_leaf,max_feature,min_impurity_decrease)

        一个属性:feature_importances_

        四个接口:fit,score,apply,predict

        有了这些知识,基本上分类树的使用大家都能够掌握了,接下来再到实例中去磨练就好。

    更多相关内容
  • 决策树算法经典优秀论文(1).zip 决策树算法经典优秀论文(1).zip 决策树算法经典优秀论文(1).zip 决策树算法经典优秀论文(1).zip 决策树算法经典优秀论文(1).zip 决策树算法经典优秀论文(1).zip 决策树算法经典优秀...
  • 西瓜3.0决策树.zip

    2021-06-19 08:52:22
    使用Python实现用于判断西瓜好坏的决策树程序。 程序详解:https://blog.csdn.net/weixin_40973138/article/details/117999991?spm=1001.2014.3001.5501
  • 主要介绍了Java实现的决策树算法,简单描述了决策树的概念、原理,并结合完整实例形式分析了java实现决策树算法的相关操作技巧,代码中备有较为详尽的注释便于理解,需要的朋友可以参考下
  • 决策树(decision tree)是一种基本的分类与回归方法,决策树模型呈树形结构,树中包含叶子节点与内部节点。本实验为利用MATLAB进行决策树算法的生成。实验数据为人民币模型,包含100,50,20,10元4种。
  • 第二步,决策树的剪枝:决策树的剪枝是对上一阶段生成的决策树进行检验、校正和修下的过程,主要是用新的样本数据集(称为测试数据集)中的数据校验决策树生成过程中产生的初步规则,将那些影响预衡准确性的分枝剪除...
  • 决策树算法原理详解

    2018-07-03 19:23:10
    决策树 信息熵(Entropy) 什么是决策树 决策树的构建过程 决策树分割属性选择 决策树量化纯度 决策树量化纯度 信息增益率计算方式 决策树的停止条件 决策树算法效果评估 决策树生成算法 ID3算法 ID3...
  • 在Python3环境下使用MNIST数据集进行决策树算法的训练,对《统计学习》中第五章内容进行复现性练习。
  • 决策树基础———wine红酒数据集实列.ipynb
  • 数据挖掘决策树算法的国内外研究现状.pdf
  • 基于C++的决策树实现

    2018-11-19 13:38:35
    基于C++的决策树实现,主要算法是西瓜书上面的ID3。将决策树封装成一个类,很容易进行移植。但可能数据结构选择上有些许不合适,大神慎重下载。
  • 决策树实验报告.doc

    2020-06-23 10:00:39
    数据挖掘课设关于决策树算法的实验报告
  • 【机器学习】【决策树】有了决策树每层节点后,如何用python绘制决策树
  • 这个数据集合是配合【决策树】中案例代码的使用 文章地址在:https://blog.csdn.net/qq_37344125/article/details/103327909
  • 我选用了一个经典数据集来展示如何构建一个决策树模型,这个数据集是——Iris 鸢尾花数据集。里面有我进行数据预处理,分析,优化参数,训练模型以及最终分析决策树的代码。
  • 功能: 1.读取文本数据建立决策树 2.可视化输出决策树 3.给定数据进行决策判断 4.计算决策命中率
  • 资源中包含完整的C4.5决策树算法Python代码和测试数据,其中有4个文件:C45.py是算法的实现代码,treePlotter.py是绘制决策树代码,PlayData.txt是样本数据,C45test.py用来构建、绘制并测试决策树,您可以运行该...
  • 本压缩包包含: 1.本决策树(DecisionTree)项目python源代码文件; 2.项目用的数据(csv格式); 3.一个普通文件,记录本项目的调试过程,用作实战参考
  • 使用Python实现决策树

    2017-06-24 19:30:13
    2017年3月16号关于决策树的资源上传错了,这一份才是决策树的Python代码实现,包含详细的中文注释,欢迎下载学习。Python版本为2.7.
  • 决策树MATLAB代码

    2017-02-21 11:20:54
    决策树 ID3
  • 决策树算法 matlab实现

    2018-05-15 16:39:30
    决策树算法matlab实现,构造分类决策树并用决策树对模式进行分类识别
  • matlab程序下的决策树与随机森林分类算法的详细案例,含doc介绍,方便学习
  • 决策树Cart算法源码

    2015-06-20 23:44:17
    这是我从网上找到的一份决策树Cart算法代码,其中在确定分枝时采用的是熵不纯度确定的方法,代码可以运行.声明这份代码不是我原创的,是从某个网页上下载下来的,不过原作者的代码中许多变量没有作详细注释,我在阅读...
  • 代码 二叉决策树分类代码代码 二叉决策树分类代码代码 二叉决策树分类代码代码 二叉决策树分类代码代码 二叉决策树分类代码代码 二叉决策树分类代码代码 二叉决策树分类代码代码 二叉决策树分类代码代码 二叉决策树...
  • 决策树C语言代码

    2015-07-13 16:02:04
    决策树C语言实现代码,建立决策树,建立决策树链接
  • 决策树代码

    2014-07-21 21:21:48
    该资源为机器学习实战第三章决策树的相关代码和数据集,望对大家有用
  • 决策树算法的java实现,包括C4.5和ID3的实现。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 172,606
精华内容 69,042
关键字:

决策树