使用 GMM 和 MATLAB 进行分类
Posted
技术标签:
【中文标题】使用 GMM 和 MATLAB 进行分类【英文标题】:Classify using GMM with MATLAB 【发布时间】:2014-08-07 01:48:07 【问题描述】:我想在 MATLAB 中使用高斯混合模型对两个类进行分类。
我通过使用函数 gmdistribution.fit 创建两个模型来进行训练
NComponents = 1;
for class=1:2
model(class).obj = gmdistribution.fit(trainData(class).feature,NComponents,'Regularize',.1);
end
然后,给定测试数据点,我想知道如何对它们进行分类。我现在做的是获取每个模型中每个点的后验概率:
vectorClasses = zeros(1,2);
for class=1:2
Pos= posterior(model(class).obj,testDataPoint);
suma=0;
for k=1:NComponents
suma = suma + Pos(1,k)*model(class).obj.PComponents(k);
end
vectorClasses(class)=suma;
end
[v ix] = sort(vectorClasses,'descend');
if ix(1)==realClass
success= 1;
else
success= 0;
end
我将每个组件的后验概率与模型中组件的概率的乘积相加。然后我对每个模型中获得的概率进行排序。我说测试数据点对应概率最高的类。
我做得好吗?正确的方法是怎样的?有没有最简单的方法?
【问题讨论】:
嗨,我之前也遇到过类似的问题,***.com/questions/24037988/…,我认为@dpwe 是对的。基本上,我使用[Dummy, nlogl] = posterior(model(class).obj, testDataPoint)
nlogl
作为典型类的后验。希望这可以帮到你。此外,您可以在 Matlab 中打开后验函数,以确保您通过调试模式了解该函数的输出含义。
【参考方案1】:
似乎不需要像在 HMM 的情况下那样每个类都有独立的模型,如答案中所述: this very complete description。与分类阶段类似,后验命令似乎可以完成这项工作。然而,看起来模型并没有指出哪个集群代表哪个类(我们必须弄清楚)。如果您已获得完整的解决方案,请发布。关于如何使用matlab的gmm进行分类的信息并不多(也一直在搜索)。
【讨论】:
以上是关于使用 GMM 和 MATLAB 进行分类的主要内容,如果未能解决你的问题,请参考以下文章
EM+GMM基于EM和GMM算法的目标轨迹跟踪和异常行为识别matlab仿真