决策树

爱被打了一巴掌 2022-12-29 04:46 95阅读 0赞

决策树

  • 认识决策树
  • 决策树分类原理详解
    • 原理
    • 信息论基础
    • 信息適的定义
    • 决策树的划分依据之— —— 信息增益
  • 决策树API
  • 决策树预测鸢尾花数据集
  • 决策树可视化
    • 保存树的结构到dot文件
    • 网站显示结构
  • 决策树总结

认识决策树

决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-else结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法
怎么理解这句话?通过一个对话例子
比如:你母亲要给你介绍男朋友,是这么来对话的:

  • 女儿:多大年纪了?
  • 母亲:26。
  • 女儿:长的帅不帅?
  • 母亲:挺帅的。
  • 女儿:收入高不?
  • 母亲:不算很高,中等情况。
  • 女儿:是公务员不?
  • 母亲:是,在税务局上班呢。
  • 女儿:那好,我去见见。

想一想这个女生为什么把年龄放在最上面判断!!!!!!!!!!!!!!

**决策树的思想:**如何高效的进行决策?——特征的先后顺序

那么如何确定特效的先后顺序呢?

决策树分类原理详解

原理

信息煽、信息增益等
需要用到信息论的知识!!!

信息论基础

  • 信息

    • 消除随机不确定性的的东西
    • 例如:小明的年龄

      • ”我今年18岁“ —— 信息
      • ”我明年19岁“ —— 不是信息
  • 信息的衡量 —— 信息量 —— 信息熵

信息適的定义

  • H的专业术语称之为信息炯,单位为比特(bit)。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-asCysUwX-1608431730837)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20201219232312280.png)]

决策树的划分依据之— —— 信息增益

  • 定义与公式

特征A对训练数据集D的信息增益g(D,A),定义为集合D的信息煽H(D)与特征A给定条件下D的信息条件煽H(D|A)之差

公式为:g(D,A) = H(D) - H(D|A)

信息熵计算:

img

条件熵的计算:

img

  • Ck 表示某个样本类别的样本数
  • 信息增益表示得知特征X的信息而息的不确定性减少的程度使得类Y的信息熵减少程度

当然决策树的原理不止信息增益这一种,还有其他方法。但是原理都类似,我们就不去举例计算。

  • ID3

    • 信息增益 最大的准则
  • C4.5

  • 信息增益比 最大的准则

  • CART

  • 分类树:基尼系数 最小的准则在sklearn中可以选择划分的默认原则

  • 优势:划分更加细致(从后面例子的树显示来理解)

决策树API

  • class sklearn.tree.DecisionTreeClassifier(criterion='gini', max_depth=None,random_state=None)

    • 决策树分类器
    • criterion:决策树的划分依据,默认是gini系数,也可以选择信息增益的熵entropy
    • max_depth:树的深度大小,不设置的话数据量过大,使得决策树划分太细,泛化能力差,可能训练数据效果好,测试数据就不好了
    • random_state:随机数种子

决策树预测鸢尾花数据集

  1. from sklearn.datasets import load_iris
  2. from sklearn.model_selection import train_test_split
  3. from sklearn.tree import DecisionTreeClassifier
  4. if __name__ == '__main__':
  5. # 获取数据
  6. iris = load_iris()
  7. # 划分数据集
  8. x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=4)
  9. # 决策树 算法预估器
  10. estimator = DecisionTreeClassifier(criterion='entropy')
  11. estimator.fit(x_train, y_train)
  12. # 模型评估
  13. # 方法一:直接对比真实值和预测值
  14. y_predict = estimator.predict(x_test)
  15. print('y_predict:\n', y_predict)
  16. print('直接对比真实值和预测值:\n', y_test == y_predict)
  17. # 方法二:计算准确率
  18. score = estimator.score(x_test, y_test)
  19. print('准确率:\n', score)

决策树可视化

保存树的结构到dot文件

  • sklearn.tree.export_graphviz()该函数能够导出DOT格式

    • tree.export_graphviz(estimator,out_file='tree.dot',feature_names=[])

dot 文件当中内容如下:

  1. digraph Tree {
  2. node [shape=box] ;
  3. 0 [label="petal width (cm) <= 0.8\nentropy = 1.576\nsamples = 112\nvalue = [32, 42, 38]"] ;
  4. 1 [label="entropy = 0.0\nsamples = 32\nvalue = [32, 0, 0]"] ;
  5. 0 -> 1 [labeldistance=2.5, labelangle=45, headlabel="True"] ;
  6. 2 [label="petal width (cm) <= 1.75\nentropy = 0.998\nsamples = 80\nvalue = [0, 42, 38]"] ;
  7. 0 -> 2 [labeldistance=2.5, labelangle=-45, headlabel="False"] ;
  8. 3 [label="petal length (cm) <= 4.95\nentropy = 0.433\nsamples = 45\nvalue = [0, 41, 4]"] ;
  9. 2 -> 3 ;
  10. 4 [label="petal width (cm) <= 1.65\nentropy = 0.165\nsamples = 41\nvalue = [0, 40, 1]"] ;
  11. 3 -> 4 ;
  12. 5 [label="entropy = 0.0\nsamples = 40\nvalue = [0, 40, 0]"] ;
  13. 4 -> 5 ;
  14. 6 [label="entropy = 0.0\nsamples = 1\nvalue = [0, 0, 1]"] ;
  15. 4 -> 6 ;
  16. 7 [label="petal width (cm) <= 1.65\nentropy = 0.811\nsamples = 4\nvalue = [0, 1, 3]"] ;
  17. 3 -> 7 ;
  18. 8 [label="entropy = 0.0\nsamples = 3\nvalue = [0, 0, 3]"] ;
  19. 7 -> 8 ;
  20. 9 [label="entropy = 0.0\nsamples = 1\nvalue = [0, 1, 0]"] ;
  21. 7 -> 9 ;
  22. 10 [label="petal length (cm) <= 4.85\nentropy = 0.187\nsamples = 35\nvalue = [0, 1, 34]"] ;
  23. 2 -> 10 ;
  24. 11 [label="sepal length (cm) <= 5.95\nentropy = 0.918\nsamples = 3\nvalue = [0, 1, 2]"] ;
  25. 10 -> 11 ;
  26. 12 [label="entropy = 0.0\nsamples = 1\nvalue = [0, 1, 0]"] ;
  27. 11 -> 12 ;
  28. 13 [label="entropy = 0.0\nsamples = 2\nvalue = [0, 0, 2]"] ;
  29. 11 -> 13 ;
  30. 14 [label="entropy = 0.0\nsamples = 32\nvalue = [0, 0, 32]"] ;
  31. 10 -> 14 ;
  32. }

网站显示结构

http://webgraphviz.com/

决策树总结

  • 优点:

    • 简单的理解和解释,树木可视化。
  • 缺点:

    • 决策树学习者可以创建不能很好地推广数据的过于复杂的树,这被称为过拟合
  • 改进:

    • 减枝cart算法(决策树API当中已经实现,随机森林参数调优有相关介绍)。
    • 随机森林

注:企业重要决策,由于决策树很好的分析能力,在决策过程应用较多, 可以选择特征

发表评论

表情:
评论列表 (有 0 条评论,95人围观)

还没有评论,来说两句吧...

相关阅读

    相关 决策

    1 决策树学习是以实例为基础的归纳学习算法,是应用最广泛的逻辑方法。 2 典型的决策树学习系统采用自顶向下的方法,在部分搜索空间中搜索解决方案。它可以确保求出一个简单的决策树

    相关 决策

    决策树是基于树结构来进行决策,这恰是人类在面临决策问题时一种很自然的处理机制。例如,我们要对“这是好瓜吗?”这样的问题进行决策时,通常会进行一系列的判断或“子决策”:我们先看“

    相关 决策

    一、 决策树简介 决策树是一种特殊的树形结构,一般由节点和有向边组成。其中,节点表示特征、属性或者一个类。而有向边包含有判断条件。如图所示,决策树从根节点开始延伸,经过不

    相关 决策

    决策树:决策树是一个树形结构,每个非叶节点表示一个特征树形的测试,每个分支代表这个特征属性在某个值域上的输出,而叶节点存放一个类别。 使用决策树进行决策的原理就是: 从根

    相关 决策

    1 认识决策树     如何高效的进行决策?     特征的先后顺序(哪个特征先看,哪个特征后看) 2 决策树分类原理详解(看哪个特征能筛掉更多的数据,尽可能通过少

    相关 决策

    决策树 声明 本文是来自网络文档和书本(周老师)的结合。 概述 决策树(Decision Tree)是在已知各种情况发生概率的[基础][Link 1]上,通

    相关 决策

    决策树对实例进行分类的树形结构,由节点和有向边组成。其实很像平时画的流程图。 学习决策树之前要搞懂几个概念: 熵:表示随机变量不确定性的度量,定义:H(p)=-![1409