使用GMM和MATLAB进行分类

时间:2016-05-23 14:50:56

标签: matlab classification mixture-model

我尝试使用GMM对测试集进行分类。我有一个带有标签{1,2,3}的trainset(n * 4矩阵),n表示训练样例的数量,它有4个属性。我也有一个testset(m * 4)被分类。

我的目标是为每个测试示例提供一个概率矩阵(m * 3),给出每个标签P(x_test|labels)。就像软聚类一样。

首先,我在整个列车上创建了一个k = 9个组件的GMM。我知道在一些论文中,作者为列车中的每个标签创建了一个GMM。但是我想处理来自所有类的数据。

    GMModel = fitgmdist(trainset,k_component,'RegularizationValue',0.1,'Start','plus');

我的问题是,我想确认组件和标签之间的关系P(component|labels)。所以我写了一个如下代码,但不确定它是否正确,

    idx_ex_of_c1 = find(trainset_label==1);
    idx_ex_of_c2 = find(trainset_label==2);
    idx_ex_of_c3 = find(trainset_label==3);

    [~,~,post] = cluster(GMModel,trainset);
    cita_c_k = zeros(3,k_component);
    for id_k = 1:k_component
        cita_c_k(1,id_k) = sum(post(idx_ex_of_c1,id_k))/numel(idx_ex_of_c1);
        cita_c_k(2,id_k) = sum(post(idx_ex_of_c2,id_k))/numel(idx_ex_of_c2);
        cita_c_k(3,id_k) = sum(post(idx_ex_of_c3,id_k))/numel(idx_ex_of_c3);
    end

cita_c_k是用于存储关系的(3 * 9)矩阵。 idx_ex_of_c1是示例的索引,其标签为' 1'在火车上。

用于测试过程。我首先将GMModel应用于testset

    [P,~] = posterior(GMModel,testset); % P is a m*9 matrix 

然后,总结所有组件,

    P_testset = P*cita_c_k';
    [a,b] = max(P_testset,3);
    imagesc(b);

结果还可以,但还不够好。谁能给我一些提示?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以采取以下步骤:

  1. 在培训中增加目标错误和/或使用最佳网络规模,但过度培训和网络规模增加通常无法提供帮助

  2. 最重要的是,在训练时随机播放训练数据并仅使用重要数据点来训练标签(忽略可能属于多个标签的数据点

    < / LI>

    <强>可分

    使用相关性使用属性验证数据的可分离性。

    1. 标签(X)中所有数据的相关性应该很高(接近一个)
    2. 标签(X)中的所有数据与标签中的数据(!= X)的互相关应该低(接近零)。
    3. 如果您发现标签中的数据点具有低相关性数据点跨标签具有高相关性 - 它会对选择属性提出疑问(可能存在实际上不会使数据可分离的属性)。这样做如下:

      1. 向数据点添加更多相关属性并删除不太相关的属性(使用此技术的技术是PCA
      2. 从数据点使用派生参数,如顶级频率成分等来训练而非直接点
      3. 使用延时网络训练时间序列(始终)