高斯混合模型(EM算法)如何计算责任度

我有一个作业,需要在Matlab中实现高斯混合模型(MoG)与期望最大化(EM)算法。作业内容如下: enter image description here

我目前的代码如下:

clearclcload('data2')%% INITIALIZEK = 20pi =  0.01:((1-0.01)/K):1;for k=1:20    sigma{k} = eye(2);    mu(k,:) = [rand(1),rand(1)];end%% Posterior over the laten variablesaddition = 0;for k =1:20     addition = addition + (pi(k)*mvnpdf(x,mu(k,:), sigma{k}));endtest = 0;for k =1:20    gamma{k} =  (pi(k)*mvnpdf(x,mu(k), sigma{k})) ./ addition;  end

数据有1000行和2列(即1000个数据点)。我的问题是如何计算责任度。当我尝试计算协方差矩阵时,得到的是一个1×1000的矩阵。而我认为协方差矩阵应该是2×2的。


回答:

很遗憾,我不会Matlab,所以我无法判断你的代码哪里有问题,但我可以给出一般性的回答(或许有懂Matlab的人可以看看你的代码是否可以修复)。每个数据点都有一个与之关联的gamma值,这是混合模型中每个成分的指示变量的期望值。计算这些值非常简单:对于第i个数据点和第k个成分,gamma_ik只是第k个成分在第i个点的密度,乘以第k个混合系数(即该点来自第k个成分的先验概率,在你的作业中是pi),然后除以这个量在所有k上的计算结果。因此,对于每个数据点,你会得到一个长度为k的责任度向量,其总和为1。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注