惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Forbes - Security
Forbes - Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
P
Palo Alto Networks Blog
Martin Fowler
Martin Fowler
T
Threatpost
D
Docker
S
Schneier on Security
M
MIT News - Artificial intelligence
G
Google Developers Blog
L
LINUX DO - 热门话题
J
Java Code Geeks
月光博客
月光博客
博客园 - 三生石上(FineUI控件)
IT之家
IT之家
博客园 - Franky
C
Cyber Attacks, Cyber Crime and Cyber Security
K
Kaspersky official blog
Google DeepMind News
Google DeepMind News
N
News and Events Feed by Topic
V
Vulnerabilities – Threatpost
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
人人都是产品经理
人人都是产品经理
Spread Privacy
Spread Privacy
T
Tailwind CSS Blog
爱范儿
爱范儿
阮一峰的网络日志
阮一峰的网络日志
U
Unit 42
C
CERT Recently Published Vulnerability Notes
The GitHub Blog
The GitHub Blog
Simon Willison's Weblog
Simon Willison's Weblog
NISL@THU
NISL@THU
MongoDB | Blog
MongoDB | Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
H
Heimdal Security Blog
Recorded Future
Recorded Future
云风的 BLOG
云风的 BLOG
SecWiki News
SecWiki News
P
Privacy International News Feed
P
Proofpoint News Feed
O
OpenAI News
B
Blog
腾讯CDC
F
Full Disclosure
Apple Machine Learning Research
Apple Machine Learning Research
T
Tor Project blog
H
Hacker News: Front Page
Project Zero
Project Zero
Hugging Face - Blog
Hugging Face - Blog
C
Cisco Blogs
S
Security Affairs

菲兹克斯喵

Lesson 17 引力波的功率 (2) Lesson 16 引力波的功率 Lesson 8 Atmospheres Lesson 16 习题课 Lesson 15 引力波 Lesson 14 Noether 定理 Lesson 7 Evolution Lesson 7 传粉的力量 Lesson 13 作用量原理 Lesson 13 配分函数的一些应用 Lesson 12 Penrose 过程与 Hawking 辐射 Lesson 6 Homology Lesson 11 带电荷和旋转的黑洞 Lesson 6 进食行为 Lesson 11 配分函数 Lesson 10 Penrose 图 Lesson 5 Diffusion Lesson 9 微观量与宏观量的联系 Lesson 5 捕食行为 Lesson 8 Schwarzschild 黑洞 Lesson 9 Schwarzschild 黑洞 (2) Lesson 8 近独立子体系分布 Lesson 4 Ignition of the Sun Lesson 7 统计力学绪论 Lesson 4 讲座:乌贼和章鱼的行为与智能 Lesson 7 Killing 矢量场和 Lie 导数 Lesson 6 Schwarzschild 解 Lesson 6 Landau 相变理论 (二) Lesson 3 Lane - Emden Equation Lesson 5 Landau 相变理论 Lesson 3 动物的感知 Lesson 5 Einstein 场方程 Lesson 4 协变的物理定律 Lesson 3 等效原理 & 广义协变性原理 Lesson 4 热力学第三定律 Lesson 2 Equation of State Lesson 3 热力学关系 Lesson 2 神经生物学基础 Lesson 2 度规和联络 Lesson 1 简介 Lesson 1 Lorentz 变换 Lesson 2 热力学定律 Lesson 1 Introduction & Light Lesson 1 介绍 流星监控项目 II - 树莓派配置 Lesson 15 Green 函数法 Lesson 29 散射 (二) Lesson 15 Spatial Patterns & Self-Organization Lesson 14 积分变换 Lesson 29 散射 Lesson 28 散射 (一) Lesson 27 绝热近似 Lesson 14 Dynamics of biological networks (2) Lesson 13 分离变量法总结 Lesson 26 变分法 (二) Lesson 14 Spatial Statistics Lesson 27 带电粒子和电磁场的相互作用 Lesson 13 磁性材料 & 拓扑绝缘体 Lesson 25 变分法 Lesson 13 Fast Radio Burst Lesson 13 Dynamics of biological networks Lesson 24 含时微扰 Lesson 26 相对论中的能量和动量守恒 Lesson 13 On the Intersection between Astronomy and AI Lesson 25 电磁场变换 Lesson 12 超导 Lesson 23 Zeeman Effect Lesson 12 absorbing Lesson 12 China Jingping Labs and Related Physics Lesson 24 狭义相对论的速度变换 Lesson 22 微扰论 Lesson 11 Bessel 函数 Lesson 12 Time Series Analysis Lesson 23 狭义相对论 Lesson 21 能带理论 Lesson 11 量子多体系统 Lesson 11 Molecular Motor (3) Tianwen:The Beauty of the Cosmos Lesson 10 连带 Legendre 函数 Lesson 20 多电子原子 & 固体 Lesson 11 Truncated & Censored Data Lesson 21 偶极辐射 (二) Lesson 10 离子阱量子计算 & 超快分子摄影 Lesson 10 Molecular Motor (2) Lesson 19 多粒子系统 Neutron Stars Lesson 20 偶极辐射 Lesson 9 Legendre 多项式 (二) Lesson 18 双粒子系统 Lesson 10 Clustering & Classification Lesson 19 辐射 (二) Lesson 9 引力波探测 & 原子量子计算 Lesson 17 CG 系数 「三次量子化」:宏观量子能级及其相干叠加态 —— 解读今年的 Nobel Prize Lesson 9 Molecular Motor Exoplanet Lesson 18 辐射 Lesson 16 自旋 (二) Lesson 8 Legendre 多项式 Lesson 17 波导
Lesson 9 Density Estimation
2025-11-13 · via 菲兹克斯喵

提示

Quizzes

  1. 在不同情况下应该怎么做推断?

    1. 我们已经了解得很深入.

      参数推断

    2. 有一定了解.

      模型选择

    3. 完全不了解.

      非参数统计

      比如,用基函数展开可能的函数形式.

  2. 在参数推断时,最关键的是哪一个量?

    后验,也就是:

    P(θDMI)=P(DθMI)P(θMI)P(DMI)P(\theta|DMI) = \frac{P(D|\theta MI)P(\theta|MI)}{P(D|MI)}

  3. 在模型选择时,最关键的是什么?

    Bayes 因子,也就是后验比,其中的重要成分是我们所谓的归一化因子 —— 证据.

  4. 下面有关非参数统计的表述,正确的是:

    1. 没有参数
    2. 参数的数量固定
    3. 利用一个 flexible 函数形式,来保证能够符合我们的模型
    4. 设置弱的、general 的先验 (not necessarily uniform)
    5. 通常用更多参数,而不是用参数化的模型
    6. 最终我们可以得到一些性质,以便于进行下一步的参数化模型选择

    选择 c., d., e., f.

  5. 基函数展开有关表述:

    1. 结果会取决于基函数
    2. 基函数的性质如果出现了简并,那么最后的结果不能用
    3. 不同问题需要选取不同基函数
    4. 基函数的类型、项的数量可以在下一步被模型选择所精确

    选择 b., c., d.

  6. Gaussian 过程有关表述:

    1. 描述的不是函数的分布
    2. 先验是由一个平均函数 (often zero) 和一个有超参数的协方差核所决定的
    3. 超参数可以从训练集得出
    4. 如果训练集距离真值很远,我们不能得到好的预测
    5. 如果数据有噪声,那么不能工作
    6. 如果数据不是 Gaussian 过程生成的,那么不能得到正确的结果

    注意

    Gaussian 过程的具体含义是,我们利用不同的协方差矩阵,在函数空间对函数进行采样 (超参数的采样). 训练集的作用是,告诉我们这些采样的函数的极限范围大概是多少、弥散大概是怎样的.

    选择 a., b., c.

  7. 我们用什么来描述「不确定的程度」?

    信息熵:

    H=ipilnpiH=-\sum_ip_i\ln p_i

  8. 无差别原理是我们最早提出的、判断未知事件的概率分布的原理,它和熵有何关系?

    无差别原理对应最大熵原理.

  9. Gauss 分布和最大熵原理的关系?

    给定均值和方差的情况下,最大熵对应的分布是 Gauss 分布.

上节课我们做的是非参数统计,完全不知道如何构建模型. 这节课我们的了解更少,只能从数据本身推断出可能的结构,甚至无法取基函数.

我们的目的是:

  • 从很多噪声的 MCMC 采样中得到 smooth, bin-free 的概率分布
  • 没有事先模型、解析结果的情况下,得到一个估计

这个过程可以在真实的物理上,也可以是对一个虚拟的参数做估计.

Histograms

直方图的定义是,

h(x)=k=1MhkΠ(x;xk1,xk)h(x) = \sum_{k=1}^Mh_k\Pi(x;x_{k-1},x_k)

实际上就是一种数数,但是很有用,比如我们做数值积分就可以利用直方图做 Riemann 和.

直方图 bins 太少,会导致很多重要的数据特征没有体现出来;bins 太多,会产生大量的「毛刺」,噪声非常明显. 我们在取 bins 的时候,有一个 Scott 经验法则,对于 NN 点和标准差 σ^\hat\sigma,取

vscott=3.49σ^N1/3v_{\text{scott}}=3.49\hat\sigma N^{-1/3}

但是仅仅对 Gauss 分布有效. 一个简单的拓展是,Freedman - Diaconis rule,把对长尾敏感的标准差换成百分位数,得到

vFD=2(q75q25)N1/3v_{\text{FD}} = 2(q_{75}-q_{25})N^{-1/3}

这些经验法则并不能很好地处理窄峰、比较精细的分布 (比如课堂上的 5 个 Lorentz 分布叠加的神必分布),我们还需要更加有效的方法.

Knuth Method

暂时先不考虑每个 bin 的宽度不同. 考虑 MM 个 bin,MM 作为参数,就变为我们熟悉的问题了,即对下面这个函数做参数估计:

h(x)=MVk=1MπkΠ(x;xk1,xk),k=1Mπk=1h(x) = \frac{M}{V}\sum_{k=1}^M\pi_k\Pi(x;x_{k-1},x_k),\quad \sum_{k=1}^M\pi_k=1

就是要找到一个 MM 使得 h(x)h(x) 最接近我们的数据. Bayes 定理:

P(π,MDI)P(Dπ,MI)P(π,MI)=P(Dπ,MI)P(πMI)P(MI)P(\pi,M|DI)\propto P(D|\pi,MI)P(\pi,M|I) = P(D|\pi,MI)P(\pi|MI)P(M|I)

边缘化为

P(MDI)=P(π,MDI)dπP(MI)P(Dπ,MI)P(πMI)dπP(M|DI) =\int P(\pi,M|DI)\text{d}\pi\propto P(M|I)\int P(D|\pi,MI)P(\pi|MI)\text{d}\pi

先验是均匀分布的 MM,以及多方的 Jeffreys' for π\pi

P(πMI)=Γ(M/2)ΓM(1/2)k=1Mπk1/2P(\pi|MI) = \frac{\Gamma(M/2)}{\Gamma^M(1/2)}\prod_{k=1}^M\pi_k^{-1/2}

似然是

P(Dπ,MI)=(MV)Nk=1MπknkP(D|\pi,MI) = \left(\frac{M}{V}\right)^N\prod_{k=1}^M\pi_k^{n_k}

虽然结果并没有比 FD-rule 好很多,但是至少已经抛弃了 Gauss 分布的前提.

Adaptive binning: Bayesian Blocks

直译过来就是自适应的 bin 宽度. 这种方式能够处理小的尖峰 (这个方法是由研究脉冲的天文学家提出的),在不同的数据密度处取不同的 bin 宽度.

这一次我们联合优化 bins 的数量 NbN_b 和 bins 的宽度构成的向量 T\bold{T}. 这种情况我们不得不做假设了,下面说几种.

假设数据由 Poisson 分布生成,那么

lnLmax=k=1NblnLmax(k)=k=1Nbnk(lnnklnTk)+const.\ln\mathcal{L}_{\max}=\sum_{k=1}^{N_b}\ln\mathcal{L}_{\max}^{(k)} = \sum_{k=1}^{N_b}n_k(\ln n_k-\ln T_k)+\text{const.}

第二种假设是考虑仪器的测量误差是 Gaussian 分布的,有

lnL({xi,σi}Nn,TI)=12k=1Nbik(xiμkσi)2+const.\ln\mathcal{L}(\{x_i,\sigma_i\}|N_n,\bold{T}I)=-\frac{1}{2}\sum_{k=1}^{N_b}\sum_{i\in k}\left(\frac{x_i-\mu_k}{\sigma_i}\right)^2+\text{const.}

这个方法的问题在于,如果我们移动 bin 的起始点位置,会对最后的记过造成很大的影响;另外,高维情况下几乎没有办法处理. 代码:

import numpy as np
import matplotlib.pyplot as plt
from astropy.visualization import hist
from scipy.stats import norm, laplace
 
# Generate sample data
N = 500                             # total number of samples
weights = [0.7, 0.15, 0.15]         # mixture weights
dists = [laplace(0,0.4), norm(-4,0.2), norm(4,0.2)]
data = np.hstack([d.rvs(int(N * w)) for d,w in zip(dists,weights)])
 
fig, ax = plt.subplots()
hist_values, hist_bin_edges = [], []
 
for method in ['scott', 'freedman', 'knuth', 'blocks']:
  value, edges, _ = hist(data, bins=method, ax=ax, density=True)
  hist_values.append(value)         # retrieve histogram values
  hist_bin_edges.append(edges)      # retrieve bin edges

Continuous Estimators

Kernel Density Estimator (KDE)

在每个样本附近放一个小的 bump,bump 的求和会给出一个光滑的概率密度分布 (bump 是光滑的). 得到

f^h(x)=1NhDi=1NK(d(x,xi)h)\hat{f}_h(x)=\frac{1}{Nh^D}\sum_{i=1}^NK\left(\frac{d(x,x_i)}{h}\right)

其中 K(x)K(x) 是 kernel,也就是每一个 bump 的形状. 和 histogram 对比,可以看出 KDE 的好处是,可以得到连续的分布. 但是最大的缺点是,整个分布对带宽 (kernel 的宽度) 非常敏感,不同带宽会得到完全不一样的分布.

这本质上和 bins 的数量问题是一样的,也有 Scott's rule 和 FD rule. 还有一个 cross - validation 方法:最大化下面的 leave - one - out (LOO) 的 log - likelihood:

CVLL(h)=1Ni=1Nlogf^hii(xi)\text{CV}_{LL}(h) = \frac{1}{N}\sum_{i=1}^N\log \hat{f}_{h_i-i}(x_i)

KDE 的另一个好处是,可以方便地给出测量的误差. 我们先假设 f(x)f(x) (分布) 是测量误差和真实分布的卷积:

f(x)=(hg)(x)h(u)g(xu)duf(x) = (h\star g)(x)\equiv\int h(u)g(x-u)\text{d}u

仔细观察其实也可以发现,KDE 给出的本来就是 kernel 函数和真实分布的卷积,所以做一个反卷积会得到我们所谓的真值分布.

在高维情况下,带宽是一个矩阵,这时需要对数据做一个 pre - whitening (清洗),将每个维度的参数无量纲化,变成一个对称矩阵,用一个各向同性的 kernel 去做 KDE. 代码:

import numpy as np
from sklearn.neighbors import KernelDensity
from sklearn.model_selection import GridSearchCV, LeaveOneOut
 
param_grid = {'bandwidth': np.logspace(-1, 1, 20)}
kde = GridSearchCV(KernelDensity(kernel='gaussian'),
    param_grid, cv=LeaveOneOut())
 
kde.fit(data[:, None])
print("Best bandwidth: ", kde.best_estimator_.bandwidth)
 
# Evaluate the density on a grid of points (`x_grid`)
pdf_kde = np.exp(kde.best_estimator_.score_samples(
    x_grid[:, None]))
 
# Or, if you have a fixed bandwidth
# kde_fixed = KernelDensity(bandwidth=0.5, kernel='gaussian')
# kde_fixed.fit(data[:, None])

k - nearest neighbor (k - NN) estimator

基于「邻居」的 kernel:

f^k(x)=kNVD(dk)\hat{f}_k(x) = \frac{k}{NV_D(d_k)}

也就是自适应的一种 kernel,不是全部一样的 kernel. 这里 VD(dk)V_D(d_k)DD 维、直径 dkd_k 的球的体积. 虽然比之前的 KDE 要更进一步,但是还是有一个自由参数,也就是 kk —— 到底要取几个「邻居」?

代码实践仍然不算难,调用 astroML 包 (astro - machine learning),

import numpy as np
from astroML.density_estimation import KNeighborsDensity
from sklearn.model_selection import GridSearchCV, KFold
 
def knn_scorer(estimator, x_data, y=None):
  """Custom scorer for k-NN density estimator"""
  dens = np.maximum(estimator.eval(x_data), 1e-99)
  return np.mean(np.log(dens))
 
param_grid = {'k': np.arange(5, 125, 5)}
knn = GridSearchCV(KNeighborsDensity('bayesian'),
    param_grid, cv=KFold(n_splits=5), scoring=knn_scorer)
knn.fit(data[:, None])
 
print("Best k: ", knn.best_estimator_.k)
 
# Evaluate the density on a grid of points (`x_grid`)
pdf_knn = knn.best_estimator_.eval(x_grid[:, None])

AI - Based Directions

注意

大家是不是写作业的时候离不开 AI 了...

神经网络的不同权重可以表达处不同的函数. 两种手段:

  • Normalizing flows:从一个简单的基础分布 (比如说 Gaussian) 开始,学习一个可逆双射,映射进入数据空间;从这些变量的变化中找到 density.
  • Autoregressive models:通过乘积法则把联合分布因式分解,用神经网络把每一个条件概率算出来.

Normalizing Flows:

从一个简单的分布开始,z0N(0,1)z_0\sim\mathcal{N}(0,1),考虑一个序列 zk=fk(zk1)z_k = f_{k}(z_{k-1}),通过这样的序列把标准的正态分布变成一个任意的分布:

pX(x)=pZ(z0)i=1KdetJfi(zi1)1p_X(x)=p_Z(z_0)\prod_{i=1}^K|\det J_{f_i}(z_{i-1})|^{-1}

这里,JfiJ_{f_i} 是 Jacobian Jfi(zi1)=fi(zi1)/zi1J_{f_i}(z_{i-1})=\partial f_i(z_{i-1})/\partial z_{i-1}. 我们训练集的目的是最大化似然:

maxθ1Nj=1NlogpX(xj;θ)\max_{\theta}\frac{1}{N}\sum_{j=1}^N\log p_X(x_j;\theta)

Autoregressive Model:

利用神经网络来对序列中的每一个步骤建模,其实就是一个乘积法则:

P(x1,x2,,xD)=i=1DP(xix1,x2,,xi1)P(x_1,x_2,\cdots,x_D) = \prod_{i=1}^D P(x_i|x_1,x_2,\cdots,x_{i-1})

下面我们可以做一件更更加有野心的事情,我们可以不知道似然是什么样子了,但是给定参数、模型和背景信息可以模拟出整个数据. 也就是,可以学习后验,来模拟出似然,得到后验;或者学习似然,模拟出后验.

计算参数和数据的联合分布,P(θ,x)P(\theta,x),神经网络学习这样的分布之后,可以在输入观测数据 xx 之后直接输出参数的后验分布.

Exercise

SDSS 巡天的「Great Wall」. SDSS 巡天项目中发现了一条长达亿光年尺度的结构,请大家用自己喜欢的方法 (KDE、kk - NN 等) 画出它的二维分布.