我想用GMM分類一個測試組。我有一個帶有標籤{1,2,3}的trainset(n * 4矩陣),n表示訓練樣例的數量,它有4個屬性。我還有一個測試集(m * 4)進行分類。使用帶GMM的GMM進行分類
我的目標是爲每個測試示例提供一個概率矩陣(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);
的結果是正確的,但還不夠好。任何人都可以給我一些提示嗎?
謝謝!
你爲什麼選擇9康波你的GMM的內部?更多不一定更好,事實上我已經看到僅使用5-7個組件的極其複雜的訓練集。 – GameOfThrows
我不確定有多少組件可以表現最好。也許你是對的。我要找出最佳的#組件。 –