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

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

flyfish

py 复制代码
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. 确定椭圆的轴长度 :由特征值的平方根决定。

相关推荐
西柚小萌新9 小时前
七.numpy模块
numpy
幼儿园园霸柒柒13 小时前
第七章: 7.3求一个3*3的整型矩阵对角线元素之和
c语言·c++·算法·矩阵·c#·1024程序员节
星沁城17 小时前
73. 矩阵置零
java·算法·矩阵
handsomeboysk18 小时前
mAP的定义
人工智能·计算机视觉·目标跟踪
jndingxin1 天前
OpenCV视觉分析之目标跟踪(11)计算两个图像之间的最佳变换矩阵函数findTransformECC的使用
opencv·目标跟踪·矩阵
pen-ai2 天前
【机器学习】21. Transformer: 最通俗易懂讲解
人工智能·神经网络·机器学习·矩阵·数据挖掘
会写代码的饭桶2 天前
【C++刷题】力扣-#566-重塑矩阵
c++·leetcode·矩阵
君臣Andy2 天前
【矩阵的大小和方向的分解】
线性代数·矩阵
武子康2 天前
大数据-207 数据挖掘 机器学习理论 - 多重共线性 矩阵满秩 线性回归算法
大数据·人工智能·算法·决策树·机器学习·矩阵·数据挖掘
玛卡巴卡(努力学习版)2 天前
矩阵特殊打印方式
c++·算法·矩阵