我正在尝试使用 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);
结果还可以,但还不够好。谁能给我一些提示?
谢谢!