使用 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仿真

怎么用matlab画gmm混合模型

在 EM 实现中处理空组件以进行 GMM 学习

GMM算法的matlab程序(初步)

语音识别基于高斯混合模型(GMM)的语音识别matlab源码

matlab_fitcsvm & fitcecoc函数示例学习