matlab 自带gmm,matlab - 使用GMM和MATLAB进行分类 - 堆栈内存溢出

我正在尝试使用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);

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

谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值