估算一组加权样本的高斯(混合)密度

时间:2010-03-22 13:48:02

标签: statistics machine-learning estimation gaussian

假设我有一组加权样本,其中每个样本的相应权重介于0和1之间。我想估计高斯混合分布的参数,该分布偏向于具有较高权重的样本。在通常的非加权情况下,通过EM算法完成高斯混合估计。有没有人知道允许传递权重的实现(任何语言都可以)?如果没有,是否有人知道如何修改算法以计算权重?如果没有,有人可以给我一个关于如何将权重纳入问题的最大对数似然公式的初始公式中的提示吗?

谢谢!

5 个答案:

答案 0 :(得分:4)

我刚遇到同样的问题。尽管帖子较旧,但对其他人来说可能会很有趣。 honk的答案原则上是正确的,只是不能立即看到它如何影响算法的实现。从维基百科的Expectation Maximization文章和非常好的Tutorial,可以轻松地推导出更改。

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

答案 1 :(得分:3)

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

所以你的问题减少到最小化$ - \ ln L = \ sum_i w_i \ ln f(x_i | q)$(原始形式见the Wikipedia article)。

答案 2 :(得分:0)

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

您可以将普通EM与GMM一起使用(OpenCV,例如,OpenCV有许多语言的包装器),并在群集中将两个点放在您想要“更多权重”的位置。那样,EM会认为这些点更重要。如果有问题,您可以在以后删除额外的积分。

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

我认为可以通过支持加权高斯混合模型的pomegranate(请参阅Pomegranate文档页面)进行此分析。

根据他们的文档:

权重:类似数组,形状(n_samples),可选 矩阵中每个样本的初始权重。如果什么都不是 如果传入的样本数量相同,则假定每个样本的重量相同。 默认值为无。

这是我写的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])

[Figure] Observed versus weighted distribution of the data we are analyzing

[Figure] GMM of the weighted data