8

假设我有一组加权样本,其中每个样本都有一个介于 0 和 1 之间的相应权重。我想估计偏向具有较高权重样本的高斯混合分布的参数。在通常的非加权情况下,高斯混合估计是通过 EM 算法完成的。

是否有允许传递权重的实现(任何语言都可以)?如果没有,我该如何修改算法以考虑权重?如果不是,如何将权重合并到问题的最大对数似然公式的初始公式中?

4

5 回答 5

4

我刚刚遇到了同样的问题。即使帖子较旧,但对其他人来说可能很有趣。honk 的回答原则上是正确的,只是不能立即看到它如何影响算法的实现。从 Wikipedia article for Expectation Maximization和一个非常好的教程中,可以很容易地得出这些更改。

如果 $v_i$ 是第 i 个样本的权重,则教程中的算法(参见第 6.2 节末尾)会发生变化,以便 $gamma_{ij}$ 乘以该加权因子。为了计算新的权重 $w_j$,$n_j$ 必须除以权重的总和 $\sum_{i=1}^{n} v_i$ 而不是 n。而已...

于 2011-03-24T16:07:27.597 回答
3

您可以计算加权对数似然函数;只需将每个点乘以它的重量。请注意,您需要为此使用对数似然函数。

所以你的问题减少到最小化 $-\ln L = \sum_i w_i \ln f(x_i|q)$ (原始形式参见维基百科文章)。

于 2010-07-16T22:34:48.367 回答
0

我正在寻找与分布的高斯核估计(而不是高斯混合)相关的类似解决方案。

标准gaussian_kde不允许这样做,但我在这里找到了修改版本的 python 实现 http://mail.scipy.org/pipermail/scipy-user/2013-May/034580.html

于 2014-08-25T09:45:11.930 回答
0

只是一个建议,因为没有发送其他答案。

您可以将普通 EM 与 GMM 一起使用(例如,OpenCV 有许多语言的许多包装器),并在您想要“更多权重”的集群中两次放置一些点。这样,新兴市场就会认为这些观点更重要。如果确实重要,您可以稍后删除额外的分数。

否则,我认为这是非常极端的数学,除非你在高级统计学方面有很强的背景。

于 2010-07-16T21:59:14.077 回答
0

我认为这种分析可以通过支持加权高斯混合建模的pomegranate(参见Pomegranate文档页面)来完成。

根据他们的文档:

weights : array-like, shape (n_samples,), optional 矩阵中每个样本的初始权重。如果没有传入任何内容,则假定每个样本的权重相同。默认为无。

这是我写的一个 Python 片段,它可能会帮助你做一个加权 GMM:

from pomegranate import *
import numpy as np

# Generate some data
N = 200
X_vals= np.random.normal(-17, 0.9, N).reshape(-1,1) # Needs to be in Nx1 shape
X_weights = w_function(X_vals) # Needs to be in 1xN shape or alternatively just feed in the weight data you have

pmg_model = GeneralMixtureModel.from_samples([NormalDistribution], 2, X_vals, weights=X_weights.T[0])

[图] 我们正在分析的数据的观察与加权分布

【图】加权数据的GMM

于 2020-10-29T20:50:44.027 回答