目录

      • 一、基本原理
      • 二、案例演示
        • 2.1 未平滑处理
        • 2.2 Laplace平滑处理
      • 三、Python实现

一、基本原理

朴素贝叶斯思想:依靠特征概率去预测分类,针对于代分类的样本,会求解在该样本出现的条件下,各个类别出现的概率,哪个类别概率最大则取哪个类别。其核心原理来自于贝叶斯公式:
P ( A ∣ B ) = P ( B ∣ A ) ∗ P ( A ) P ( B ) P(A|B)=\frac{P(B|A)*P(A)}{P(B)} P(AB)=P(B)P(BA)P(A)
其中, P ( A ) P(A) P(A)称之为先验概率, P ( A ∣ B ) P(A|B) P(AB)称之为后验概率。结合先验和后验概率的基本概念,可以将贝叶斯公式转化理解为:在事件B发生之后,事件A的发生的概率将发生调整,而调整的幅度则是这个调整因子 P ( B ∣ A ) P ( B ) \frac{P(B|A)}{P(B)} P(B)P(BA)。当这个调整因为为1时,则可以理解为事件B的发生不会对事件A造成任何影响,在统计学的角度上称事件A和事件B相互独立,即 P ( A B ) = P ( A ) P ( B ) P(AB)=P(A)P(B) P(AB)=P(A)P(B)

概念定义
先验概率基于常识或认识对于某个事件A发生的概率假定
后验概率在某个事件B发生之后,对于事件A发生概率的修正假定

接下来,以生活中的案例进一步理解先验和后验概率。例如,一位股市小白预测大A明天下跌的概率是50%,那么这里的50%则是先验概率;再被多次割韭菜之后,这位小白则总结了一套规律,在得知大A今天上涨10%后,预测大A明天下跌概率为80%;那么这里的80%则为后验概率

刚刚介绍的均是贝叶斯公式相关的内容,接下来对【朴素】这一词进行深入说明。通常在该算法应用过程中,事件B作为特征,事件A作为类别,则可转化为
P ( 类别 ∣ 特征 ) = P ( 特征 ∣ 类别 ) ∗ P ( 类别 ) P ( 特征 ) P(类别|特征)=\frac{P(特征|类别)*P(类别)}{P(特征)} P(类别特征)=P(特征)P(特征类别)P(类别)

实际案例中,通常特征都会有多个,这里就有个前提假设条件,也正是朴素一词的来源,它是需要特征之间相互独立的,上述公式即可分解为
P ( 类别 ∣ 特征 ) = P ( 特 征 1 ∣ 类别 ) ∗ P ( 特 征 2 ∣ 类别 ) ∗ . . . P ( 特 征 n ∣ 类别 ) ∗ P ( 类别 ) P ( 特征 ) P(类别|特征)=\frac{P(特征_{1}|类别)*P(特征_2|类别)*...P(特征_n|类别)*P(类别)}{P(特征)} P(类别特征)=P(特征)P(1类别)P(2类别)...P(n类别)P(类别)

二、案例演示

以实际案例对朴素贝叶斯算法进行分类加深理解,现有一信贷用户数据集,特征包含三个方面:信用水平、收入水平、工作稳定性。类别为是否逾期还款。现根据如下数据,预测一名用户信用水平为Good,收入水平为Low,工作稳定性为Unstable,是否会逾期还款。数据如下所示

用户ID信用水平收入水平工作稳定性是否逾期还款
1BadLowUnstableYes
2BadHighStableNo
3BadMediumStableYes
4GoodLowStableNo
5GoodHighUnstableYes
6MediumHighStableNo
7MediumLowUnstableYes
8GoodMediumStableNo
9MediumMediumStableYes
10BadHighUnstableNo
2.1 未平滑处理

(1)计算先验概率
P ( 是否逾期还款 = Y e s ) = 5 / 10 = 0.5 P ( 是否逾期还款 = N o ) = 5 / 10 = 0.5 P(是否逾期还款=Yes)=5/10=0.5\\ P(是否逾期还款=No)=5/10=0.5 P(是否逾期还款=Yes)=5/10=0.5P(是否逾期还款=No)=5/10=0.5
(2)计算条件概率
P ( 信用水平 = G o o d ∣ 是否逾期还款 = Y e s ) = 1 / 5 P ( 收入水平 = L o w ∣ 是否逾期还款 = Y e s ) = 2 / 5 P ( 工作稳定性 = U n s t a b l e ∣ 是否逾期还款 = Y e s ) = 3 / 5 P(信用水平=Good|是否逾期还款=Yes)=1/5\\ P(收入水平=Low|是否逾期还款=Yes)=2/5\\ P(工作稳定性=Unstable|是否逾期还款=Yes)=3/5 P(信用水平=Good是否逾期还款=Yes)=1/5P(收入水平=Low是否逾期还款=Yes)=2/5P(工作稳定性=Unstable是否逾期还款=Yes)=3/5

P ( 信用水平 = G o o d ∣ 是否逾期还款 = N o ) = 2 / 5 P ( 收入水平 = L o w ∣ 是否逾期还款 = N o ) = 1 / 5 P ( 工作稳定性 = U n s t a b l e ∣ 是否逾期还款 = N o ) = 1 / 5 P(信用水平=Good|是否逾期还款=No)=2/5\\ P(收入水平=Low|是否逾期还款=No)=1/5\\ P(工作稳定性=Unstable|是否逾期还款=No)=1/5 P(信用水平=Good是否逾期还款=No)=2/5P(收入水平=Low是否逾期还款=No)=1/5P(工作稳定性=Unstable是否逾期还款=No)=1/5

(3)预测类别
考虑各特征概率不影响最终类别判断,在此忽略各特征概率计算
P ( 是否逾期还款 = Y e s ∣ 信用水平 = G o o d , 收入水平 = L o w , 工作稳定性 = U n s t a b l e ) ≈ P ( 信用水平 = G o o d ∣ 是否逾期还款 = Y e s ) ∗ P ( 收入水平 = L o w ∣ 是否逾期还款 = Y e s ) ∗ P ( 工作稳定性 = U n s t a b l e ∣ 是否逾期还款 = Y e s ) ∗ P ( 是否逾期还款 = Y e s ) = 1 / 5 ∗ 2 / 5 ∗ 3 / 5 ∗ 1 / 2 = 0.024 P(是否逾期还款=Yes|信用水平= Good,收入水平=Low,工作稳定性=Unstable) \approx \\P(信用水平=Good|是否逾期还款=Yes) *P(收入水平=Low|是否逾期还款=Yes)*\\P(工作稳定性=Unstable|是否逾期还款=Yes)*P(是否逾期还款=Yes)=1/5*2/5*3/5*1/2=0.024 P(是否逾期还款=Yes信用水平=Good,收入水平=Low,工作稳定性=Unstable)P(信用水平=Good是否逾期还款=Yes)P(收入水平=Low是否逾期还款=Yes)P(工作稳定性=Unstable是否逾期还款=Yes)P(是否逾期还款=Yes)=1/52/53/51/2=0.024

P ( 是否逾期还款 = N o ∣ 信用水平 = G o o d , 收入水平 = L o w , 工作稳定性 = U n s t a b l e ) ≈ P ( 信用水平 = G o o d ∣ 是否逾期还款 = N o ) ∗ P ( 收入水平 = L o w ∣ 是否逾期还款 = N o ) ∗ P ( 工作稳定性 = U n s t a b l e ∣ 是否逾期还款 = N o ) ∗ P ( 是否逾期还款 = N o ) = 2 / 5 ∗ 1 / 5 ∗ 1 / 5 ∗ 1 / 2 = 0.008 P(是否逾期还款=No|信用水平= Good,收入水平=Low,工作稳定性=Unstable) \approx \\P(信用水平=Good|是否逾期还款=No) *P(收入水平=Low|是否逾期还款=No)*\\P(工作稳定性=Unstable|是否逾期还款=No)*P(是否逾期还款=No)=2/5*1/5*1/5*1/2=0.008 P(是否逾期还款=No信用水平=Good,收入水平=Low,工作稳定性=Unstable)P(信用水平=Good是否逾期还款=No)P(收入水平=Low是否逾期还款=No)P(工作稳定性=Unstable是否逾期还款=No)P(是否逾期还款=No)=2/51/51/51/2=0.008

标准化后,逾期概率为75%,故判断这名用户将会逾期还款(信用水平为Good,收入水平为Low,工作稳定性为Unstable)

2.2 Laplace平滑处理

当预测样本出现了训练集未曾出现的特征组合时,那么在计算特征概率时,数值直接为0,直接影响最终分类识别。例如,如果训练集中无信用水平为Good+逾期为Yes的样本,则P(Good|Yes)=0,导致所有信用水平为Good的逾期样本将无法识别。此时,就需要对计算概率进行修正,修正方式如下:
P s m o o t h ( x i ∣ y ) = c o u n t ( x i , y ) + α c o u n t ( y ) + K ∗ α P_{smooth}(x_i|y)=\frac{count(x_i,y)+\alpha}{count(y)+K*\alpha} Psmooth(xiy)=count(y)+Kαcount(xi,y)+α
其中, α \alpha α为平滑参数,通常取1; K为当前特征的数量(例如信用水平有Bad/Good/Medium,则K=3)

(1) 平滑处理后的条件概率
P ( 信用水平 = G o o d ∣ 是否逾期还款 = Y e s ) = ( 1 + 1 ) / ( 3 + 5 ) = 1 / 4 P ( 收入水平 = L o w ∣ 是否逾期还款 = Y e s ) = ( 2 + 1 ) / ( 3 + 5 ) = 3 / 8 P ( 工作稳定性 = U n s t a b l e ∣ 是否逾期还款 = Y e s ) = ( 3 + 1 ) / ( 2 + 5 ) = 4 / 7 P(信用水平=Good|是否逾期还款=Yes)=(1+1)/(3+5)=1/4\\ P(收入水平=Low|是否逾期还款=Yes)=(2+1)/(3+5)=3/8\\ P(工作稳定性=Unstable|是否逾期还款=Yes)=(3+1)/(2+5)=4/7 P(信用水平=Good是否逾期还款=Yes)=(1+1)/(3+5)=1/4P(收入水平=Low是否逾期还款=Yes)=(2+1)/(3+5)=3/8P(工作稳定性=Unstable是否逾期还款=Yes)=(3+1)/(2+5)=4/7

P ( 信用水平 = G o o d ∣ 是否逾期还款 = N o ) = ( 1 + 2 ) / ( 3 + 5 ) = 3 / 8 P ( 收入水平 = L o w ∣ 是否逾期还款 = N o ) = ( 1 + 1 ) / ( 3 + 5 ) = 1 / 4 P ( 工作稳定性 = U n s t a b l e ∣ 是否逾期还款 = N o ) = ( 1 + 1 ) / ( 2 + 5 ) = 2 / 7 P(信用水平=Good|是否逾期还款=No)=(1+2)/(3+5)=3/8\\ P(收入水平=Low|是否逾期还款=No)=(1+1)/(3+5)=1/4\\ P(工作稳定性=Unstable|是否逾期还款=No)=(1+1)/(2+5)=2/7 P(信用水平=Good是否逾期还款=No)=(1+2)/(3+5)=3/8P(收入水平=Low是否逾期还款=No)=(1+1)/(3+5)=1/4P(工作稳定性=Unstable是否逾期还款=No)=(1+1)/(2+5)=2/7

(2) 平滑处理预测

P ( 是否逾期还款 = Y e s ∣ 信用水平 = G o o d , 收入水平 = L o w , 工作稳定性 = U n s t a b l e ) ≈ P ( 信用水平 = G o o d ∣ 是否逾期还款 = Y e s ) ∗ P ( 收入水平 = L o w ∣ 是否逾期还款 = Y e s ) ∗ P ( 工作稳定性 = U n s t a b l e ∣ 是否逾期还款 = Y e s ) ∗ P ( 是否逾期还款 = Y e s ) = 1 / 4 ∗ 3 / 8 ∗ 4 / 7 ∗ 1 / 2 ≈ 0.0268 P(是否逾期还款=Yes|信用水平= Good,收入水平=Low,工作稳定性=Unstable) \approx \\P(信用水平=Good|是否逾期还款=Yes) *P(收入水平=Low|是否逾期还款=Yes)*\\P(工作稳定性=Unstable|是否逾期还款=Yes)*P(是否逾期还款=Yes)=1/4*3/8*4/7*1/2\approx0.0268 P(是否逾期还款=Yes信用水平=Good,收入水平=Low,工作稳定性=Unstable)P(信用水平=Good是否逾期还款=Yes)P(收入水平=Low是否逾期还款=Yes)P(工作稳定性=Unstable是否逾期还款=Yes)P(是否逾期还款=Yes)=1/43/84/71/20.0268

P ( 是否逾期还款 = N o ∣ 信用水平 = G o o d , 收入水平 = L o w , 工作稳定性 = U n s t a b l e ) ≈ P ( 信用水平 = G o o d ∣ 是否逾期还款 = N o ) ∗ P ( 收入水平 = L o w ∣ 是否逾期还款 = N o ) ∗ P ( 工作稳定性 = U n s t a b l e ∣ 是否逾期还款 = N o ) ∗ P ( 是否逾期还款 = N o ) = 3 / 8 ∗ 1 / 4 ∗ 2 / 7 ∗ 1 / 2 ≈ 0.0133 P(是否逾期还款=No|信用水平= Good,收入水平=Low,工作稳定性=Unstable) \approx \\P(信用水平=Good|是否逾期还款=No) *P(收入水平=Low|是否逾期还款=No)*\\P(工作稳定性=Unstable|是否逾期还款=No)*P(是否逾期还款=No)=3/8*1/4*2/7*1/2\approx0.0133 P(是否逾期还款=No信用水平=Good,收入水平=Low,工作稳定性=Unstable)P(信用水平=Good是否逾期还款=No)P(收入水平=Low是否逾期还款=No)P(工作稳定性=Unstable是否逾期还款=No)P(是否逾期还款=No)=3/81/42/71/20.0133

标准化后,逾期概率为66.7%,故仍判断这名用户还是会逾期还款

三、Python实现

接下来以Python的方式实现上述2种处理方式

# 朴素贝叶斯
import numpy as np
import pandas as pd
data = pd.DataFrame({'credit_history':['Bad','Bad','Bad','Good','Good','Medium','Medium','Good','Medium','Bad'],'income_level':['Low','High','Medium','Low','High','High','Low','Medium','Medium','High'],'job_stablity':['Unstable','Stable','Stable','Stable','Unstable','Stable','Unstable','Stable','Stable','Unstable'],'is_delay':['Yes','No','Yes','No','Yes','No','Yes','No','Yes','No']})def cal_prob(data_list,label_list,alpha):all_label       = set(np.unique(label_list))category,counts = np.unique(data_list,return_counts=True)retain_label    = all_label.difference(category)n = len(all_label)count_dict = dict(zip(category,counts))for label in retain_label:if count_dict.get(label) is None:count_dict[label]=0prob_dict = {key:(value+alpha)/(sum(count_dict.values())+alpha*n) for key,value in count_dict.items()}return prob_dictdelay_prob       = cal_prob(data['is_delay'],[],0)# 不使用拉普拉斯平滑处理
credict_yes_prob = cal_prob(data[data['is_delay']=='Yes']['credit_history'],[],0)
income_yes_prob  = cal_prob(data[data['is_delay']=='Yes']['income_level'],[],0)
job_yes_stablity = cal_prob(data[data['is_delay']=='Yes']['job_stablity'],[],0)credict_no_prob = cal_prob(data[data['is_delay']=='No']['credit_history'],[],0)
income_no_prob  = cal_prob(data[data['is_delay']=='No']['income_level'],[],0)
job_no_stablity = cal_prob(data[data['is_delay']=='No']['job_stablity'],[],0)credict_yes_prob_smooth = cal_prob(data[data['is_delay']=='Yes']['credit_history'],data['credit_history'],1)
income_yes_prob_smooth  = cal_prob(data[data['is_delay']=='Yes']['income_level'],data['income_level'],1)
job_yes_stablity_smooth = cal_prob(data[data['is_delay']=='Yes']['job_stablity'],data['job_stablity'],1)credict_no_prob_smooth = cal_prob(data[data['is_delay']=='No']['credit_history'],data['credit_history'],1)
income_no_prob_smooth  = cal_prob(data[data['is_delay']=='No']['income_level'],data['income_level'],1)
job_no_stablity_smooth = cal_prob(data[data['is_delay']=='No']['job_stablity'],data['job_stablity'],1)# 未平滑处理:推测一个人信用GOOD,收入水平Low,工作Unstable 情况下是否会逾期还款
predict_yes_delay = delay_prob['Yes']*credict_yes_prob['Good']*income_yes_prob['Low']*job_yes_stablity['Unstable']
predict_no_delay = delay_prob['No']*credict_no_prob['Good']*income_no_prob['Low']*job_no_stablity['Unstable']# 拉普拉斯平滑处理:推测一个人信用GOOD,收入水平Low,工作Unstable 情况下是否会逾期还款
predict_yes_delay_smooth = delay_prob['Yes']*credict_yes_prob_smooth['Good']*income_yes_prob_smooth['Low']*job_yes_stablity_smooth['Unstable']
predict_no_delay_smooth = delay_prob['No']*credict_no_prob_smooth['Good']*income_no_prob_smooth['Low']*job_no_stablity_smooth['Unstable']print('未平滑处理,标准化逾期概率:{}%'.format(round(100*predict_yes_delay/(predict_yes_delay+predict_no_delay),2)))
print('平滑处理,标准化逾期概率:{}%'.format(round(100*predict_yes_delay_smooth/(predict_yes_delay_smooth+predict_no_delay_smooth),2)))

在这里插入图片描述

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

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

相关文章

RAG从入门到高阶(二):Retrieve-and-Rerank

在上一篇教程中,我们了解了 Naive RAG 的基本原理和实现。它就像一个刚刚学会查找资料的新手,虽然能找到一些信息,但有时候找到的并不够精准,甚至会有一些无关的干扰。 今天,我们将介绍 Retrieve-and-Rerank RAG&…

【脚本】Linux磁盘目录挂载脚本(不分区)

以下是一个不带分区,直接挂载整个磁盘到指定目录的脚本。该脚本会检查磁盘是否已挂载,自动创建文件系统(可选),并配置开机自动挂载: #!/bin/bash# 磁盘直接挂载脚本(不分区) # 使用…

壁纸网站分享

壁纸网站链接: 1.Microsoft Design - Wallpapers:https://wallpapers.microsoft.design/?refwww.8kmm.com 2.哲风壁纸:https://haowallpaper.com/wallpaperForum 3.壁纸湖:https://bizihu.com/ 4.极简壁纸:https://bz…

XILINX FPGA如何做时序分析和时序优化?

时序分析和时序优化是FPGA开发流程中关键步骤,确保设计在目标时钟频率下正确运行,避免时序违例(如建立时间或保持时间不足)。以下以Xilinx Kintex-7系列FPGA为例,详细介绍时序分析和时序优化的方法、工具、流程及实用技…

linux screen轻松管理长时间运行的任务

以下是针对 Alpine Linux 环境下 screen 的安装与使用指南,结合迁移数据场景的具体操作步骤: 1. 安装 screen‌ 在 Alpine Linux 中需通过 apk 安装(非默认预装): apk add screen 验证安装: screen --…

VR制作公司业务范围

VR制作公司概念、能力与服务范围 虚拟现实(Virtual Reality, VR)技术,作为当代科技的前沿领域,通过计算机技术模拟出真实或虚构的世界环境,使用户能够沉浸其中并进行交互体验。VR制作公司,是这一领域的专业…

STM32之28BYJ-48步进电机驱动

目录 一、引言 二、28BYJ-48步进电机简介 2.1 基本特性 2.2 内部结构 2.3 工作模式 2.4 驱动原理 2.5 性能特点 2.6 驱动方案 2.7 使用注意事项 三、ULN2003驱动板简介 3.1 基本概述 3.2 电路结构 3.3 驱动原理 3.4 接口定义 3.5 使用注意事项 四、…

TDSQL如何查出某一列中的逗号数量

在 TDSQL 中,要统计某一列里逗号的数量,可借助字符串函数来实现。下面为你介绍具体的实现方法: sql SELECT your_column,LENGTH(your_column) - LENGTH(REPLACE(your_column, ,, )) AS comma_count FROM your_table;下面对这段 SQL 进行详细…

如何避免服务器出现故障情况?

服务器作为存储数据信息的重要网络设备,能够保护企业重要数据的安全性,但是随着网络攻击的不断拓展,各个行业中的服务器也会遭受到不同类型的网络攻击,严重的会导致服务器业务中断出现故障,给企业带来巨大的经济损失。…

C++ 优先级队列

一、引言 队列的特性是先进先出。优先级队列的本质是一个有序队列,根据成员的优先级,对队列中的成员进行排序。优先级队列默认是大顶堆,即堆顶元素最大 二、常用函数 empty()size()top()push()emplace()pop()swap() 三、代码示例 class …

学习笔记(27):线性回归基础与实战:从原理到应用的简易入门

线性回归:通过拟合线性方程(如 \(y w_1x_1 w_2x_2 b\))预测房价、销售额等连续变量,需掌握特征标准化、正则化(L1/L2)防止过拟合。应用场景:金融领域的股价预测、电商用户消费金额预估。 线性…

kubesphere安装openelb

kubesphere安装openelb 1.安装openelb 2.修改配置文件 1.命令直接修改 $ kubectl edit configmap kube-proxy -n kube-system ipvs:strictARP: truemode: "ipvs"重启kube-proxy组件 $ kubectl rollout restart daemonset kube-proxy -n kube-system 2.通过界面去修…

数据库10:MySQL的数据类型与约束和属性设置,数据模式

一.数据类型 整数类型(integer types) 数据类型字节有符号范围无符号范围说明tinyint1-128 ~ 1270 ~ 255非常小的整数smallint2-32,768 ~ 32,7670 ~ 65,535小整数mediumint3-8,388,608 ~ 8,388,6070 ~ 16,777,215中等整数int4-2,147,483,648 ~ 2,147,4…

uniapp项目中node_modules\sass\sass.dart.js的体积过大怎么处理

用Node-Sass替代(如果适用):虽然Dart Sass是Sass的主要实现之一,但有时它可能会比Node-Sass占用更多的空间。如果你不需要Dart Sass特有的功能,可以考虑切换到Node-Sass(注意Node-Sass已停止维护&#xff0…

界面组件DevExpress WPF中文教程:Grid - 如何获取节点?

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

Kalibr解毒填坑(一):相机标定失败

文章目录 📚简介🍀 解毒踩坑🚀 主点错误📚简介 相机内参标定通常涉及确定焦距(fx, fy)、主点(cx, cy)、畸变系数(径向和切向)等参数。Kalibr是一个开源的标定工具,支持多相机、IMU和联合标定,适用于复杂的传感器系统。 但kalibar标定相机内参受到数据和配置影…

Swift 的基础设计哲学是 “通过模块化组合实现安全与效率的平衡“,就像用标准化工业零件建造摩天大楼

一、基础模块:地基与钢结构(Basic Types & Collections) 比喻:积木与工具箱,决定建筑的稳定性和容量。场景:搭建程序的基础结构,如变量、数据类型、运算符。包含:基本语法、运算…

【RK3568+PG2L50H开发板实验例程】Linux部分/FPGA dma_memcpy_demo 读写案例

本原创文章由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处(www.meyesemi.com) 1.案例简介 案例功能描述:ARM端利用 PCIe总线对 FPGA的 DRAM执行读写操作。应用程序通过 ioctl函数触发 …

7.3实验部分

一、HDFS基础操作 以root用户登录,创建如下HDFS目录: /dw/yourname/input hadoop fs -mkdir -p /dw/zhanggengchen/input /dw/yourname/output hadoop fs -mkdir -p /dw/zhanggengchen/output 输出结果: [rootmaster hadoop-mapreduce]# ha…

[nett5: AddressedEnvelope]-源码解析

AddressedEnvelope AddressedEnvelope<M, A> 表示一个带有发送者和接收者地址的消息封装&#xff0c;常用于处理如 UDP 数据报这类含地址信息的通信场景。 public interface AddressedEnvelope<M, A extends SocketAddress> {// 实际的消息内容M content();// 消…