高斯混合模型(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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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