机器学习基础:深入浅出贝叶斯模型选择方法,附完整PDF文件

贝叶斯推理[1](Bayesian inference)是统计学中的一个重要问题,也是许多机器学习方法中经常遇到的问题。例如,用于分类的高斯混合模型或用于主题建模的潜在狄利克雷分配(Latent Dirichlet Allocation,简称LDA)模型等概率图模型都需要在拟合数据时解决这一问题。

同时,由于模型设置(假设、维度……)不同,贝叶斯推理问题有时会很难解决。在解决大型问题时,精确的方案往往需要繁重的计算,要完成这些难以处理的计算,必须采用一些近似技术,并构建快速且有可扩展性的系统。

统计推断旨在根据可观察到的事物来了解不可观察到的事物。即,统计推断是基于一个总体或一些样本中的某些观察变量(通常是影响)得出结论的过程,例如关于总体或样本中某些潜在变量(通常是原因)的准时估计、置信区间或区间估计等。

而贝叶斯推理则是从贝叶斯的角度产生统计推断的过程。简而言之,贝叶斯范式是一种统计/概率范式,在这种范式中,每次记录新的观测数据时就会更新由概率分布建模的先验知识,观测数据的不确定性则由另一个概率分布建模。支配贝叶斯范式的整个思想嵌入在所谓的贝叶斯定理中,该定理表达了更新知识(“后验”)、已知知识(“先验”)以及来自观察的知识(“可能性”)之间的关系。

贝叶斯模型选择

贝叶斯定理为:

上面的每一项都有一个名称,测量不同的概率:

当我们只考虑一个模型时,我们经常忽略模型 。然而,除非只有一个可能的模型,否则我们仍然需要解决比较可能的模型的元推理问题。虽然这一步通常被称为 模型选择,但最好将其看作是模型比较,因为它只能为不同的模型分配相对的概率。

从贝叶斯视角看模型选择是用概率来表示模型选择的不确定性。假设要比较模型集 ,模型指的是在观测数据集 上的一个概率分布。我们假设数据是从这些模型中的某一个产生的,但不确定是哪一个。

假设观测数据为 ,模型 的后验概率为:

其中,分子 是给定 的 证据,而分母现在是一个 超级证据:

在一个离散可数(也许是无限)的模型集的情况下,积分变成一个和:

每个 模型可能性 指的是在 范围内的概率。并引入了模型本身的先验 ,它可以看作是整个模型空间上的似然函数,模型参数均被边际化。

注意这个 模型的贝叶斯定理 与原始贝叶斯定理之间的相似性。

两个实际模型比较的问题

在不计算证据P(D|M)的情况下对给定模型进行推理,但这不适用于模型比较。为了计算超级证据,必须能够指定所有可能的模型。
然而,如果只想比较两个可能的模型M1M2,而不指定(或者甚至不知道)可能的模型集,就可以避开第二个问题。此处用优势比进行比较:

其中,超级证据P(D)在比率中抵消了。右边出现的模型证据 的比率被称为贝叶斯因子(Bayes factor):

举例说明

我们很容易忽视全局概率的计算,所以来看一个简单的例子:

讨论

研究此刻你所观察到的图像D在脑海中的两个模型:

M1:图像显示一张纸。
M2:图像显示两张纸。
这两种模式都是有可能的吗?给出一些为什么不可能是M2的理由。你的论点是否基于先验知识?

这两种模型当然都是可能的,因为尺子可能隐藏了这是并排的两张纸的事实。

然而,实际上不太可能是模型M2,因为:

这看起来像一张标准的(美国)纸,纸张尺寸作为论点会支持这种可能的结论。
退一步讲,如果有两张纸能像这样完美地排成一行,那一定是个惊人的巧合。
第一个论点是基于我们的先验知识,例如:

标准(美国)纸的比例是8.5到11。
大多数(美国)尺子的单位是英寸。
因此,上面的这种类型的论证出现在模型先验的比率中,即优势比为P(M1)/P(M2)

然而,第二个论点是关于概率的陈述,不依赖于任何先验知识。相反,它出现在上面的贝叶斯因子中。如要了解这是内在机制,我们需要为每个模型定义参数。对于每一张纸,使用四个参数:

定义(x,y)在纸张的左上角,这可以是图像中的任何位置。
纸张的宽度w和高度h,范围覆盖整个图像的宽度和高度。
M1M3 的可能性分别是四个和八个参数的积分:

对于M2,观察到的图像D的可能性将为零,除非第二张纸的参数表明它在标尺下完全对齐。因为M2参数范围只是整个图像中的一小部分,所以与P(D/M1)相比,P(D/M2)受到严重的惩罚,从而导致具有较大的Bayes因子。

这是奥卡姆剃刀[3]的一个例子:贝叶斯推理倾向于最简单的解释(模型),独立于任何先验知识。

案例分析:多少峰值?

采样方法(MCMC)从由一个因子定义的概率分布中抽取样本。然后,可以从这个分布中得到样本(仅使用未标准化的部分定义),并使用这些样本计算各种准时统计量,如均值和方差,甚至通过密度估计来求得近似分布,从而避免处理涉及后验的棘手计算。

根据采样方法定义如下函数:从两个高斯函数的混合中生成单个特征x的一些随机样本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def generate_mix(n_total, frac1, mu1, mu2, sigma1, sigma2, seed=123, plot_range=(-1.5, 1.5)):
gen = np.random.RandomState(seed=seed)
# 将每个样本分配给其中一个峰值。
idx = scipy.stats.bernoulli.rvs(1 - frac1, size=n_total, random_state=gen)
# 设置每个样本的高斯参数。
mu = np.array([mu1, mu2])[idx]
sigma = np.array([sigma1, sigma2])[idx]
# 生成每个样本。
X = scipy.stats.norm.rvs(mu, sigma, random_state=gen)
# 可选的绘图.
if plot_range:
bins = np.linspace(*plot_range, 30)
plt.hist(X, bins, histtype='stepfilled', alpha=0.5, density=True)
plt.hist(X, bins, histtype='step', color='k', lw=1, density=True)
grid = np.linspace(*plot_range, 201)
if frac1 > 0:
pdf1 = scipy.stats.norm.pdf(grid, mu1, sigma1)
plt.plot(grid, frac1 * pdf1, lw=2)
if frac1 < 1:
pdf2 = scipy.stats.norm.pdf(grid, mu2, sigma2)
plt.plot(grid, (1 - frac1) * pdf2, lw=2)
plt.show()
return X

生成数据集

生成高斯参数均值为0、方差为0.5,且只有一个峰值的高斯分布。

1
2
n_gen = 200
Da = generate_mix(n_gen, 1.0, 0.0, np.nan, 0.5, np.nan)

生成第一高斯参数均值为-0.3、方差为0.1,第二高斯参数均值为0.3、方差为0.3,这样就得到具有两个峰值的高斯分布。

1
Db = generate_mix(n_gen, 0.5, -0.3, 0.3, 0.1, 0.3)

将上步的方差增大至0.4,其余参数不变,得到如下高斯分布图。

1
Dc = generate_mix(n_gen, 0.5, -0.3, 0.3, 0.4, 0.4)

注意,每个样本都有从每个高斯分布中提取的整数项,因此只在设置了均值情况下frac1才能真正的实现。

接下来通过比较两个模型来解释这些数据。

对于这三个数据集,预测M1相对于M2的Bayes系数是否为:

阅读剩余内容请下载完整版pdf文件:贝叶斯模型选择问题

原文链接:https://xiaohost.com/3863.html,转载请注明出处。
0

评论0

请先