AmitAminov/gaussian-geometry

GitHub: AmitAminov/gaussian-geometry

将多元高斯分布的协方差参数化、旋转映射病态性及高维 σ 覆盖悖论写成精确的、经单元测试验证的数学工具库。

Stars: 0 | Forks: 0

# 高斯几何 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/AmitAminov/gaussian-geometry/actions/workflows/ci.yml) **多元高斯分布的几何学:协方差的两种参数化形式,两者之间一个病态的映射,以及每个人都会弄错的 σ 覆盖规则。** 协方差是数据科学中最常被教授却最少被理解的对象之一。大多数人能背诵“非对角线元素就是协方差”。但很少有人能说出相关高斯分布的等密度椭圆到底是什么样子的,它包含多少概率质量,或者为什么对几乎各项同性的数据进行方向定位是没有意义的。本项目将这三件事写成精确的、经过单元测试的结论。它最初只是几个探索性的 NumPy 脚本,通过采样 10⁵ 个点来旋转和比较 2D 高斯分布,并用肉眼检查重叠部分。 ## 三个结论 ### 1. 旋转 ≡ 构造 —— 是精确相等,而非近似 协方差可以用几何方式(主轴 `a, b` + 旋转 `θ`)或统计方式(边缘标准差 `σx, σy` + 相关系数 `ρ`)来描述。将 `Σ = R(θ) diag(a², b²) R(θ)ᵀ` 逐项展开,就能得到两者之间的精确映射字典: ``` σx² = a²cos²θ + b²sin²θ σy² = a²sin²θ + b²cos²θ ρσxσy = ½(a² − b²)sin 2θ ``` 以及反向映射:`θ = ½·atan2(2ρσxσy, σx² − σy²)`, `a², b² = ½(σx²+σy²) ± ½√((σx²−σy²)² + 4ρ²σx²σy²)`。 最初的脚本通过 Monte Carlo 散点图验证了这一点;在这里它达到了机器精度(`max |ΔΣ| ≈ 9e-16`),并由 200 次随机往返测试作保。 ![旋转与构造](https://static.pigsec.cn/wp-content/uploads/repos/cas/b8/b842527557020e452576b43ae7d08f7804be4acf403bbcd073493b5e35a6bd42.png) ### 2. 主角是相关性的病态读数 这两张图表描述的是相同的矩阵,但它们是*非常不同的坐标系*。对逆映射求导: ``` dθ/dρ |ρ=0 = σxσy / (σx² − σy²) → ∞ as σx → σy ``` 当边缘方差完全相等时,任何非零相关性都会使主轴位于 ±45°,并且当 ρ 穿过零点时,方向会跳跃 90°。所以不要报告几乎各项同性数据的“方向”;那是纯粹的噪声放大,这与当特征值接近时 PCA 方向变得不稳定是同样的退化现象。 ![角度跃迁](https://static.pigsec.cn/wp-content/uploads/repos/cas/6e/6e324d07f6c08672df4fd67d71921fd4dede698553624640d8c8d26b8a5fa899.png) ### 3. σ 覆盖悖论:是 39%,而不是 68% 68–95–99.7 规则是一个 **1D 的事实**。在 *d* 维中,平方的 Mahalanobis 距离服从 χ² 分布,因此 k-σ 等密度椭球内部的质量为 `χ²_d.cdf(k²)`: | k | d = 1 | d = 2 | d = 3 | d = 10 | |---|-------|-------|-------|--------| | 1σ | 68.3% | **39.3%** | 19.9% | 0.2% | | 2σ | 95.4% | 86.5% | 73.9% | 4.7% | | 3σ | 99.7% | 98.9% | 97.1% | 46.8% | 散点图上绘制的每一个“1σ 误差椭圆”都悄无声息地少覆盖了 29 个百分点;在 2D 中实际包含 68.3% 概率的椭圆是 **1.52σ** 椭圆。测试套件中通过 200,000 样本的 Monte Carlo 对此进行了验证。 ![覆盖悖论](https://static.pigsec.cn/wp-content/uploads/repos/cas/c0/c03fac556b8f19acce9ac1bbb86f70ea79f17ee294d2d10a0b251230aa1381fe.png) ### 额外内容:相关性对联合密度的影响 随着 ρ 从 0 扫向 ±0.95,标准二元高斯分布的边缘分布从不移动;相关性在 1D 投影中是不可见的。但联合密度确实会移动:它坍缩成一条对角脊线,其峰值以 `1/√(1−ρ²)` 的比例升高,因为总体积必须保持为 1。该包还内置了闭式多元 Bhattacharyya 距离,以取代最初脚本中的数值网格积分。 ![密度曲面](https://static.pigsec.cn/wp-content/uploads/repos/cas/11/11868a8acd2501a2aa22472a9a45fb265e7baccaf5a23845fc56751b3ab4e874.png) ## 包结构 ``` src/gaussian_geometry/ ├── covariance.py # construction, rotation, closed-form parameter maps, sensitivity ├── density.py # vectorized pdf, Mahalanobis, χ² coverage, Bhattacharyya distance ├── ellipse.py # iso-density ellipses at a given radius or probability mass └── plotting.py # publication-style figures (house style, takeaway-as-title) ``` 所有代码都添加了类型注解和 docstring,并且职责分明:数学模块绝不导入 matplotlib。 ## 如何运行 ``` python -m venv .venv .venv/Scripts/activate # Windows; source .venv/bin/activate on Unix pip install -e ".[dev]" pytest # 29 tests: rotation≡construction, PSD, χ² coverage vs # Monte Carlo, Bhattacharyya closed form vs integration, # figure smoke tests — all CPU, ~20 s ruff check . # lint jupyter nbconvert --to notebook --execute --inplace notebooks/analysis.ipynb ``` 执行后的 notebook 会将所有图表重新生成到 `figures/` 目录中(300-dpi PNG + SVG)。 ## 来源 本项目源自五个探索性脚本(`2d_gaussian.py`、`Comparing_Rotation_and_Construction.py`、`3d_gaussians.py` 等),我在其中凭经验验证了旋转与构造的问题。该仓库将肉眼检查替换为闭式解,用向量化的 `einsum` 替换了针对每个点的 `DataFrame.apply` 密度循环(并补回了指数中缺失的 ½),同时将样本重叠的论证转化为了机器精度测试。 ## 许可证 MIT — 见 [LICENSE](LICENSE)。 ## 测试 使用 `pytest` 运行测试套件。CI 通过 GitHub Actions 在每次推送时运行,目前状态为通过。 该套件检查: - **旋转 ≡ 协方差构造** 的等价性 - **角度-相关性** 映射及其在方差接近相等时的病态现象 - 精确的 **χ² σ 覆盖**(即 2D 中约 39% 的结果)以及密度/椭圆恒等式
标签:NumPy, 协方差, 多变量高斯分布, 安全规则引擎, 数学计算, 数据科学, 概率统计, 资源验证, 逆向工具