【问题标题】:How to classsify with Gaussian Mixture Models (GMM)如何使用高斯混合模型 (GMM) 进行分类
【发布时间】:2015-03-30 13:28:59
【问题描述】:

我在 matlab 中使用 GMM 进行数据分类。

问题和这个问题类似:probability with Guassian mixture Model

我有以下数据集:

trainData1; % dataset for class 1
trainData2; % dataset for class 2
testData; % test dataset

获取 GMM 模型:

GMM_class1=gmdistribution.fit(trainData1,12,'CovType','diagonal');
GMM_class2=gmdistribution.fit(trainData2,12,'CovType','diagonal');

要获得每个类的测试数据集的对数似然度:

[posteriorTest_Train1,nlogL_1]=posterior(GMM_class1,testData);
[posteriorTest_Train2,nlogL_2]=posterior(GMM_class2,testData);

为了分类,我这样做:

if nlogL_1 < nlogL_2
    % testData belongs to class 1
else
    % testData belongs to class 2
end

拜托,我想知道我做得是否正确。

问候。

【问题讨论】:

    标签: matlab classification


    【解决方案1】:

    这不是我理解的 gmm。 如果您打算将项目归类为第 1 类还是第 2 类, 那么我会做以下事情。

    GMM_class = gmdistribution.fit(trainData,2,'CovType','diagonal');
    posteriorTest = posterior(GMM_class,testData);
    

    然后你可以执行if语句来判断测试数据是属于1类还是2类。

    【讨论】:

    • 感谢您的回答,但我不明白其中的区别。当我使用 GMM_class1 和 GMM_class2 时,我打算获取每个类的模型。不是吗?考虑到您的回答,我知道您只有一组(trainData)中的所有火车数据集(trainData1 和 trainData2),对吗?那么,我该如何以这种方式执行 if 语句?
    • 后验应该有两个值,一个是1类的,一个是2类的。你只需要选择大的作为标签。
    • 我想你在想这个:gmdistribution.fit 函数是 gmdistribution.fit(X,k),其中 X 是数据集,k 是类数。但是,在我的理解中,k 是用于为一个类建模的组件(高斯)的数量。
    • 是的,这是我的理解。我认为 gmm 更像是一种无监督的方法。
    猜你喜欢
    • 2011-09-07
    • 2012-05-21
    • 2014-08-02
    • 2019-08-05
    • 2015-02-20
    • 2017-12-04
    • 2015-05-09
    • 1970-01-01
    • 2014-01-09
    相关资源
    最近更新 更多