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

决策树与分类案例分析

文章目录

  • 决策树与分类案例分析
    • 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 00]
直接比对真实值和预测值:[ True  True  True  True  True  True  True False  True  True  True  TrueTrue  True  True  True  True  True False  True  True  True  True  TrueTrue  True False  True  True False  True  True  True  True  True  TrueTrue  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算法
  • 随机森林

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【蓝桥每日一题]-前缀和与差分(保姆级教程 篇3)#涂国旗 #重新排序

目录 题目:涂国旗 思路: 题目:重新排序 思路: 题目:涂国旗 思路: 乍一看好像没啥思路,但是我们需要涂最少的格子,所以要都尝试一下才行,也就是从上面开始白至少一行&am…

python自动化测试(七):鼠标事件

前置条件: 本地部署:ECShop的版本是3.0.0、Google版本是 Google Chrome65.0.3325.162 (正式版本) (32 位) py的selenium版本是3.11.0 目录 一、前置代码 二、ActionChains类 三、鼠标事件 3.1 悬停事件 3.2 左键单击 3…

python爬虫之正则表达式解析实战

文章目录 1. 图片爬取流程分析2. 实现代码—爬取家常菜图片 1. 图片爬取流程分析 先获取网址,URL:https://www.xiachufang.com/category/40076/ 定位想要爬取的内容使用正则表达式爬取导入模块指定URLUA伪装(模拟浏览器)发起请求…

scratch图书的ISBN码校验 2023年9月中国电子学会图形化编程 少儿编程 scratch编程等级考试三级真题和答案解析

目录 scratch图书的ISBN码校验 一、题目要求 1、准备工作 2、功能实现 二、案例分析

LED数码管的静态显示与动态显示(Keil+Proteus)

前言 就是今天看了一下书上的单片机实验,发现很多的器件在Proteus中都不知道怎么去查找,然后想做一下这个实验,尝试能不能实现,LED数码管的两个还可以实现,但是用LED点阵显示器的时候他那个网络标号不知道是什么情况&…

基于UDP/TCP的网络通信编程实现

小王学习录 今日鸡汤Socket套接字基于UDP来实现一个网络通信程序DatagramSocket类DatagramPacket类基于UDP的服务器端代码基于UDP的客户端代码基于TCP来实现一个网络通信程序ServerSocket类Socket类基于TCP的服务器端代码基于TCP的客户端代码优化之后的服务器端代码补充TCP长短…

【MyBatis Plus】初识 MyBatis Plus,在 Spring Boot 项目中集成 MyBatis Plus,理解常用注解以及常见配置

文章目录 一、初识 MyBatis Plus1.1 MyBatis Plus 是什么1.2 MyBatis Plus 和 MyBatis 的区别 二、在 Spring Boot 项目中集成 MyBatis Plus2.1 环境准备2.2 引入 MyBatis Plus 依赖2.3 定义 Mapper2.4 测试 MyBatis Plus 的使用 三、MyBatis Plus 常用注解3.1 为什么需要注解3…

rust 创建多线程web server

创建一个 http server,处理 http 请求。 创建一个单线程的 web 服务 web server 中主要的两个协议是 http 和 tcp。tcp 是底层协议,http 是构建在 tcp 之上的。 通过std::net库创建一个 tcp 连接的监听对象,监听地址为127.0.0.1:8080. us…

css文字竖向排列

div { writing-mode: vertical-rl;text-orientation: upright;font-size: .25rem; //文字大小letter-spacing: 0.1em; //文字间距}

常用第三方库

Moment GTC(Greenwish Mean Time):格林威治时间,太阳时,精确到毫秒UTC(Universal Time Coodinated):世界协调时间,原子种计时,精确到纳秒 GTC和UTC都是以0时区作为标准时间戳:以UTC的1970-1-1 …

python自动化测试(五):按键模拟输入:全选、复制、清空、粘贴、完成

前置条件: 本地部署:ECShop的版本是3.0.0、Google版本是 Google Chrome65.0.3325.162 (正式版本) (32 位) Google驱动的selenium版本是3.11.0 目录 一、配置代码 二、键盘组合输入 2.1 全选:ctrl a 2.2 复制…

OpenCV官方教程中文版 —— Hough 直线变换

OpenCV官方教程中文版 —— Hough 直线变换 前言一、原理二、OpenCV 中的霍夫变换三、Probabilistic Hough Transform 前言 目标 • 理解霍夫变换的概念 • 学习如何在一张图片中检测直线 • 学习函数:cv2.HoughLines(),cv2.HoughLinesP() 一、原理…

DIY相机(一)libcamera库

相机选型 DIY相机首先是要确定使用的相机型号。兼容树莓派,画质好一些的,目前主要有两款:一是Raspberry Pi Camera Module 3,二是Raspberry Pi HQ Camera。 下图是Raspberry Pi Camera Module 3的相关特性。支持自动对焦和HDR等…

JDK21下载和安装

说明 本文介绍 JDK21(Oracle版)的下载和安装。 下载 Oracle官网JDK21下载页面 根据操作系统的类型,下载相应的版本。本文下载的是Windows64位的安装版。 下载页面示例 安装包示例 安装 双击安装包,开始安装。 把路径改为自定…

openpnp - SlotSchultzFeeder source code bugfix

文章目录 openpnp - SlotSchultzFeeder source code bugfix概述笔记openpnp源码调试环境排查思路开git分支查到的问题 - 1查到的问题 - 2查到的问题 - 3针对以上问题进行的逻辑修正D:\my_openpnp\openpnp_github\src\main\java\org\openpnp\machine\reference\driver\wizards\G…

【计算机视觉】对极几何

文章目录 一、极线约束(Epipolar Constraint)二、相机标定过的情况三、相机没有标定过的情况四、八点算法(eight-point algorithm) 我的《计算机视觉》系列参考UC Berkeley的CS180课程,PPT可以在课程主页看到。 在上一…

Nokogiri库和OpenURI库使用HTTP做一个爬虫

Nokogiri和OpenURI是两个常用的Ruby库,用于编写爬虫程序。它们的主要功能如下: 1、Nokogiri:Nokogiri是一个强大的HTML和XML解析库,可以用于解析网页内容。它提供了一组简单易用的API,可以方便地遍历和操作HTML或XML文…

c++设计模式三:工厂模式

本文通过一个例子简单介绍简单工厂模式、工厂模式和抽象工厂模式。 1.简单工厂(静态) 假如我想换个手机,换什么手机呢?可以考虑苹果或者华为手机,那我们用简单工厂模式来实现这个功能: 我们关注的产品是手…

selenium判断元素可点击、可见、可选

1、判断元素是否可以点击 判断元素是否可以点击,WebElement对象调用is_enabled() is_enabled()方法返回一个布尔值,若可点击返回:True。若不可点击则返回:False from selenium import webdriver import time from selenium.web…

OpenCV C++ 图像处理实战 ——《缺陷检测》

OpenCV C++ 图像处理实战 ——《缺陷检测》 一、结果演示二、缺陷检测算法2.1、多元模板图像2.2、训练差异模型三、图像配准3.1 功能源码3.1 功能效果四、多元模板图像4.1 功能源码五、缺陷检测5.1 功能源码六、源码测试图像下载总结一、结果演示