决策树,Laplace 剪枝与感知机

1.决策树

决策树是一种用于分类任务的监督学习算法。它基于特征的划分来做出决策,每个节点表示一个特征,每条分支代表该特征的可能取值,每个叶子节点代表分类结果。

用通俗的话来说,决策树就像一个**"如果……那么……"**的游戏,用来帮助我们做决定。可以把它想象成一棵倒过来的树,从根部开始,一层层往下分支,每个分支代表不同的选择,最终会到达一个结果。

举个简单的例子:

假设你想决定今天要不要带伞,你可以用一个决策树来帮你分析:

  1. 第一步(根节点): 今天会下雨吗?
    • 如果是(Yes)带伞
    • 如果不是(No)看下一步
  2. 第二步(分支): 天气预报说有可能下雨吗?
    • 如果是(Yes)带伞
    • 如果不是(No)不带伞

这样,我们通过一个简单的二叉决策树,一步步推导出了是否带伞的答案。 

先给大家po一道题目

首先列出关于本题的所有知识点:

(a) 计算信息增益(Information Gain)

信息增益衡量一个特征在划分数据集后,减少数据不确定性的程度。计算公式如下:

信息增益就像是**"整理书桌的过程",它衡量的是我们在某个问题上获得了多少有用的信息

举个例子:

假设你有一堆书,里面既有小说,也有教科书,现在你想把它们整理好,让书桌变得更整洁。

  • 情况 1(未分类前):所有书都混在一起,显得很乱,我们不知道哪些是小说,哪些是教科书(信息很杂乱,不确定性很高)。
  • 情况 2(按类别分类):如果我们按照“小说”和“教科书”分成两堆,那就一目了然了(信息更清晰,不确定性降低)。

信息增益,就是分类前的混乱程度(信息不确定性) - 分类后的混乱程度


具体到决策树:

在构建决策树时,我们希望每一步分类都能尽量减少混乱,也就是说,让每个分支里的数据尽可能相似
信息增益就是衡量某个特征(分类标准)在多大程度上减少了数据的混乱程度

高信息增益的特征 → 说明它对分类非常有帮助,应该优先使用!

(b) 构造决策树

使用信息增益最大的特征作为根节点,递归划分数据集,直到所有数据属于同一类别或信息增益趋于零。

(c) 预测

利用构建的决策树,对 short + red + brown eyes 的人进行分类,判断是否会被录取。

问题解答:

a. 计算各属性的信息增益
  1. 父节点熵计算
    总样本数 N=8N=8,其中+类3个,-类5个。

     2.属性划分后的熵

  • height属性

      hair属性

   eyes属性

 结果
信息增益最大为 hair(0.4544),其次是 eyes(0.3475),最后是 height(0.0031)。


b. 构建决策树
  1. 根节点:选择信息增益最大的属性 hair

    • hair=red → 直接分类为+(1个样本)。

    • hair=dark → 直接分类为-(3个样本)。

    • hair=blond → 需进一步分裂。

  2. 子节点分裂(hair=blond)

    • 剩余属性为 eyes 和 height

    • 在hair=blond的4个样本中,按 eyes 划分:

      • eyes=blue(2个样本,均为+) → 分类为+。

      • eyes=brown(2个样本,均为-) → 分类为-。

  3. 最终决策树结构

c. 预测样本

样本属性:short(height)、red(hair)、brown(eyes)。
根据决策树:

  1. 检查 hair

    • hair=red → 直接分类为 +(无需检查其他属性)。

预测结果:该候选人会被雇佣(+)。

2. 拉普拉斯剪枝 (Laplace Pruning)

决策树容易过拟合,Laplace 剪枝是一种防止过拟合的技术,利用 Laplace 误差估计公式

 

什么是拉普拉斯剪枝?

拉普拉斯剪枝(Laplace Smoothing Pruning)是一种防止决策树过拟合的方法,主要用于修正样本较少时容易出现的极端情况

你可以把它想象成考试时的“保底分”,就算你不会做题,老师也不会给你零分,而是至少给你一点分数,以免误判你的能力。


为什么需要拉普拉斯剪枝?

假设你在训练决策树时,有一个类别的数据非常少,比如:

  • 你做了 10 次实验,其中有 9 次“成功”,1 次“失败”。
  • 你的决策树可能会认为**“只要遇到类似情况,几乎100%会成功”**。

但现实中,如果我们再多做几次实验,可能会出现不同的结果。因此,我们不应该过度相信少量样本的统计结果,需要让概率更平滑一点,避免“绝对化”的判断。


拉普拉斯修正是怎么做的?

它的原理是在每个类别的计数上加上一个小的“先验”值,通常是 1,就像给每个类别都分配一点“保底权重”

计算公式:

其中:

  • k 是类别的总数(比如有 2 类:成功和失败,k=2)。
  • +1 就是给每个类别都加上一点权重,防止概率变成 0 或 1。

举个例子

假设你统计某种天气下是否会下雨:

  • 你观测了 4 次,其中 3 次下雨,1 次没下雨
  • 传统方法计算概率:
    • 下雨概率 = 3 / 4 = 0.75
    • 不下雨概率 = 1 / 4 = 0.25

但这个数据太少了,可能并不可靠。
拉普拉斯修正(k=2,+1调整):

可以看到,修正后概率更平滑,更不容易被少量数据误导


总结

  • 作用:避免决策树过拟合,防止少量样本导致极端判断。
  • 方法:在计算概率时,每个类别的计数都 +1,同时分母加上类别总数 k,使概率更平滑。
  • 类比:像考试的“保底分”或者“菜鸟保护机制”,即使没见过某个情况,也不会直接判断为 0% 或 100%。

这样,决策树在处理少量数据时会更稳健,不会因为数据不足而产生极端的决策!

 首先来po一道例题

问题解答:

步骤1:计算父节点的Laplace误差

父节点为 [4,7],表示有4个正类样本和7个负类样本:

  • 总样本数 N=11

  • 多数类为负类(7个),故 n=7

  • 类别数 k=2

代入公式:

步骤2:计算子节点的Laplace误差

子节点分别为 [2,1] 和 [2,6]

  1. 左子节点 [2,1]

    • 总样本数 N=3

    • 多数类为正类(2个),故 n=2

    • 类别数 k=2
      误差:

     2.右子节点 [2,6]

             1. 总样本数 N=8

             2.多数类为负类(6个),故 n=6

             3.类别数 k=2
                 误差:

步骤3:计算保留子节点的加权总误差
  • 左子节点权重:3/11​

  • 右子节点权重:8/11
    总误差:

步骤4:比较误差并决定是否剪枝
  • 父节点误差:0.38460.3846

  • 子节点总误差:0.32730.3273

结论:由于子节点总误差(0.3273)小于父节点误差(0.3846),剪枝后误差反而增大,因此不应剪枝

计算父节点和子节点的拉普拉斯误差,然后比较,是为了决定是否进行剪枝!

🌱 什么是剪枝?

在决策树中,剪枝(Pruning)是指去掉一些不必要的分支,让树变得更简单,以防止过拟合。

拉普拉斯误差(Laplace Error)是一种用于评估决策节点质量的方法,我们可以计算父节点的误差子节点的误差总和,然后比较它们,来决定是否要剪掉这个分支。


🎯 为什么要比较父节点和子节点的拉普拉斯误差?

  1. 如果子节点的误差之和比父节点大,说明划分后效果反而更差,分支不值得保留,应该剪枝。
  2. 如果子节点的误差之和比父节点小,说明划分确实提高了预测效果,分支值得保留。

换句话说,我们是在衡量这个划分是否真的有效,如果划分后误差反而增加了,那就不如直接用父节点的预测!

3.感知机 

🌟 什么是感知机?(Perceptron)

感知机就像是**"一个简单的大脑",可以根据输入做出二选一的决策**(比如“是”或“否”)。它是最基础的人工神经网络模型之一,专门用来处理二分类问题


🤔 怎么理解感知机?

可以把感知机想象成一个面试官,他要决定一个求职者是**"录取"(1)** 还是 "不录取"(0)

面试官会根据求职者的学历、工作经验、技能等因素,给这些特征分配不同的权重,然后计算一个分数。

  • 如果分数高于某个标准(阈值),就录取(1)
  • 如果分数低于标准,就不录取(0)

🛠 感知机的工作原理

感知机的计算过程可以简单拆解成三步:

1️⃣ 特征加权求和(加权输入)

  • 设 x1,x2,x3​ 代表求职者的学历、经验、技能(输入)。
  • 设 w1,w2,w3​ 代表这些因素的重要性(权重)。
  • 计算总评分: S=w1x1+w2x2+w3x3+b其中 b 是偏置项(相当于面试官的个人倾向)。

2️⃣ 通过激活函数做判断

  • 如果 S 大于某个阈值(比如 0),输出 1(录取)。
  • 否则,输出 0(不录取)。
    这里常用的激活函数就是阶跃函数

3️⃣ 学习和调整权重(训练过程)

  • 如果决策错误,就调整权重 w,让模型在下次预测时更准确。
  • 这个调整规则就是感知机的学习算法

🎯 举个例子

假设感知机要判断一封邮件是垃圾邮件(1) 还是正常邮件(0),它会根据一些特征来计算分数,比如:

  • 包含“免费”这个词(x₁ = 1)
  • 包含“中奖”这个词(x₂ = 1)
  • 发送者是否是陌生人(x₃ = 1)

假设感知机学到的权重是:

  • w₁ = 0.8(“免费”很重要)
  • w₂ = 0.6(“中奖”也重要)
  • w₃ = 0.7(陌生人发的邮件风险大)
  • 偏置 b = -1.2(防止过于轻易判定垃圾邮件)

那么,计算分数:

S=(0.8×1)+(0.6×1)+(0.7×1)−1.2=0.9

由于 S>0,所以感知机判断:这封邮件是垃圾邮件(1)


📌 感知机的特点

简单高效:计算快、容易理解。
适用于线性可分问题(能用一条直线区分的情况)。
无法解决非线性问题(比如 XOR 异或问题)。
只能做二分类,不能处理多类别。


📈 总结

感知机就像一个简单的“人工大脑”,它通过给特征赋权重、计算分数,并用阈值做决策,来判断某个输入属于哪一类。

你可以把它理解成:

  • 面试官(判断是否录取)。
  • 邮件过滤系统(判断是否垃圾邮件)。
  • 简单的 AI 判断器(比如黑白图像分类)。

虽然感知机很基础,但它是神经网络的“祖师爷”,现代深度学习中的神经元概念就源自它! 🚀

 po一道例题,具体讲解也可以看几道感知机算法(PLA)的例题

解答;

从第一步开始看,w0=-1.5,w1=0,w2=2,x1=0,x2=1,可以计算得到s=0.5>0,class应该为1,但是class分类却为-,这时候的数字应该减少,w0=w0-n(学习率)=-2.5,w1=w1-nx1=0,w2= w2-nx2=1,这时候可以得到第二步结果,然后继续运算,直到符合a,b,c三个样本为止。

 4.多层神经网络构建逻辑函数

在之前的文章中也有讲解:逻辑函数的神经网络实现

🌟 什么是多层神经网络(MLP)?

多层神经网络(MLP,全称 Multi-Layer Perceptron)就是由多个感知机叠加而成的网络,它能解决单个感知机无法解决的复杂问题,比如异或(XOR)逻辑函数

你可以把它想象成:

  • 感知机是一个人,只能做简单的判断。
  • 多层神经网络是一支团队,可以一起合作,完成更复杂的任务!🎯

🤔 为什么感知机解决不了 XOR?

❌ 单层感知机的局限

感知机只能处理线性可分的问题,比如ANDOR

XOR(异或) 不能用一条直线分开:

  • 无法用一条直线划分 0 和 1! 🚫

👉 解决方案? 加隐藏层! 让网络学会更复杂的决策。


🛠 多层神经网络如何构建 XOR?

我们用三层神经网络(输入层 → 隐藏层 → 输出层)来解决 XOR:

📌 结构
输入层(x₁, x₂)
↓
隐藏层(h₁, h₂) 
↓
输出层(y) 
  1. 输入层:有两个输入 x1,x2​(即 XOR 的两个变量)。
  2. 隐藏层:有两个神经元 h1,h2,它们的作用是创造新特征,让 XOR 变得线性可分。
  3. 输出层:根据隐藏层的输出,决定最终结果。

📊 计算 XOR

第一步:计算隐藏层

我们用两个隐藏神经元 h1,h2h_1, h_2h1​,h2​ 来创建 AND 和 OR:

h1=AND(x1,x2)=x1⋅x2​       h2=OR(x1,x2)=x1+x2
x1x2​h1=x1⋅x2h2=x1+x2
0000
0101
1001
1111
第二步:计算输出层

XOR 公式:

y=h2−h1=(x1+x2)−(x1⋅x2)
x1​x2h1​h2y=h2−h1
00000
01011
10011
11110

💡 结果完全符合 XOR 的逻辑! 🎉


🎯 关键点总结

  1. 单层感知机无法解决 XOR,因为 XOR 不是线性可分
  2. 多层神经网络可以通过隐藏层来学习新的特征,比如 AND 和 OR 的组合。
  3. 隐藏层让神经网络可以处理更复杂的逻辑问题,这就是深度学习的核心思想!

🚀 多层神经网络 = 多个感知机合作,解决更复杂的问题!

解决问题:

以表格形式说明偏置项 w0​ 的求解过程 :

对 ¬B∨C∨¬D而言:

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

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

相关文章

使用DeepSeek+蓝耘快速设计网页简易版《我的世界》小游戏

前言:如今,借助先进的人工智能模型与便捷的云平台,即便是新手开发者,也能开启创意游戏的设计之旅。DeepSeek 作为前沿的人工智能模型,具备强大的功能与潜力,而蓝耘智算云平台则为其提供了稳定高效的运行环境…

标准卷积(Standard Convolution)

标准卷积的基础操作图解: 卷积之后尺寸公式: 输入尺寸:WH卷积核尺寸:Fw​Fh​填充大小:P步长:S 输出尺寸 WoutHout可以通过以下公式计算: 其中[x]表示向下取整。 实例: 输入图像…

使用 Elastic-Agent 或 Beats 将 Journald 中的 syslog 和 auth 日志导入 Elastic Stack

作者:来自 Elastic TiagoQueiroz 我们在 Elastic 一直努力将更多 Linux 发行版添加到我们的支持矩阵中,现在 Elastic-Agent 和 Beats 已正式支持 Debian 12! 本文演示了我们正在开发的功能,以支持使用 Journald 存储系统和身份验…

ArcGIS Pro中字段的新建方法与应用

一、引言 在地理信息系统(GIS)的数据管理和分析过程中,字段操作起着至关重要的作用。 无论是进行地图制作、空间分析还是数据统计,字段都是承载属性信息的基本单元。 ArcGIS Pro作为一款功能强大的GIS软件,为用户提…

企业如何选择网站模版快速建站?

企业想拥有一个专业和功能齐全的官网事关重要。然而,对于新手用户,从基础开始创建网站可能是一件较为复杂和麻烦的过程。今天的文章从零开始给介绍一下如何搭建网站。 一、先确定建站的主题 用户在开始建站前明确自己建站的目的、是为了宣传网站、还是销…

Phi-4-multimodal:图、文、音频统一的多模态大模型架构、训练方法、数据细节

Phi-4-Multimodal 是一种参数高效的多模态模型,通过 LoRA 适配器和模式特定路由器实现文本、视觉和语音/音频的无缝集成。训练过程包括多阶段优化,确保在不同模式和任务上的性能,数据来源多样,覆盖高质量网络和合成数据。它的设计…

北京迅为RK3568开发板OpenHarmony系统南向驱动开发内核HDF驱动框架架构

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

爬取动态数据,爬取持久化数据

1. 动态内容与静态内容的区别 动态内容通常指通过 JavaScript 渲染或异步加载的数据。静态内容则是页面加载时直接可见的内容,通常通过 HTML 直接获取。很多现代网站都使用 JavaScript 动态渲染页面内容(例如 AJAX 请求)。 头条网站的热榜内…

rdiff-backup备份

目录 1. 服务器备份知识点 1.1 备份策略 1.2 备份步骤和宝塔面板简介 1.3 CentOS7重要目录 2. 备份工具 2.1 tar -g 备份演示 2. rsync 备份演示 3. rdiff-backup 备份演示 4. 差异和优缺点 3. rdiff-backup安装和使用 3.1 备份命令rdiff-backup 3.2 恢复命令--…

【6】字典树学习笔记

前言 WFLS 2023 寒假集训 Day2 大纲里字典树在数据结构里,但是个人认为应该属于字符串,就把它放到字符串里了 字典树 字典树,又称Trie树,字母树。每个顶点代表一个字符,从根节点到叶子节点的路径上所有的节点的字符…

Aim Robotics电动胶枪:机器人涂胶点胶的高效解决方案

在自动化和智能制造领域,机器人技术的应用越来越广泛,而涂胶和点胶作为生产过程中的重要环节,也逐渐实现了自动化和智能化。Aim Robotics作为一家专注于机器人技术的公司,其推出的电动胶枪为这一领域带来了高效、灵活且易于操作的…

Camel AI Owl + 阿里云QWQ 本地部署

在 Windows 环境下,部署 Camel AI Owl 并集成阿里云百炼 DeepSeek-R1 API。通过循序渐进的详细说明,你将轻松完成从环境配置到系统落地的全过程。 目录 环境准备Windows 下创建虚拟环境并安装依赖部署 Camel AI Owl配置阿里云百炼 DeepSeek-R1 API测试与…

基于django+pytorch(Faster R-CNN)的钢材缺陷识别系统

一、训练数据来源以及数据标注 数据来源于阿里云天池实验室公开数据集中的铝型材缺陷检测数据集APDDD 数据标注通过labelme进行标注,图片所有标注以转化为矩形标注,存放成json格式。 二、模型训练方式及结果 缺陷识别模型基于Faster R-CNN ResNet5…

Linux网络编程——UDP网络通信的简单实现

目录 UDP网络通信 简单的udpServer实现 头文件 封装udp服务 1、私有成员 2、构造函数和析构函数 3、 udp服务器初始化 4、udp服务器运行 5、完整代码 简单的udpClient实现 UDP实现最简单的公共聊天 完整代码 inet_ntoa()相关问题 UDP网络通信 在正式实现UDP网络通…

【Prometheus】层层解析prometheus如何监控k8s核心组件

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

【JavaEE】多线程进阶(2)

【JavaEE】多线程进阶(2) 一、JUC(java.util.concurrent) 的常⻅类1.1 Callable 接⼝1.2 ReentrantLock1.3 原子类原子类的特性:常见原子类:原子类的实例: 1.4 线程池1.5 信号量 Semaphore代码实例 1.6 CountDownLatch…

SpringBoot 如何调用 WebService 接口

前言 调用WebService接口的方式有很多&#xff0c;今天记录一下&#xff0c;使用 Spring Web Services 调用 SOAP WebService接口 一.导入依赖 <!-- Spring Boot Web依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId…

从Manus到OpenManus:多智能体协作框架如何重构AI生产力?

文章目录 Manus&#xff1a;封闭生态下的通用AI智能体OpenManus&#xff1a;开源社区的闪速复刻挑战与未来&#xff1a;框架落地的现实边界当前局限性未来演进方向 OpenManus使用指南1. 环境配置2. 参数配置3. 替换搜索引擎4. 运行效果 协作框架开启AI生产力革命 Manus&#xf…

1.5 双指针专题:有效三⻆形的个数(medium)

1.题目链接 611. 有效三角形的个数 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/valid-triangle-number/submissions/609232447/ 2.题目描述 给定⼀个包含⾮负整数的数组 nums &#xff0c;返回其中可以组成三⻆形三条边的三元组个数。 ⽰例 1: 输…

大数据学习(59)-DataX执行机制

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…