我正在尝试使用GMM对测试集进行分类。 我有一个带有标签{1,2,3}的训练集(n * 4矩阵),n表示训练示例的数量,具有4个属性。 而且我还有一个要分类的测试集(m * 4)。
我的目标是为每个测试示例提供一个概率矩阵(m * 3),并赋予每个标签P(x_test|labels) 。 就像软集群一样。
首先,我在整个火车上创建了一个kMM = 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是示例的索引,在样本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);
结果还可以,但是还不够好。 谁能给我一些提示?
谢谢!