【机器学习】决策树与分类案例分析

决策树与分类案例分析

文章目录

  • 决策树与分类案例分析
    • 1. 认识决策树
    • 2. 分类
    • 3. 决策树的划分依据
    • 4. 决策树API
    • 5. 案例:鸢尾花分类
    • 6. 决策树可视化
    • 7. 总结

1. 认识决策树

决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-else结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法。下面就来举一个例子:

在这里插入图片描述

通过这一个例子我们会有一个问题,为什么女生会把年龄放在第一个呢?这就是决策树的一个思想:高效性。

2. 分类

为了更好理解决策树是怎么分类的,我们给出一个例子:

在这里插入图片描述

现在我们有这些数据,请你根据这些数据,判断一个ID为16的人,是否能够贷款。我们现在要做的就是如何划分年龄、工作、房子、信贷这些数据。我们可以先看房子,再看工作…也可以先看工作,再看信贷…我们该如何选择来更高效的进行判断,所以我们引入信息熵、信息增益、条件熵、不确定性…

机器学习笔记02–决策树算法(手把手教你看懂)—信息熵,信息增益,增益率,基尼系数

计算过程这里就不演示了,直接出结果吧,我们以A·1,A2,A3,A4代表年龄、有工作、有自己的房子和贷款情况。最终计算的结果g(D,A1)=0.313,g(D,A2)=0.324,g(D,A3)=0.420,g(D,A4)=0.363,所以我们选择A3作为划分的第一个特征,这样我们就可以慢慢建立起一棵树。

3. 决策树的划分依据

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

  • ID3:信息增益,最大的准则
  • C4.5:信息增益比,最大的准则
  • CART
    • 分类树:基尼系数 最小的准则 再sklearn中可以选择划分的默认原则
    • 优势:划分更加细致

4. 决策树API

class sklearn.tree.DecisionTreeClassifier(criterion=‘gini’,max_depth=None,random_state=None)

  • 决策树分类器
  • criterion:默认是‘gini’系数,也可以选择信息增益的熵‘entropy’
  • max_depth:树的深度大小
  • random_state:随机数种子

5. 案例:鸢尾花分类

def decision_iris():
    """
    决策数对鸢尾花进行分类
    :return:
    """
    # 划分数据集
    iris = load_iris()
    # 划分数据集
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state= 22)
    # 决策树预估器
    estimator = DecisionTreeClassifier(criterion= "entropy")
    estimator.fit(x_train, y_train)
    # 模型评估
    y_predict = estimator.predict(x_test)
    print("y_predict:\n", y_predict)
    print("直接比对真实值和预测值:\n", y_test == y_predict)
    # 方法2:计算准确率
    score = estimator.score(x_test, y_test)
    print("准确率为:", score)
    return None
y_predict:
 [0 2 1 2 1 1 1 1 1 0 2 1 2 2 0 2 1 1 1 1 0 2 0 1 2 0 1 2 2 1 0 0 1 1 1 0 0
 0]
直接比对真实值和预测值:
 [ True  True  True  True  True  True  True False  True  True  True  True
  True  True  True  True  True  True False  True  True  True  True  True
  True  True False  True  True False  True  True  True  True  True  True
  True  True]
准确率为: 0.8947368421052632

6. 决策树可视化

保存树的结构到dot文件

sklearn.tree.export_graphviz()

  • tree.export_graphviz(estimator,out_file=“./tree.dot”,feature_name=[“,”])
export_graphviz(estimator, out_file= "./tree.dot", feature_names= iris.feature_names)

生成了一个文件之后,我们需要把里面的文本导入到一个网站里面:http://webgraphviz.com/ 导入之后就成功了。

在这里插入图片描述

7. 总结

优点:

  • 简单的理解和解释,树木可视化

缺点:

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

改进:

  • 减枝cart算法
  • 随机森林

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/110477.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】复杂度

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 文章目录 一、什么是数据结构二、什么是算法三、算法的效率四、时间复杂度4.1 时间复杂度的概念4…

【100天精通Python】Day72:Python可视化_一文掌握Seaborn库的使用《二》_分类数据可视化,线性模型和参数拟合的可视化,示例+代码

目录 1. 分类数据的可视化 1.1 类别散点图(Categorical Scatter Plot) 1.2 类别分布图(Categorical Distribution Plot) 1.3 类别估计图(Categorical Estimate Plot) 1.4 类别单变量图(Cat…

远程IO:实现立体车库高效运营的秘密武器

随着城市的发展,车辆无处停放的问题变得越来越突出。为了解决这个问题,立体车库应运而生。立体车库具有立体空间利用率高、存取车方便、安全可靠等优点,成为现代城市停车的重要解决方案。 立体车库控制系统介绍 在立体车库中,控制…

基于51单片机的四种波形信号发生器仿真设计(仿真+程序源码+设计说明书+讲解视频)

本设计 基于51单片机信号发生器仿真设计 (仿真程序源码设计说明书讲解视频) 仿真原版本:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0015 这里写目录标题 基于51单片机信号发生…

简单明了!网关Gateway路由配置filters实现路径重写及对应正则表达式的解析

问题背景: 前端需要发送一个这样的请求,但出现404 首先解析请求的变化: http://www.51xuecheng.cn/api/checkcode/pic 1.请求先打在nginx,www.51xuecheng.cn/api/checkcode/pic部分匹配到了之后会转发给网关进行处理变成localho…

Android底层摸索改BUG(二):Android系统移除预置APP

首先我先提供以下博主博文,对相关知识点可以提供理解、解决、思考的 Android 系统如何预装第三方应用以及常见问题汇集android Android.mk属性说明及预置系统app操作说明系Android 中去除系统原生apk的方法 取消预置APK方法一: 其实就是上面的链接3&a…

Day 4 登录页及路由 (二) -- Vue状态管理

状态管理 之前的实现中,判断登录状态用了伪实现,实际当中,应该是以缓存中的数据为依据来进行的。这就涉及到了应用程序中的状态管理。在Vue中,状态管理之前是Vuex,现在则是推荐使用Pinia,在脚手架项目创建…

linux查看系统版本、内核信息、操作系统类型版本

1. 使用 uname 命令:这将显示完整的内核版本信息,包括内核版本号、主机名、操作系统类型等。 uname -a2. 使用 lsb_release 命令(仅适用于支持 LSB(Linux Standard Base)的发行版):这将显示包含…

HCIE怎么系统性学习?这份HCIE学习路线帮你解决

华为认证体系覆盖ICT行业十一个技术领域共十三个技术方向的认证,今天我们分享的是其中最热门的数据通信方向的HCIE学习路线。 HCIE是华为认证体系中最高级别的ICT技术认证 ,旨在打造高含金量的专家级认证,为技术融合背景下的ICT产业提供新的能…

JVS-BI数字大屏设计器:一站式解决方案

数字大屏介绍 数字大屏是当下数据展示、业务监控、指挥调度常见的业务表达形态,常有可视化的图表、效果装饰、事件操作等技术组成酷炫的效果展示。 配置入口 进入JVS-BI(bi.bctools.cn),进入大屏页面,如下图所示 ①…

TypeScript之函数以及与JavaScript函数的区别

一、是什么 函数是JavaScript 应用程序的基础,帮助我们实现抽象层、模拟类、信息隐藏和模块 在TypeScript 里,虽然已经支持类、命名空间和模块,但函数仍然是主要定义行为的方式,TypeScript 为 JavaScript 函数添加了额外的功能&…

Docker 部署spring-boot项目(超详细 包括Docker详解、Docker常用指令整理等)

文章目录 DockerDocker的定义Docker有哪些作用Docker有哪些好处使用docker部署springboot项目安装docker创建Dockerfile镜像文件执行镜像文件(Dockerfile文件)查看Docker镜像启动容器查看Docker中运行的容器查看服务容器日志 Docker常用指令查看docker安装目录启动Docker停止Do…

无品牌国产PLC模块调试说明

地址30001对应的aiw9 30002对应aiw10 30003 aiw11 30004 aiw12 模块接线及拨码全部向下,对应的DeviceID为15地址 使用串口线链接的时候a要接b0 b接a0 要反着接才能有数据

金属压铸件自动化3D全尺寸测量设备自动外观检测三维检测-CASAIM

铸造作为现代装备制造工业的基础共性技术之一,铸件产品既是工业制造产品,也是大型机械的重要组成部分,被广泛运用在航空航天、工业船舶、机械电子和交通运输等行业。 铸件形状复杂,一般的三坐标或者卡尺圆规等工具难以获取多特征…

论文阅读——BART

Arxiv: https://arxiv.org/abs/1910.13461 一个去噪自编码器的预训练序列到序列的模型。是一个结合了双向和自回归transformers的模型。 预训练分为两个阶段:任意噪声函数破坏文本和序列模型重建原始文本 一、模型 input:被破坏的文本-->bidirecti…

【开发日记】必须记录一下困扰我两天的问题 MyBatisPlus适配达梦insert时提示:无效的列

【需求】 项目ORM框架使用的是MyBatisPlus,数据库原来使用的是MySQL,现在需要适配达梦。 【问题】 项目ORM框架使用的是MyBatisPlus,数据库原来使用的是MySQL,现在需要适配达梦数据库。 在适配过程中查询、更新、删除都没有问题…

购物车死了吗?拼多多的社交电商革命

亲爱的小伙伴们,大家好!我是小米,今天要和大家聊一聊一个备受关注的话题:拼多多为什么没有购物车?这是一个网易产品经理面试题,但也是一个备受争议的话题。让我们一起来探讨一下吧! 拼多多的购…

【idea】生成banner.txt

Spring Boot banner在线生成工具,制作下载英文banner.txt,修改替换banner.txt文字实现自定义,个性化启动banner-bootschool.netSpring Boot banner工具实现在线生成banner,轻松修改替换实现自定义banner,让banner.txt文…

Qt QWidget、QDialog、QMainWindow的区别

QWidget QWidget是Qt框架中最基础的窗口类,可以理解为用户界面的最基本单元。QWidget类提供了一个空白窗口,可以通过继承该类来创建自定义的窗口类。QWidget类提供了基本的窗口属性和方法,如大小、位置、标题、图标等。 QDialog QDialog是…