在二维空间中用椭圆表示不确定性

在二维空间中用椭圆表示不确定性

flyfish

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse

# 生成示例数据
np.random.seed(0)
data = np.random.multivariate_normal([0, 0], [[4, 2], [2, 3]], size=500)

# 计算均值和协方差矩阵
mean = np.mean(data, axis=0)
covariance = np.cov(data, rowvar=False)

# 计算特征值和特征向量
eigvals, eigvecs = np.linalg.eigh(covariance)

# 绘制数据点
fig, ax = plt.subplots()
ax.scatter(data[:, 0], data[:, 1], s=10, alpha=0.5)

# 绘制特征向量
for i in range(len(eigvals)):
    eigvec = eigvecs[:, i]
    start, end = mean, mean + 2 * np.sqrt(eigvals[i]) * eigvec
    ax.annotate('', xy=end, xytext=start,
                arrowprops=dict(facecolor='red', width=2.0))

# 绘制协方差椭圆
def plot_covariance_ellipse(mean, cov, ax, color='blue', n_std=2):
    eigvals, eigvecs = np.linalg.eigh(cov)
    order = eigvals.argsort()[::-1]
    eigvals, eigvecs = eigvals[order], eigvecs[:, order]
    angle = np.degrees(np.arctan2(*eigvecs[:, 0][::-1]))
    width, height = 2 * n_std * np.sqrt(eigvals)
    ellipse = Ellipse(xy=mean, width=width, height=height, angle=angle, 
                      edgecolor=color, facecolor='none')
    ax.add_patch(ellipse)

plot_covariance_ellipse(mean, covariance, ax, color='blue')

# 设置图表
ax.set_xlim(-10, 10)
ax.set_ylim(-10, 10)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_title('Data Points, Eigenvectors, and Covariance Ellipse')
plt.grid()
plt.show()

在这里插入图片描述

协方差矩阵和椭圆的关系

协方差矩阵 Σ \Sigma Σ 描述了多变量正态分布的形状和方向。在二维情况下,它是一个 2 × 2 2 \times 2 2×2 的矩阵: Σ = ( σ x x σ x y σ x y σ y y ) \Sigma = \begin{pmatrix} \sigma_{xx} & \sigma_{xy} \\ \sigma_{xy} & \sigma_{yy} \end{pmatrix} Σ=(σxxσxyσxyσyy)

特征值和特征向量
  • 特征值 λ 1 \lambda_1 λ1 λ 2 \lambda_2 λ2 是协方差矩阵的特征值,它们表示分布在特征向量方向上的方差。

  • 特征向量 v 1 \mathbf{v}_1 v1 v 2 \mathbf{v}_2 v2 是协方差矩阵的特征向量,它们表示分布的主要方向。

特征值和特征向量的关系如下:
Σ v i = λ i v i \Sigma \mathbf{v}_i = \lambda_i \mathbf{v}_i Σvi=λivi
其中 v i \mathbf{v}_i vi 是特征向量, λ i \lambda_i λi 是对应的特征值。

椭圆的构造

在二维空间中,椭圆可以表示为:
x T Σ − 1 x = c \mathbf{x}^T \Sigma^{-1} \mathbf{x} = c xTΣ1x=c
其中 x \mathbf{x} x 是一个二维向量, c c c 是一个常数,通常取决于所选的置信水平。例如,对于95%的置信椭圆, c = χ 0.95 2 ( 2 ) c = \chi^2_{0.95}(2) c=χ0.952(2),这里的 χ 0.95 2 ( 2 ) \chi^2_{0.95}(2) χ0.952(2) 是卡方分布的95%分位数,具有2个自由度。

椭圆的几何解释

  • 中心 :椭圆的中心是数据的均值向量 μ \mu μ

  • 轴的方向 :椭圆的主轴方向由协方差矩阵的特征向量决定。

  • 轴的长度 :椭圆的轴长度由特征值的平方根决定,长轴为 2 λ 1 2\sqrt{\lambda_1} 2λ1 ,短轴为 2 λ 2 2\sqrt{\lambda_2} 2λ2

数学推导

考虑一个二维正态分布,其概率密度函数为:
f ( x ) = 1 2 π ∣ Σ ∣ 1 / 2 exp ⁡ ( − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ) f(\mathbf{x}) = \frac{1}{2\pi|\Sigma|^{1/2}} \exp\left(-\frac{1}{2} (\mathbf{x} - \mu)^T \Sigma^{-1} (\mathbf{x} - \mu)\right) f(x)=2π∣Σ1/21exp(21(xμ)TΣ1(xμ))

在等概率密度下(即椭圆上的点),指数部分是常数:
( x − μ ) T Σ − 1 ( x − μ ) = constant (\mathbf{x} - \mu)^T \Sigma^{-1} (\mathbf{x} - \mu) = \text{constant} (xμ)TΣ1(xμ)=constant

这就是椭圆的方程。

椭圆公式的具体形式

如果协方差矩阵的特征值和特征向量分别为 λ 1 , λ 2 \lambda_1, \lambda_2 λ1,λ2 v 1 , v 2 \mathbf{v}_1, \mathbf{v}_2 v1,v2,则椭圆的参数如下:

  • 长轴方向 :特征向量 v 1 \mathbf{v}_1 v1

  • 短轴方向 :特征向量 v 2 \mathbf{v}_2 v2

  • 长轴长度 2 λ 1 2 \sqrt{\lambda_1} 2λ1

  • 短轴长度 2 λ 2 2 \sqrt{\lambda_2} 2λ2

椭圆

  1. 计算特征值和特征向量 :通过协方差矩阵。

  2. 确定椭圆的旋转角度 :由主要特征向量的方向决定。

  3. 确定椭圆的轴长度 :由特征值的平方根决定。

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

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

相关文章

Java15-API

目录 Math类 概述 常见方法 练习 System类 概述 常见方法 Runtime 概述 常见方法 Object类 概述 常见方法 一.演示toString方法 二.演示equals方法 三、对象克隆 分类: 浅克隆 深克隆: Objests类 概述 常见方法 BigInteger类 概…

基于C++、MFC和Windows套接字实现的简单聊天室程序开发

一、一个简单的聊天室程序 该程序由服务器端和客户端两个项目组成,这两个项目均基于对话框的程序。服务器端项目负责管理客户端的上线、离线状态,以及转发客户端发送的信息。客户端项目则负责向服务器发送信息,并接收来自服务器的信息&#…

keil5显示内存和存储占用百分比进度条工具

简介 [Keil5_disp_size_bar] 以进度条百分比来显示keil编译后生成的固件对芯片的内存ram和存储flash的占用情况, 并生成各个源码文件对ram和flash的占比整合排序后的map信息的表格和饼图。 原理是使用C语言遍历当前目录找到keil工程和编译后生成的map文件 然后读取工程文件和m…

【linux】Valgrind工具集详解(十六):交叉编译、移植到arm(失败)

1、源码下载 官网:https://valgrind.org/ 源码:https://valgrind.org/downloads/current.html 2、配置 ./configure CC=arm-linux-gnueabihf-gcc \CXX=arm-linux-gnueabihf-g++ \AR=arm-linux-gnueabihf-ar \--host=arm-linux-gnueabihf \--pr

急,在线等!老板让我做数仓一点思路没有怎么办

刚来公司一个月,老板就让我负责了公司数据仓库的建设,但我一点思路都没有这可咋整! 在了解公司人事部门和行政部门的相关数据存在数据孤岛的问题后,我决定从人事系统入手。目前公司的数据还存在一些问题亟待解决: 1.员…

Google 广告VS Facebook广告:哪个更适合我?2024全维度区别详解

在 Google Ads 和 Facebook Ads 之间进行选择可能是一个艰难的决定。决定哪种方法适合您的业务取决于多种因素,从您愿意为转化支付的费用到管理广告系列所需的时间和人员。在这篇文章中,将解释 Google Ads 和 Facebook Ads 之间的差异,以便您…

网络中数据链路层详解

数据链路层其实我们这里了解即可,因为做交换机开发的是主要学习这方面的知识。 这里我们主要了解以太网协议。 以太网是物理学的概念。以太网横跨数据链路层和物理层,平时咱们使用有线网就是以太网络。 如图以太网协议的报文格式: 上述的目…

张大哥笔记:如何选择一个人就值得做的副业

很多人喜欢把上班称为主业,把上班之外的工作称为副业,不管以哪种方式称呼都可以,只要能赚钱就行,上班的本质就是出卖时间,不管你是月入5000还是月入2万,都是给老板打工! 但搞笑的就是月入2万的人…

《昇思25天学习打卡营第1天 | 认识MindScope AI框架和昇思大模型平台》

活动地址:https://xihe.mindspore.cn/events/mindspore-training-camp 昇思MindSpore学习笔记:探索AI的无限可能 嗨,AI爱好者们!今天,我要带你们深入了解一个强大的全场景深度学习框架——昇思MindSpore。 准备好了吗…

vue-饼形图-详细

显示效果 代码 <template> <div style"height: 350px;"> <div :class"className" :style"{height:height,width:width}"></div> </div> </template> <script> import * as echarts from echarts; req…

Vue3鼠标悬浮个人头像时出现修改头像,点击出现弹框,上传头像使用cropperjs可裁剪预览

实现效果&#xff1a; 鼠标悬浮到头像上&#xff0c;下方出现修改头像 点击修改头像出现弹框&#xff0c;弹框中可上传头像&#xff0c;并支持头像的裁剪及预览 实现方式&#xff1a; 1.tempalte中 <div class"img-box"><img v-if"avatarImgUrl&qu…

SpringMVC系列八: 手动实现SpringMVC底层机制-下

手动实现SpringMVC底层机制-下 实现任务阶段五&#x1f34d;完成Spring容器对象的自动装配-Autowired 实现任务阶段六&#x1f34d;完成控制器方法获取参数-RequestParam1.&#x1f966;将 方法的 HttpServletRequest 和 HttpServletResponse 参数封装到数组, 进行反射调用2.&a…

python运算符和表达式实战

1.判断回文数 回文数就是将其反向排列&#xff0c;与原来相等 n1 n2 int(input("请输入&#xff1a; ")) t 0 while n2>0 :# 取余数t t*10n2%10# 取整数n2 // 10 if n1 t:print("是回文数") else:print("不是回文数") 2.字符串转换&…

linux中“PXE高效批量装机”

在大规模的 Linux 应用环境中&#xff0c;如 Web 群集、分布式计算等&#xff0c;服务器往往并不配备光驱设备&#xff0c;在这种情况下&#xff0c;如何为数十乃至上百台服务器裸机快速安装系统呢&#xff1f;传统的 USB光驱、移动硬盘等安装方法显然已经难以满足需求。 PXE …

实现跑马灯

目录 一 设计原型 二 后台源码 一 设计原型 二 后台源码 namespace 跑马灯 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){Color[] colors { Color.Red, Color.Green, Color.Yellow };T…

Java集合框架源码分析:LinkedList

文章目录 一、LinkedList特性二、LinkedList底层数据结构三、LinkedList继承关系参考&#xff1a; 一、LinkedList特性 特性描述是否允许为空允许是否允许重复数据允许是否有序有序是否线程安全非线程安全 二、LinkedList底层数据结构 LinkedList同时实现了List接口和Deque接…

【紫光同创盘古PGX-Nano教程】——(盘古PGX-Nano开发板/PG2L50H_MBG324第十一章)模拟波形实验例程说明

本原创教程由深圳市小眼睛科技有限公司创作&#xff0c;版权归本公司所有&#xff0c;如需转载&#xff0c;需授权并注明出处&#xff08;www.meyesemi.com) 适用于板卡型号&#xff1a; 紫光同创PG2L50H_MBG324开发平台&#xff08;盘古PGX-Nano&#xff09; 一&#xff1a;…

哈希的基本原理

目录 一.哈希概念 二.哈希冲突 三.哈希函数 四.哈希冲突解决 一.闭散列(开放寻址法) ①插入&#xff1a; ②查找&#xff1a; ③删除&#xff1a; 代码测试&#xff1a; 二.开散列(拉链法) ①插入&#xff1a; ②查找&#xff1a; ③删除&#xff1a; 代码测试&a…

推荐一个Python的前端框架Streamlit

WHY&#xff0c;为什么要用Streamlit 你是不是也想写一个简单的前端界面做些简单的展示和控制&#xff0c;不想写html、css、js&#xff0c;也用不到前后端分离&#xff0c;用不到特别复杂的Flask、Django等&#xff0c;如果你遇到类似这样的问题&#xff0c;我推荐你试试Stre…

LSM-Tree数据结构原理

LSM-Tree树原理 什么是LSM-Tree LSM-Tree 即 Log Structrued Merge Tree&#xff0c;这是一种分层有序&#xff0c;硬盘友好的数据结构。核心思想是利用磁盘顺序写性能远高于随机写。 LSM-Tree 并不是一种严格的树结构&#xff0c;而是一种内存磁盘的多层存储结构。HBase、L…