机器学习之监督学习(四)决策树和随机森林

news2024/11/23 2:47:39

机器学习之监督学习(四)决策树和随机森林

  • 0. 文章传送
  • 1. 决策树 Decision Tree
    • 案例引入
    • 构建过程

0. 文章传送

机器学习之监督学习(一)线性回归、多项式回归、算法优化[巨详细笔记]
机器学习之监督学习(二)二元逻辑回归
机器学习之监督学习(三)神经网络基础
机器学习之实战篇——预测二手房房价(线性回归)
机器学习之实战篇——肿瘤良性/恶性分类器(二元逻辑回归)
机器学习之实战篇——MNIST手写数字0~9识别(全连接神经网络模型)

1. 决策树 Decision Tree

案例引入

前面的文章系列已经介绍了几种监督学习算法,包括线性回归、逻辑回归、神经网络,现在介绍另一种截然不同的算法——决策树模型(Decison Tree)。决策树是一种简单、高效、可解释的机器学习模型,可以用于分类问题和回归问题。

下面展现了一个猫分类的案例,输入耳朵形状、脸形状、胡须有无,输出1(猫)/0(非猫),图中包含10个样本。
在这里插入图片描述

下面展现了一棵决策树,学过数据结构的我们对树结构(递归结构)并不陌生。最顶端的结点称为根结点(root node),根结点左右分叉形成左子树和右子树,最底部的结点称为叶结点(leaf node)。在这棵决策树中,在根结点中选取耳朵形状作为特征,然后根据耳朵尖状或松散分叉成左右子树,左孩子结点选择脸型作为特征,右孩子结点选择胡须作为特征,再进一步分叉后第三层的叶子结点输出类别(是猫/不是猫)。

在构建了决策树后,对于新的输入,我们便可以预测其类别。例如一只耳尖、脸圆、有须的猫,从根结点出发进行一系列特征选择(左->左),将其分类为猫。
在这里插入图片描述

构建过程

在这里插入图片描述
如何从训练集中构建出一棵最优决策树?接下来让我们回答几个核心问题,探究决策树的构建过程:

Q1:如何选择节点特征进行分裂?
答:最大化纯度(purity)
在这里插入图片描述

构建决策树第一个核心问题是如何在诸多特征中进行选择,让决策树进一步分裂。
看上图,当选择cat DNA作为特征时,可以发现左边都是猫,右边都是狗,即完全分门别类,左右边纯度都是100%。而在下面的三种特征选取中,我们发现按第一个特征分裂,左边猫占80%,右边非猫占80%;按第二个特征分裂,左边猫占4/7,右边非猫占2/3;按第三个特征分裂,左边猫占3/4,右边非猫占2/3,可以发现两个比例都是按第一个特征分裂最高,因此选取第一个特征最优。

如何表征纯度?引入(entropy)和熵函数的概念,定义p表示样本中正类(例如是猫)的占比,则熵值为H(p),其中H为熵函数,表达式为:
H ( p ) = − p l o g 2 ( p ) − ( 1 − p ) l o g 2 ( 1 − p ) H(p)=-plog_2(p)-(1-p)log_2(1-p) H(p)=plog2(p)(1p)log2(1p)
函数图像如下:可以看到函数图像关于p=0.5对称,p(0.5)=1,p(0)=p(1)=1

熵表征的是非纯度(impurity),可以看到p=0.5时非纯度最高,p趋近0或1时表示样本趋于正/负类,纯度高,因此非纯度趋于0.
在这里插入图片描述
节点特征选择的策略就是选择对应信息增益(information gain)最大的特征。
何为信息增益?表达式为
I n f o r m a t i o n   g a i n = H ( p r o o t ) − ( w l e f t H ( p l e f t ) + w r i g h t H ( p r i g h t ) ) Information~gain=H(p_{root})-(w_{left}H(p_{left})+w_{right}H(p_{right})) Information gain=H(proot)(wleftH(pleft)+wrightH(pright))
参照下图示例理解信息增益,需要计算根结点熵值、左右结点熵值,如何计算左、右结点熵值乘权重后相加值与根结点熵值相减,计算出信息增益。

下图中,耳朵特征信息增益最大,因此选取其为根结点分裂特征。

在这里插入图片描述
由于树模型属于典型的递归结构,在确定了根结点后,剩下按一样的思路递归构造左子树和右子树即可,但仍有一个问题需要解决,何时结束递归?即何时结束决策树分类,完成决策树的构造?

Q2:何时停止节点分裂?
答:节点停止分裂的标准并不单一,以下是常见的几个基本标准:

①当一个结点纯度达到100%时
②当决策树分裂达到最大深度时
③当信息增益小于某个阈值时
④当某个结点样本数小于某个阈值时
在这里插入图片描述

Q3:上面案例中的特征都是二元特征,那该如何处理多元特征?
答:采用独热编码

上面案例中的特征都是二元特征,也就是只有两个取值,这样构建的决策树属于二叉树。当某一个特征有k个有限取值时,可以创建k个二元特征(0/1取值),保证决策树是二叉树。使用独热编码的特征,既适用于决策树模型,也适用于逻辑回归、线性回归、神经网络模型。

Q4:上面案例中的特征都是离散型特征, 如何处理连续取值特征?
答:二分法(Binary Split),这是最常用的方法:

  • 对连续特征的所有不同取值进行排序
  • 取相邻两个值的中点作为可能的分割点
  • 对每个可能的分割点,计算分割后的信息增益
  • 选择信息增益最大的点作为该特征的分割点

例如,如果一个特征有值[1, 3, 4, 5, 7],则可能的分割点为1.5, 3.5, 4.5, 6。在这里插入图片描述

Q5:上面案例中决策树用于处理二元分类问题,那如何处理多元分类问题呢?
答:
①有时会采用One-vs-Rest策略,为每个类别训练一个二分类决策树,然后选择置信度最高的类别作为最终预测结果。

②在多分类问题中,我们仍然使用信息增益作为分裂标准,但计算方式略有不同:
对于熵,公式变为: H = − Σ ( p i × l o g 2 ( p i ) ) H = -Σ(p_i \times log_2(p_i)) H=Σ(pi×log2(pi)),其中pi是第i类的概率。
在多分类问题中,叶节点的类别通常由该节点中样本最多的类别决定。
为了理解多分类问题中决策树的构建过程,下面是某ai大模型生成的案例:

完整的决策树构建过程:

初始数据集:
颜色	形状	类别
红	圆	苹果
黄	长	香蕉
橙	圆	橙子
红	圆	苹果
黄	长	香蕉
红	圆	苹果
橙	圆	橙子
黄	圆	苹果
根节点的熵计算:
苹果: 4/8, 香蕉: 2/8, 橙子: 2/8
H = -(4/8 * log2(4/8) + 2/8 * log2(2/8) + 2/8 * log2(2/8)) ≈ 1.5

第一次分裂(使用"颜色"特征):
红色节点:3苹果
黄色节点:2香蕉,1苹果
橙色节点:2橙子

计算每个子节点的熵:
H_红 = 0
H_黄 ≈ 0.92
H_橙 = 0

信息增益 = 1.5 - (3/8 * 0 + 3/8 * 0.92 + 2/8 * 0) ≈ 1.15

继续分裂黄色节点(使用"形状"特征):
长形节点:2香蕉
圆形节点:1苹果

计算这次分裂的信息增益:
H_before ≈ 0.92
H_after = 0
信息增益 ≈ 0.92

最终的叶节点决定:
红色节点:3苹果 -> 类别为苹果
橙色节点:2橙子 -> 类别为橙子
黄色长形节点:2香蕉 -> 类别为香蕉
黄色圆形节点:1苹果 -> 类别为苹果
决策树图示:
           根节点
           (颜色)
          /   |   \
         /    |    \
        /     |     \
     红色    黄色    橙色
    (苹果)  (形状)  (橙子)
            /   \
           /     \
         长形    圆形
       (香蕉)   (苹果)
这个决策树的解释:

首先看水果的颜色
如果是红色,分类为苹果
如果是橙色,分类为橙子
如果是黄色,再看形状:
如果是长形,分类为香蕉
如果是圆形,分类为苹果

Q6:上面的案例中决策树都是分类树,那如何处理回归问题呢?

施工中****************************************************************************************

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOv8改进实战 | 注意力篇 | 引入ICCV2023顶会LSKNet:大选择性卷积注意力模块LSKA,助力小目标检测

YOLOv8专栏导航:点击此处跳转 前言 YOLOv8 是由 YOLOv5 的发布者 Ultralytics 发布的最新版本的 YOLO。它可用于对象检测、分割、分类任务以及大型数据集的学习,并且可以在包括 CPU 和 GPU 在内的各种硬件上执行。 YOLOv8 是一种尖端的、最先进的 (SOTA) 模型,它建立在以前…

Leetcode JAVA刷刷站(113)路径总和 ||

一、题目概述 二、思路方向 为了找出从根节点到叶子节点路径总和等于给定目标和的所有路径,我们可以使用深度优先搜索(DFS)的方法。在遍历过程中,我们维护一个当前路径的和以及一个列表来存储当前路径的节点值。当我们到达一个叶…

HarmonyOS云端开发(二)

文章目录 登录认证服务以及云数据库使用一创建登录注册页面二、开启认证服务二、创建数据表1.导出数据表2.使用表 进行增删改查3.查看云数据库 登录认证服务以及云数据库使用 云端开发不需要存储token,由提供的API统一验证,假设未登录则跳转登录页,已登…

uniapp,vite整合windicss

官方文档:https://weapp-tw.icebreaker.top/docs/quick-start/frameworks/hbuilderx 安装: npm i -D tailwindcss postcss autoprefixer # 初始化 tailwind.config.js 文件 npx tailwindcss initnpm i -D weapp-tailwindcss# 假如 tailwindcss 在 weap…

nginx 新建一个 PC web 站点

注意:进行实例之前必须完成nginx的源码编译。(阅读往期文章完成步骤) 1.编辑nginx的配置文件,修改内容 [rootlocalhost ~]# vim /usr/local/nginx/conf/nginx.conf 2.创建新目录/usr/local/nginx/conf.d/,编辑新文件…

JavaScript (输出,语句,语法)

目录 JavaScript 输出 使用window.alert() 写入警示框 使用document.write() 写入HTMl输入 使用 innerHTML 写入html元素 使用console.log()写入 浏览器控制台 JavaScript 语句 实例 语句组成 分号 关键字 JavaScript 语法 JavaScript 标识符 …

【Hadoop|MapReduce篇】MapReduce概述

1. MapReduce定义 MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。 2. Map…

项目——负载均衡OJ

项目要实现的一个整体的功能: 编写一个在线OJ网络服务器,只实现类似 leetcode 的题目列表在线编程功能 项目宏观结构: Oj服务器在收到提交的代码时,把代码负载均衡的选择发送给其他几个编译与运行服务器去编译运行代码,判断代码的编译运行结…

springboot+vue+mybatis计算机毕业设计气象数据分析与可视化系统+PPT+论文+讲解+售后

随着互联网技术不断地发展,网络与大数据成为了人们生活的一部分,而气象数据分析与可视化系统 作为网上应用的一个全新的体现,由于其特有的便捷性,已经被人们所接受。目前主流的气象数据分析与可视化系统 服务不仅不明确并且管理…

滑动窗口系列(同向双指针)/9.7

新的解题思路 一、三数之和的多种可能 给定一个整数数组 arr &#xff0c;以及一个整数 target 作为目标值&#xff0c;返回满足 i < j < k 且 arr[i] arr[j] arr[k] target 的元组 i, j, k 的数量。 由于结果会非常大&#xff0c;请返回 109 7 的模。 输入&…

AMEYA360:村田量产用于汽车市场的高可靠性0603M铜电极负温度系数NTC热敏电阻

株式会社村田制作所开发了0603M尺寸(0.60.30.3mm)铜电极负温度系数(NTC)热敏电阻&#xff0c;型号分别是“NCU03XH103F6SRL”和“NCU03XH103F60RL”&#xff0c;该新品扩充了NCU系列的产品尺寸阵容&#xff0c;满足了汽车市场应用中电路板的高密度化和小型化、以及对电子部件的…

AF路由模式组网部署

实验拓扑 防火墙基本配置 接口配置 eth1 eth2 eth3 路由配置 地址转换配置 放通策略 1. 出口申请了主电信、备联通两条外网线路&#xff08;均为 50M 带宽&#xff09;。 2. 内网有 web 服务器linux 172.16.3.100运行 http 服务&#xff0c;内外网用户通过 出口路由器…

Kubernetes 1.25 containerd 环境部署 SuperMap iManager

超图官网目提供的Kubernetes 版本为 1.20 版本&#xff0c;容器运行时为 docker 本次部署使用已有的 Kubernetes 1.25 版本集群&#xff0c;容器运行时为 containerd Kubernetes &#xff0c;containerd 部署请自行了解&#xff0c;本次不做介绍&#xff0c;下面介绍在此环境上…

MATLAB绘图基础5:MATLAB数据导入

参考书&#xff1a;《 M A T L A B {\rm MATLAB} MATLAB与学术图表绘制》(关东升)。 5.MATLAB数据导入 5.1 从CSV文件读取数据 C S V {\rm CSV} CSV文件是一种纯文本文件&#xff0c;文件中的数据以逗号为分隔符进行字段分隔&#xff0c;每一行数据代表一条记录&#xff0c;每…

通信工程学习:什么是AB地址总线、DB数据总线、CD控制总线

AB地址总线、DB数据总线、CD控制总线 在计算机体系结构中&#xff0c;总线&#xff08;Bus&#xff09;是一种用于在计算机内部各个组件之间传输信息的物理通道。其中&#xff0c;AB地址总线、DB数据总线和CD控制总线是计算机总线系统中非常重要的三个组成部分&#xff0c;它们…

机器学习-神经网络:循环神经网络(RNN)详解

引言 在当今人工智能(AI)和深度学习(DL)领域,循环神经网络(RNN)作为一种专门处理序列数据的模型,具有不可忽视的重要性。RNN 的设计目标是模拟和处理序列中的时间依赖关系,使其成为许多应用场景的理想选择,如自然语言处理(NLP)、时间序列预测和语音识别等。它不仅…

乐凡北斗车载终端 | 车载终端功能是什么?

北斗车载终端即北斗卫星监控系统主机&#xff0c;主要是通过北斗卫星实现定位和导航&#xff1b;并通过传输网络与监控中心通信&#xff0c;由前端设备、传输网络、监控中心构成北斗卫星定位监控系统&#xff0c;实现定位跟踪及智能功能, 终端还可内置8Mbit的Flash储存器&#…

分享一个基于uniapp科技馆服务微信小程序 博物馆管理小程序(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

Java stream使用与执行原理

stream简介 Stream: A sequence of elements supporting sequential and parallel aggregate operations stream为sequential即单线程串行操作&#xff0c;parallelStream支持并行操作&#xff0c;本文只讨论sequential的stream。 stream常用操作 Datastatic class Course {pr…

【软件工程】第二讲软件过程

【软件工程】第二讲软件过程 文章目录 【软件工程】第二讲软件过程1. 软件过程概述1.1 软件工程的金三角1.2 软件过程的定义1.3 软件过程的组成 2. 软件生命周期模型2.1 瀑布模型2.2 增量模型2.3 演化模型 3. 统一软件过程RUP3.1 RUP最佳实践3.2 统一软件过程RUP 4. 敏捷过程4.…