DeepSORT(目标跟踪算法)中的解三角方程计算标准化残差(解线性方程组)

DeepSORT(目标跟踪算法)中的解三角方程计算标准化残差(解线性方程组)

flyfish

《DeepSORT(目标跟踪算法)中的计算观测值与状态估计的马氏距离》这篇文章介绍了Cholesky 分解。Cholesky 分解将协方差矩阵分解成下三角矩阵,使得求解过程可以高效进行。这篇是利用 solve_triangular 函数,我们可以高效地解这些线性方程组,从而得到标准化残差和更新后的状态。
即上篇解释这句代码cholesky_factor = np.linalg.cholesky(covariance)
这篇解释下两句代码

d = measurements - mean
z = scipy.linalg.solve_triangular(cholesky_factor, d.T, lower=True, check_finite=False,overwrite_b=True)

验证下三角方程组

我们之前的下三角矩阵 L L L 和向量 b \mathbf{b} b 是:
L = [ 2 0 0 3 1 0 1 − 2 1 ] , b = [ 4 5 − 1 ] L = \begin{bmatrix} 2 & 0 & 0 \\ 3 & 1 & 0 \\ 1 & -2 & 1 \end{bmatrix}, \quad \mathbf{b} = \begin{bmatrix} 4 \\ 5 \\ -1 \end{bmatrix} L= 231012001 ,b= 451
我们可以使用 scipy.linalg.solve_triangular 来求解方程 L x = b L \mathbf{x} = \mathbf{b} Lx=b

import numpy as np
from scipy.linalg import solve_triangular# 定义下三角矩阵 L 和向量 b
L = np.array([[2, 0, 0],[3, 1, 0],[1, -2, 1]
])
b = np.array([4, 5, -1])# 解三角方程 Lx = b
x = solve_triangular(L, b, lower=True)print("解 x:", x)

验证上三角方程组

我们之前的上三角矩阵 U U U 和向量 b \mathbf{b} b 是:
U = [ 2 − 1 3 0 1 5 0 0 4 ] , b = [ 4 6 8 ] U = \begin{bmatrix} 2 & -1 & 3 \\ 0 & 1 & 5 \\ 0 & 0 & 4 \end{bmatrix}, \quad \mathbf{b} = \begin{bmatrix} 4 \\ 6 \\ 8 \end{bmatrix} U= 200110354 ,b= 468
同样,我们可以使用 scipy.linalg.solve_triangular 来求解方程 U x = b U \mathbf{x} = \mathbf{b} Ux=b

# 定义上三角矩阵 U 和向量 b
U = np.array([[2, -1, 3],[0, 1, 5],[0, 0, 4]
])
b_upper = np.array([4, 6, 8])# 解三角方程 Ux = b
x_upper = solve_triangular(U, b_upper, lower=False)print("解 x (上三角):", x_upper)

运行结果

当你运行上述代码时,你应该看到与我们手动计算结果相同的解。

解 x (下三角): [ 2. -1. -5.]
解 x (上三角): [-3. -4.  2.]

手动计算过程

三角矩阵

三角矩阵是一种特殊的方阵,矩阵中所有在对角线一侧的元素都是零。根据零元素的位置,三角矩阵可以分为两种类型:

  1. 下三角矩阵 (Lower Triangular Matrix)
  • 所有非零元素都在主对角线及其以下的位置。
  • 形式如下: L = [ l 11 0 0 … 0 l 21 l 22 0 … 0 l 31 l 32 l 33 … 0 ⋮ ⋮ ⋮ ⋱ 0 l n 1 l n 2 l n 3 … l n n ] L = \begin{bmatrix} l_{11} & 0 & 0 & \ldots & 0 \\ l_{21} & l_{22} & 0 & \ldots & 0 \\ l_{31} & l_{32} & l_{33} & \ldots & 0 \\ \vdots & \vdots & \vdots & \ddots & 0 \\ l_{n1} & l_{n2} & l_{n3} & \ldots & l_{nn} \end{bmatrix} L= l11l21l31ln10l22l32ln200l33ln30000lnn
  1. 上三角矩阵 (Upper Triangular Matrix)
  • 所有非零元素都在主对角线及其以上的位置。
  • 形式如下: U = [ u 11 u 12 u 13 … u 1 n 0 u 22 u 23 … u 2 n 0 0 u 33 … u 3 n ⋮ ⋮ ⋮ ⋱ u ( n − 1 ) n 0 0 0 … u n n ] U = \begin{bmatrix} u_{11} & u_{12} & u_{13} & \ldots & u_{1n} \\ 0 & u_{22} & u_{23} & \ldots & u_{2n} \\ 0 & 0 & u_{33} & \ldots & u_{3n} \\ \vdots & \vdots & \vdots & \ddots & u_{(n-1)n} \\ 0 & 0 & 0 & \ldots & u_{nn} \end{bmatrix} U= u11000u12u2200u13u23u330u1nu2nu3nu(n1)nunn

三角方程组

三角方程组是由三角矩阵组成的线性方程组,由于其特殊的结构,解这类方程组的计算更加简单高效。三角方程组可以分为两种:

  1. 下三角方程组
  • 形式为 L x = b L \mathbf{x} = \mathbf{b} Lx=b,其中 L L L 是一个下三角矩阵, x \mathbf{x} x 是未知向量, b \mathbf{b} b 是已知向量。
  • 解法从上到下进行,通过顺序消元法求解。
  1. 上三角方程组
  • 形式为 U x = b U \mathbf{x} = \mathbf{b} Ux=b,其中 U U U 是一个上三角矩阵, x \mathbf{x} x 是未知向量, b \mathbf{b} b 是已知向量。
  • 解法从下到上进行,通过顺序回代法求解。

示例和求解过程

下三角方程组示例

考虑下三角矩阵 L L L 和向量 b \mathbf{b} b
L = [ 2 0 0 3 1 0 1 − 2 1 ] , b = [ 4 5 − 1 ] L = \begin{bmatrix} 2 & 0 & 0 \\ 3 & 1 & 0 \\ 1 & -2 & 1 \end{bmatrix}, \quad \mathbf{b} = \begin{bmatrix} 4 \\ 5 \\ -1 \end{bmatrix} L= 231012001 ,b= 451
我们要解方程 L x = b L \mathbf{x} = \mathbf{b} Lx=b,其中 x \mathbf{x} x 是未知向量。

  1. 首先,解第一个方程: 2 x 1 = 4 ⟹ x 1 = 2 2x_1 = 4 \implies x_1 = 2 2x1=4x1=2
  2. 接着,解第二个方程: 3 x 1 + x 2 = 5 ⟹ 3 ⋅ 2 + x 2 = 5 ⟹ x 2 = 5 − 6 = − 1 3x_1 + x_2 = 5 \implies 3 \cdot 2 + x_2 = 5 \implies x_2 = 5 - 6 = -1 3x1+x2=532+x2=5x2=56=1
  3. 最后,解第三个方程: 1 x 1 − 2 x 2 + x 3 = − 1 ⟹ 1 ⋅ 2 − 2 ⋅ ( − 1 ) + x 3 = − 1 ⟹ 2 + 2 + x 3 = − 1 ⟹ x 3 = − 1 − 4 = − 5 1x_1 - 2x_2 + x_3 = -1 \implies 1 \cdot 2 - 2 \cdot (-1) + x_3 = -1 \implies 2 + 2 + x_3 = -1 \implies x_3 = -1 - 4 = -5 1x12x2+x3=1122(1)+x3=12+2+x3=1x3=14=5
    因此,解为:
    x = [ 2 − 1 − 5 ] \mathbf{x} = \begin{bmatrix} 2 \\ -1 \\ -5 \end{bmatrix} x= 215
    上三角方程组示例

考虑上三角矩阵 U U U 和向量 b \mathbf{b} b
U = [ 2 − 1 3 0 1 5 0 0 4 ] , b = [ 4 6 8 ] U = \begin{bmatrix} 2 & -1 & 3 \\ 0 & 1 & 5 \\ 0 & 0 & 4 \end{bmatrix}, \quad \mathbf{b} = \begin{bmatrix} 4 \\ 6 \\ 8 \end{bmatrix} U= 200110354 ,b= 468
我们要解方程 U x = b U \mathbf{x} = \mathbf{b} Ux=b

  1. 首先,解最后一个方程: 4 x 3 = 8 ⟹ x 3 = 2 4x_3 = 8 \implies x_3 = 2 4x3=8x3=2
  2. 接着,解倒数第二个方程: x 2 + 5 x 3 = 6 ⟹ x 2 + 5 ⋅ 2 = 6 ⟹ x 2 = 6 − 10 = − 4 x_2 + 5x_3 = 6 \implies x_2 + 5 \cdot 2 = 6 \implies x_2 = 6 - 10 = -4 x2+5x3=6x2+52=6x2=610=4
  3. 最后,解第一个方程: 2 x 1 − x 2 + 3 x 3 = 4 ⟹ 2 x 1 − ( − 4 ) + 3 ⋅ 2 = 4 ⟹ 2 x 1 + 4 + 6 = 4 ⟹ 2 x 1 = 4 − 10 = − 6 ⟹ x 1 = − 3 2x_1 - x_2 + 3x_3 = 4 \implies 2x_1 - (-4) + 3 \cdot 2 = 4 \implies 2x_1 + 4 + 6 = 4 \implies 2x_1 = 4 - 10 = -6 \implies x_1 = -3 2x1x2+3x3=42x1(4)+32=42x1+4+6=42x1=410=6x1=3
    因此,解为:
    x = [ − 3 − 4 2 ] \mathbf{x} = \begin{bmatrix} -3 \\ -4 \\ 2 \end{bmatrix} x= 342

再把上一篇和这一篇结合起来

我们看 scipy.linalg.solve_triangular 这句代码是如何通过解三角方程计算标准化残差的。

示例和解释

假设我们有如下矩阵 A A A
[ 4 12 − 16 12 37 − 43 − 16 − 43 98 ] \begin{bmatrix}4 & 12 & -16 \\ 12 & 37 & -43 \\ -16 & -43 & 98 \end{bmatrix} 41216123743164398
我们已经通过 Cholesky 分解将 ( A ) 分解为下三角矩阵 ( L ):
L = [ 2 0 0 6 1 0 − 8 5 3 ] L = \begin{bmatrix} 2 & 0 & 0 \\ 6 & 1 & 0 \\ -8 & 5 & 3 \end{bmatrix} L= 268015003
现在假设我们有一个测量向量:
measurement = [ 2 − 1 3 ] \text{measurement} = \begin{bmatrix} 2 \\ -1 \\ 3 \end{bmatrix} measurement= 213

步骤解释

  1. 计算差值 ( d )
    差值 ( d ) 是测量向量与均值向量的差。假设均值向量 ( \mu ) 为:
    μ = [ 1 0 2 ] \mu = \begin{bmatrix} 1 \\ 0 \\ 2 \end{bmatrix} μ= 102
    则差值 ( d ) 为:
    d = measurement − μ = [ 2 − 1 3 ] − [ 1 0 2 ] = [ 1 − 1 1 ] d = \text{measurement} - \mu = \begin{bmatrix} 2 \\ -1 \\ 3 \end{bmatrix} - \begin{bmatrix} 1 \\ 0 \\ 2 \end{bmatrix} = \begin{bmatrix} 1 \\ -1 \\ 1 \end{bmatrix} d=measurementμ= 213 102 = 111
  2. Cholesky 分解
    我们已经知道 ( L ) 为:
    L = [ 2 0 0 6 1 0 − 8 5 3 ] L = \begin{bmatrix} 2 & 0 & 0 \\ 6 & 1 & 0 \\ -8 & 5 & 3 \end{bmatrix} L= 268015003
  3. 解三角方程
    scipy.linalg.solve_triangular 用于求解三角方程组。具体来说,solve_triangular 函数解决如下方程:
    L z = d Lz = d Lz=d
    其中 ( d ) 是差值向量,( L ) 是下三角矩阵,( z ) 是标准化残差向量。
    我们用 scipy.linalg.solve_triangular 来解这个方程:
import numpy as np
from scipy.linalg import cholesky, solve_triangular
# 定义矩阵和向量
L = np.array([
[2, 0, 0],
[6, 1, 0],
[-8, 5, 3]
])
d = np.array([1, -1, 1])
# 解三角方程
z = solve_triangular(L, d, lower=True)
print("Standardized residual (z):", z)

结果

Standardized residual (z): [ 0.5        -4.          8.33333333]

具体数值计算

手动求解 L z = d Lz = d Lz=d
[ 2 0 0 6 1 0 − 8 5 3 ] [ z 1 z 2 z 3 ] = [ 1 − 1 1 ] \begin{bmatrix} 2 & 0 & 0 \\ 6 & 1 & 0 \\ -8 & 5 & 3 \end{bmatrix} \begin{bmatrix} z_1 \\ z_2 \\ z_3 \end{bmatrix} = \begin{bmatrix} 1 \\ -1 \\ 1 \end{bmatrix} 268015003 z1z2z3 = 111
我们逐步求解:

  1. 第一个方程:
    2 z 1 = 1 2z_1 = 1 2z1=1
    z 1 = 1 2 = 0.5 z_1 = \frac{1}{2} = 0.5 z1=21=0.5
  2. 第二个方程:
    6 z 1 + z 2 = − 1 6z_1 + z_2 = -1 6z1+z2=1
    6 ⋅ 0.5 + z 2 = − 1 6 \cdot 0.5 + z_2 = -1 60.5+z2=1
    3 + z 2 = − 1 3 + z_2 = -1 3+z2=1
    z 2 = − 4 z_2 = -4 z2=4
  3. 第三个方程:
    − 8 z 1 + 5 z 2 + 3 z 3 = 1 -8z_1 + 5z_2 + 3z_3 = 1 8z1+5z2+3z3=1
    − 8 ⋅ 0.5 + 5 ⋅ ( − 4 ) + 3 z 3 = 1 -8 \cdot 0.5 + 5 \cdot (-4) + 3z_3 = 1 80.5+5(4)+3z3=1
    − 4 − 20 + 3 z 3 = 1 -4 - 20 + 3z_3 = 1 420+3z3=1
    − 24 + 3 z 3 = 1 -24 + 3z_3 = 1 24+3z3=1
    3 z 3 = 25 3z_3 = 25 3z3=25
    z 3 = 25 3 ≈ 8.33 z_3 = \frac{25}{3} \approx 8.33 z3=3258.33
    所以标准化残差向量 ( z ) 是:
    z = [ 0.5 − 4 8.33 ] z = \begin{bmatrix} 0.5 \\ -4 \\ 8.33 \end{bmatrix} z= 0.548.33

DeepSORT(目标跟踪算法)中的马氏距离详解(很详细)
DeepSORT(目标跟踪算法)中 可以设置阈值进行异常检测或目标跟踪的原因(写了重要步骤)

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

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

相关文章

c++序列化和反序列化简单demo

序列化和反序列化是指将数据结构或对象转换为一种可以存储或传输的格式(序列化),然后再将其恢复为原来的数据结构或对象(反序列化)。在C中,通常使用标准库和一些辅助库来实现序列化和反序列化。下面是一个简…

mybatis条件构造bug

一、需求背景 (本文源自微博客,且已获得授权) 根据传递的参数,使用mybatis-plus动态构造查询语句。参数对象如下: private Integer id;private String ip;/*** 状态:0封锁;1:已解封*/private Integer status;/*** 开始时间*…

挑战绝对不可能:再证有长度不同的射线

黄小宁 一空间坐标系中有公共汽车A,A中各座位到司机处的距离h是随着座位的不同而不同的变数,例如5号座位到司机处的距离是h3,…h5,…。A移动了一段距离变为汽车B≌A,B中5号座位到司机处的距离h’h3,…h’h5…

2002NOIP普及组真题 3. 产生数

线上OJ 地址: 【02NOIP普及组】产生数 核心思想:组合数 dfs 高精度 1、如果一个数字有 3 位,每位有 2种可能性,则数字的 组合数 为 2*2*2 8 种 。故,只要求出每一位数字有多少种变体即可。 求 0 ~ 9 每一个数字的…

mysql 如何分布式部署

MySQL的分布式部署是一个涉及多个步骤和配置的过程,以确保数据库系统能够支持大规模数据存储、高并发访问和容错性。以下是MySQL分布式部署的主要步骤和要点,结合参考文章中的相关信息进行整理: 一、前期准备 环境准备: 选择合…

LLVM Cpu0 新后端 系列课程总结

想好好熟悉一下llvm开发一个新后端都要干什么,于是参考了老师的系列文章: LLVM 后端实践笔记 代码在这里(还没来得及准备,先用网盘暂存一下): 链接: https://pan.baidu.com/s/1yLAtXs9XwtyEzYSlDCSlqw?…

AtCoder Beginner Contest 355

C - Bingo 2 题意 有一个 n n n\times n nn 的网格,初始全白,有 t t t 次操作,每次操作涂黑一个指定的格子。 问执行第几个操作后,有一行或一列或对角线的格子全部被涂黑。 思路 如果暴力判断,那么总时间复杂度…

一文搞懂线性回归模型

1、简单介绍 线性回归模型是一种基础的预测建模技术,用于分析一个或多个自变量(特征)与因变量(目标)之间的关系。它的基本假设是目标变量(y)与特征(X)之间存在线性关系。…

提升篇---接口和抽象类的本质区别

大家好,这里是教授.F 语法区别: 方法实现:接口中定义的方法默认都是抽象的,不包含方法的实现;而抽象类可以包含抽象方法和具体方法的实现。 多继承:一个类只能继承一个抽象类,但可以实现多个接…

测试与开发

目录 按照测试目标分类 界面测试 功能测试 性能测试 可靠性测试 安全性测试 易用性测试 按照执行方式分类: 测试方法 白盒测试 语句覆盖 条件覆盖 判定条件覆盖 条件组合覆盖 路径覆盖 黑盒测试 灰盒测试 按照测试阶段分类 单元测试 集成测试 …

【iOS】界面推出的方法

【iOS】界面推出的方法 在学习过程中我们发现在iOS中有两种界面推出的方法:push 和 present这两种方法都可以用来推出一个新的界面 但是这两者是存在区别的 push 方法是通过 UINavigationController 进行导航,新的视图控制器会被压入导航栈中,可以跨级…

写给大数据开发,如何去掌握数据分析

这篇文章源于自己一个大数据开发,天天要做分析的事情,发现数据分析实在高大上很多,写代码和做汇报可真比不了。。。。 文章目录 1. 引言2. 数据分析的重要性2.1 技能对比2.2 业务理解的差距 3. 提升数据分析能力的方向4. 数据分析的系统过程4…

前端 JS 经典:Promise 详解

1. Promise 由来 在以前我们实现异步是用的回调函数,当一个异步请求需要依赖上一个异步请求返回的结果的时候,就会形成如下这种的调用结构。 请求1(function (结果1) {请求2(function (结果2) {请求3(function(结果3)) {请求4(function(结果4) {})}});…

Windows下载安装RabbitMQ客户端(2024最新篇)

文章目录 RabbitMQ认知RabbitMQ下载RabbitMQ安装 更多相关内容可查看 RabbitMQ认知 定义:RabbitMQ是一个消息中间件,它接受并转发消息。你可以把它当做一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递…

2024年土建施工员考试题库及答案

一、单选题 1.某工程项目桩基工程采用套管成孔灌注桩,为了保证施工质量,桩管灌满混凝土后开始拔管,按照规定,管内应保持不少于()m高的混凝土。 A.1 B.1.5 C.2 D.2.5 答案:C 解析&…

免费!GPT-4o发布,实时语音视频丝滑交互

We’re announcing GPT-4o, our new flagship model that can reason across audio, vision, and text in real time. 5月14日凌晨,OpenAI召开了春季发布会,发布会上公布了新一代旗舰型生成式人工智能大模型【GPT-4o】,并表示该模型对所有免费…

JDBC简介以及快速入门

这些都是JDBC提供的API 简介 每一个数据库的底层细节都不一样 不可能用一套代码操作所有数据库 我们通过JDBC可以操作所有的数据库 JDBC是一套接口 我们自己定义了实现类 定义实现类 然后就能用Java操作自己的数据库了 MySQL对于JDBC的实现类 就是驱动 快速入门 创建新的项…

MySQL-函数/约束

MySQL-函数 distinct-去重 //放在select后 1、字符串函数 SELECT 函数(参数) CONCAT(S1,S2,S3...)-字符串拼接,拼接成一个字符串。 LOWER(str)-将字符串str全部转换为小写。 UPPER(str)-将字符串str全部转换为大写。 LPAD(str,n,pad)-左填充,用字…

vscode copilot git commit 生成效果太差,用其他模型替换

问题 众所周知,copilot git commit 就像在随机生成 git commit 这种较为复杂的内容还是交给大模型做比较合适 方法 刚好,gitlens 最近开发了 AI commit的功能,其提供配置url api可以实现自定义模型 gitlens 只有3种模型可用&#xff1a…

【Python】在【数据挖掘】与【机器学习】中的应用:从基础到【AI大模型】

目录 💗一、Python在数据挖掘中的应用💕 💖1.1 数据预处理💞 💖1.2 特征工程💕 💗二、Python在机器学习中的应用💕 💖2.1 监督学习💞 💖2.2…