无用的知识又增加了-静态二值贝叶斯滤波
静态二值贝叶斯滤波
静态二值贝叶斯滤波(Static Binary Bayes Filter)是一种用于处理二值状态(例如,目标存在或不存在)的简单贝叶斯滤波器。这种滤波器通常应用于目标检测、传感器融合等场景,其中状态空间是离散且只有两个可能的状态。
基本概念
- 状态:二值状态 ( x x x ) 可以是 0 或 1,表示目标不存在或存在。
- 观测:观测 ( z z z ) 也可以是 0 或 1,表示没有检测到目标或检测到目标。
- 先验概率:目标存在的先验概率 ( P ( x = 1 ) P(x = 1) P(x=1) ) 和目标不存在的先验概率 ( P ( x = 0 ) P(x = 0) P(x=0) )。
- 似然概率:在给定状态 ( x x x) 的情况下,观测 ( z z z ) 的概率 ( P ( z ∣ x ) P(z | x) P(z∣x) )。
- 后验概率:在给定观测 ( z z z ) 的情况下,状态 ( x x x ) 的概率 ( P ( x ∣ z ) P(x | z) P(x∣z) )。
数学描述
假设我们有一个二值状态 ( x ∈ { 0 , 1 } x \in \{0, 1\} x∈{0,1} ),以及一个二值观测 ( z ∈ { 0 , 1 } z \in \{0, 1\} z∈{0,1} )。
1. 先验概率
定义目标存在的先验概率 ( P ( x = 1 ) P(x = 1) P(x=1) ) 和目标不存在的先验概率 ( P ( x = 0 ) P(x = 0) P(x=0) ):
P ( x = 1 ) = p 1 P ( x = 0 ) = p 0 = 1 − p 1 P(x = 1) = p_1\\ P(x = 0) = p_0 = 1 - p_1 P(x=1)=p1P(x=0)=p0=1−p1
2. 似然概率
定义在给定状态 ( x x x ) 的情况下,观测 ( z ) 的概率 ( P ( z ∣ x ) P(z | x) P(z∣x) ):
P ( z = 1 ∣ x = 1 ) = p 11 P ( z = 0 ∣ x = 1 ) = p 10 = 1 − p 11 P ( z = 1 ∣ x = 0 ) = p 01 P ( z = 0 ∣ x = 0 ) = p 00 = 1 − p 01 P(z = 1 | x = 1) = p_{11} \\ P(z = 0 | x = 1) = p_{10} = 1 - p_{11} \\ P(z = 1 | x = 0) = p_{01} \\ P(z = 0 | x = 0) = p_{00} = 1 - p_{01} P(z=1∣x=1)=p11P(z=0∣x=1)=p10=1−p11P(z=1∣x=0)=p01P(z=0∣x=0)=p00=1−p01
3. 后验概率
根据贝叶斯定理,计算在给定观测 ( z z z ) 的情况下,状态 ( x x x ) 的后验概率 ( P ( x ∣ z ) P(x | z) P(x∣z) ):
P ( x = 1 ∣ z ) = P ( z ∣ x = 1 ) ⋅ P ( x = 1 ) P ( z ) P ( x = 0 ∣ z ) = P ( z ∣ x = 0 ) ⋅ P ( x = 0 ) P ( z ) P(x = 1 | z) = \frac{P(z | x = 1) \cdot P(x = 1)}{P(z)} \\ P(x = 0 | z) = \frac{P(z | x = 0) \cdot P(x = 0)}{P(z)} P(x=1∣z)=P(z)P(z∣x=1)⋅P(x=1)P(x=0∣z)=P(z)P(z∣x=0)⋅P(x=0)
其中,( $P(z) $) 是归一化常数,可以通过全概率公式计算:
P ( z ) = P ( z ∣ x = 1 ) ⋅ P ( x = 1 ) + P ( z ∣ x = 0 ) ⋅ P ( x = 0 ) P(z) = P(z | x = 1) \cdot P(x = 1) + P(z | x = 0) \cdot P(x = 0) P(z)=P(z∣x=1)⋅P(x=1)+P(z∣x=0)⋅P(x=0)
示例代码
下面是一个简单的 C 语言实现示例,展示如何使用静态二值贝叶斯滤波进行状态估计。假设我们有一个简单的系统,状态和观测都是二值的。
#include <stdio.h>// 定义状态和观测的概率
double prior_prob_x1 = 0.5; // 目标存在的先验概率 P(x = 1)
double prior_prob_x0 = 0.5;
double likelihood_z1_given_x1 = 0.7; // P(z = 1 | x = 1)
double likelihood_z0_given_x1 = 0.3; // P(z = 0 | x = 1)
double likelihood_z1_given_x0 = 0.1; // P(z = 1 | x = 0)
double likelihood_z0_given_x0 = 0.9; // P(z = 0 | x = 0)// 计算归一化常数 P(z)
double calculate_normalization_constant(int z) {if (z == 1) {return (likelihood_z1_given_x1 * prior_prob_x1) + (likelihood_z1_given_x0 * (1 - prior_prob_x1));}else {return (likelihood_z0_given_x1 * prior_prob_x1) + (likelihood_z0_given_x0 * (1 - prior_prob_x1));}
}double _calculate_normalization_constant_(int z) {if (z == 1) {return (likelihood_z1_given_x0 * prior_prob_x0) + (likelihood_z1_given_x1 * (1 - prior_prob_x0));}else {return (likelihood_z0_given_x0 * prior_prob_x0) + (likelihood_z0_given_x1 * (1 - prior_prob_x0));}
}// 计算后验概率 P(x | z)
void update_belief(int z, double* posterior_prob_x1) {double normalization_constant = calculate_normalization_constant(z);if (z == 1) {*posterior_prob_x1 = (likelihood_z1_given_x1 * prior_prob_x1) / normalization_constant;}else {*posterior_prob_x1 = (likelihood_z0_given_x1 * prior_prob_x1) / normalization_constant;}
}void _update_belief_(int z, double* posterior_prob_x0) {double normalization_constant = _calculate_normalization_constant_(z);if (z == 1) {*posterior_prob_x0 = (likelihood_z1_given_x0 * prior_prob_x0) / normalization_constant;}else {*posterior_prob_x0 = (likelihood_z0_given_x0 * prior_prob_x0) / normalization_constant;}
}int main() {double posterior_prob_x1;double posterior_prob_x0;// 初始先验概率printf("Initial Prior Probability: P(x = 1) = %.4f\n", prior_prob_x1);printf("Initial Prior Probability: P(x = 0) = %.4f\n", prior_prob_x0);// 第一次观测int observation = 1; // 假设观测到的是 1printf("Observation: %d\n", observation);update_belief(observation, &posterior_prob_x1);printf("Posterior Probability after Observation: P(x = 1 | z = %d) = %.4f\n", observation, posterior_prob_x1);_update_belief_(observation, &posterior_prob_x0);printf("Posterior Probability after Observation: P(x = 0 | z = %d) = %.4f\n", observation, posterior_prob_x0);// 更新先验概率为上一次的后验概率prior_prob_x1 = posterior_prob_x1;prior_prob_x0 = posterior_prob_x0;// 第二次观测observation = 0; // 假设观测到的是 0printf("Observation: %d\n", observation);update_belief(observation, &posterior_prob_x1);printf("Posterior Probability after Observation: P(x = 1 | z = %d) = %.4f\n", observation, posterior_prob_x1);_update_belief_(observation, &posterior_prob_x0);printf("Posterior Probability after Observation: P(x = 0 | z = %d) = %.4f\n", observation, posterior_prob_x0);// 更新先验概率为上一次的后验概率prior_prob_x1 = posterior_prob_x1;prior_prob_x0 = posterior_prob_x0;// 第三次观测observation = 0; // 假设观测到的是 0printf("Observation: %d\n", observation);update_belief(observation, &posterior_prob_x1);printf("Posterior Probability after Observation: P(x = 1 | z = %d) = %.4f\n", observation, posterior_prob_x1);_update_belief_(observation, &posterior_prob_x0);printf("Posterior Probability after Observation: P(x = 0 | z = %d) = %.4f\n", observation, posterior_prob_x0);return 0;
}
详细步骤解释
-
定义概率:
- 定义目标存在的先验概率
prior_prob_x1。 - 定义似然概率
likelihood_z1_given_x1、likelihood_z0_given_x1、likelihood_z1_given_x0和likelihood_z0_given_x0。
- 定义目标存在的先验概率
-
计算归一化常数:
calculate_normalization_constant函数根据观测 ( z z z ) 计算归一化常数 ( P ( z ) P(z) P(z) )。
-
更新后验概率:
update_belief函数根据贝叶斯定理计算后验概率 ( $P(x | z) $)。- 根据观测 ( z z z ) 更新后验概率
posterior_prob_x1。
-
打印结果:
- 打印初始先验概率。
- 进行多次观测,并打印每次观测后的后验概率。
通过这些步骤,你可以实现一个简单的静态二值贝叶斯滤波器,并根据观测数据不断更新状态估计。这个示例展示了基本的原理,实际应用中可能需要更复杂的模型和更多的优化。
相关文章:
无用的知识又增加了-静态二值贝叶斯滤波
静态二值贝叶斯滤波 静态二值贝叶斯滤波(Static Binary Bayes Filter)是一种用于处理二值状态(例如,目标存在或不存在)的简单贝叶斯滤波器。这种滤波器通常应用于目标检测、传感器融合等场景,其中状态空间…...
cesium相机(camera)控制
camera基础属性: Cesium 中的相机通过 viewer.camera 来获取和操作。 position:相机的位置,用 Cartesian3 坐标表示,表示的是相机在世界坐标系中的绝对位置。 viewer.camera.position Cesium.Cartesian3.fromDegrees(longitude, latitude, height);dir…...
Java 反射
一、基本概念 Java反射机制是Java语言的一种动态特性,允许程序在运行时检查和操作类、接口、字段和方法。反射机制使得Java程序可以在运行时获取关于类的详细信息,并且可以动态地调用类的方法、访问类的字段等。反射机制主要涉及以下几个核心类和接口&a…...
【目标检测01】真实框、预测框、锚框和交并比IoU
文章目录 1. 任务定义2. 基本概念2.1 边界框(bounding box)2.2 真实框、预测框和锚框2.3 交并比 (IoU)2.4 代码实现 1. 任务定义 目标检测的主要目的是让计算机可以自动识别图片或者视频帧中所有目标的类别,并在该目标周围绘制边界框&#x…...
青少年编程能力等级测评CPA C++五级试卷(2)
青少年编程能力等级测评CPA C++五级试卷(2) 一、单项选择题(共15题,每题3分,共45分) CP5_2_1.下列有关类的重用方法的叙述中,不正确的是( )。 A.类的继承可以实现类的重用 B.类的组合可以实现类的重用 C.类的封装可以实现类的重用 D.类的继承和类的组合都可…...
SATA数据线
SATA 数据线(Serial ATA 数据线)是一种用于连接计算机主板与存储设备(如硬盘、固态硬盘和光驱)的线缆。它的主要作用是传输数据,允许计算机与这些设备之间进行高效的数据交换。 主要作用 数据传输:SATA 数…...
《云原生安全攻防》-- K8s攻击案例:权限维持的攻击手法
在本节课程中,我们将一起深入了解K8s权限维持的攻击手法,通过研究这些攻击手法的技术细节,来更好地认识K8s权限维持所带来的安全风险。 在这个课程中,我们将学习以下内容: K8s权限维持:简单介绍K8s权限维持…...
回溯算法-Java【力扣】【算法学习day.14】
前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴&am…...
从本地到云端:跨用户请求问题的完美解决方案
对于某些单个请求或响应中含有多个用户信息的服务,SDK提供了一套基于统一的UCS拆分和聚合的解决方案供开发者使用。 请求拆分 对于跨用户服务的请求,我们提供了两个处理方案: 【1】根据用户信息拆分请求: 场景:请求内…...
leetcode day4 409+5
409 最长回文串 给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的 最长的 回文串 的长度。 在构造过程中,请注意 区分大小写 。比如 "Aa" 不能当做一个回文字符串。 示例 1: 输入:s "abccccdd" 输出:7 解…...
英语语法学习框架(考研)
一、简单句 英语都是由简单句构成,简单句共有五种基本句型:①主谓;②主谓宾;③主谓宾宾补;④主谓宾间宾(间接宾语);⑤主系表; 其中谓语是句子最重要的部分,谓…...
基于neo4j的学术论文关系管理系统
正在为毕业设计头疼?又或者在学术研究中总是找不到像样的工具来管理浩瀚的文献资料?今天给大家介绍一款超实用的工具——基于Neo4j的学术论文关系管理系统,让你轻松搞定学术文献的管理与展示!🎉 系统的核心是什么呢&a…...
C#中的委托、匿名方法、Lambda、Action和Func
委托 委托概述 委托是存有对某个方法的引用的一种引用类型变量。定义方法的类型,可以把一个方法当作另一方法的参数。所有的委托(Delegate)都派生自 System.Delegate 类。委托声明决定了可由该委托引用的方法。 # 声明委托类型 委托类型声…...
IDEA关联Tomcat——最新版本IDEA 2024
1.链接Tomcat到IDEA上 添加Tomcat到IDEA上有两种方式: 第一种: (1)首先,来到欢迎界面,找到左侧的Customize选项 (2)然后找到Build、Execution、Deployment选项 (3&am…...
【如何获取股票数据18】Python、Java等多种主流语言实例演示获取股票行情api接口之沪深A股解禁限售数据获取实例演示及接口API说明文档
最近一两年内,股票量化分析逐渐成为热门话题。而从事这一领域工作的第一步,就是获取全面且准确的股票数据。因为无论是实时交易数据、历史交易记录、财务数据还是基本面信息,这些数据都是我们进行量化分析时不可或缺的宝贵资源。我们的主要任…...
NVR小程序接入平台/设备EasyNVR多品牌NVR管理工具/设备的多维拓展与灵活应用
在数字化安防时代,NVR批量管理软件/平台EasyNVR作为一种先进的视频监控系统设备,正逐步成为各个领域监控解决方案的首选。NVR批量管理软件/平台EasyNVR作为一款基于端-边-云一体化架构的国标视频融合云平台,凭借其部署简单轻量、功能多样、兼…...
GPT-4o 和 GPT-4 Turbo 模型之间的对比
GPT-4o 和 GPT-4 Turbo 之间的对比 备注 要弄 AI ,不同模型之间的对比就比较重要。 GPT-4o 是 GPT-4 Turbo 的升级版本,能够提供比 GPT-4 Turbo 更多的内容和信息,但成功相对来说更高一些。 第三方引用 在 2024 年 5 月 13 日࿰…...
gin入门教程(10):实现jwt认证
使用 github.com/golang-jwt/jwt 实现 JWT(JSON Web Token)可以有效地进行用户身份验证,这个功能往往在接口前后端分离的应用中经常用到。以下是一个基本的示例,演示如何在 Gin 框架中实现 JWT 认证。 目录结构 /hello-gin │ ├── cmd/ …...
Python 基础语法 - 数据类型
顾名思义,计算机就是用来做数学计算的机器,因此,计算机程序理所当然的可以处理各种数值。但是,计算机能处理的远远不止数值,还可以处理文本,图形,音频,视频,网页等各种各…...
自托管无代码数据库Undb
什么是 Undb ? Undb 是一个无代码平台,也可以作为后端即服务 (BaaS)。它基于 SQLite,可以使用 Bun 打包成二进制文件用于后端服务。此外,它可以通过 Docker 部署为服务,提供表管理的 UI。 软件特点: ⚡ 无…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...
【堆垛策略】设计方法
堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下…...
pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决
问题: pgsql数据库通过备份数据库文件进行还原时,如果表中有自增序列,还原后可能会出现重复的序列,此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。 点击菜单“其它”-》“序列”,…...
用 FFmpeg 实现 RTMP 推流直播
RTMP(Real-Time Messaging Protocol) 是直播行业中常用的传输协议。 一般来说,直播服务商会给你: ✅ 一个 RTMP 推流地址(你推视频上去) ✅ 一个 HLS 或 FLV 拉流地址(观众观看用)…...
