0

GMM を使用してテストセットを分類しようとしています。ラベル {1,2,3} を持つトレインセット (n*4 行列) があります。n は、4 つのプロパティを持つトレーニング例の数を意味します。また、分類するテストセット (m*4) もあります。

私の目標は、各ラベルを与える各テスト例の確率行列 (m*3) を持つことですP(x_test|labels)。ソフトクラスタリングと同じです。

まず、トレインセット全体で k=9 コンポーネントを使用して GMM を作成します。一部の論文では、著者がtrainsetの各ラベルに対して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をテストセットに適用します

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

そして、すべてのコンポーネントを合計し、

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

結果はOKですが、十分ではありません。誰でもヒントを教えてもらえますか?

ありがとう!

4

1 に答える 1