Matlab中的gmdistribution用于分类

3

假设我有两个使用gmdistribution模型获得的模型

modeldata1=gmdistribution.fit(data1,1);
modeldata2=gmdistribution.fit(data2,1);

现在我有一个未知的“数据”观测值,我想知道它是属于`data1`还是`data2`。
基于我对这些函数的理解,使用后验、聚类或PDF命令得到的nlogn输出不是一个很好的度量方式,因为我正在比较“数据”和两个不同的分布。
那么我应该使用什么度量方式或输出来找到`p(data|modeldata1)`和`p(data|modeldata2)`?
非常感谢。
1个回答

2
如果我理解您的意思正确,您想将一个新的未知数据点分配给类1或类2,而这两个类别各自具有描述符(在本例中为均值向量和协方差矩阵),这些描述符是通过gmdistribution.fit找到的。
在看到这个新数据点x时,您应该问自己什么是p(modeldata1 | x)和p(modeldata2 | x),并且无论哪一个最大,都应该将x分配给它。
那么如何找到这些值呢?您只需要应用贝叶斯规则,并选择以下哪个是最大的:
p(modeldata1 | x) = p(x|modeldata1)p(modeldata1)/p(x)
p(modeldata1 | x) = p(x|modeldata2)p(modeldata2)/p(x)

在这里,您不需要计算p(x),因为它在每个方程中都相同。

因此,现在您可以通过每个类别的训练点数(或使用一些给定信息)来估计先验概率p(modeldata1)和p(modeldata2),然后计算

p(x|modeldata1)=1/((2pi)^d/2 * sqrt(det(Sigma1)))*exp(0.5*(x-mu1)/Sigma1*(x-mu1))

其中d是数据的维度,Sigma是协方差矩阵,mu是均值向量。这就是您所要求的p(data|modeldata1)。(请记得在进行分类时同时使用p(modeldata1)和p(modeldata2))。

我知道这可能有点不清楚,但希望能帮助您朝正确的方向迈进一步。

编辑:个人认为像下面这个可视化(来自Theodoridis和Koutroumbas的模式识别)会更好理解。这里有两个高斯混合,具有不同的先验概率和协方差矩阵。蓝色区域是选择一个类别的区域,而灰色区域是选择另一个类别的区域。enter image description here


正确,但问题是,我可以使用Matlab本身找到可能性(更具体地说是nlogliklihood)。然而,这些数字对我来说并没有真正意义。似乎它们需要一些我无法理解的归一化处理。 - Louis
你的意思是什么?你通常会得到什么范围的数字?请记住,在连续情况下,你不能期望 p(x|y) (概率分布)处于 [0,1] 范围内。 - Vidar
如果我假设先验概率p(modeldata1)=p(modeldata2),而且p(x)没有关系,因为它只会对p(modeldata1|x)和p(modeldata2|x)产生相同的影响。那么我可以基于nlogn来做决策吗?我认为您的观点恰好是我困惑的地方。P(x|y)不必须是[0到1]的,但是如果(p1|x)>(p2|x),那么我更可能选择p1而不是p2,对吧?(希望我表达清楚了) - Louis
我的问题是,我理解了它的理论,但是使用一个简单的阈值比使用gmm模型做出更好的决策。所以过去两天我一直在想如何可能做到这一点,令人苦恼。 - Louis
嗨。抱歉回复有点晚。我不确定我是否完全理解了,但也许你的问题是你过于关注“选择p1的概率” - 你应该使用这个评估来制定严格的决策规则;即“只要p(model1 | x)> p(model2 | x),我就选择model1”。不要陷入关于这意味着什么的具体细节中,只要承认这可能是一个好的遵循规则。 - Vidar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接