Matlab中分类的gmd分布

Matlab中分类的gmd分布,matlab,Matlab,让我们假设我有两个GMDistribution模型,我使用 modeldata1=gmdistribution.fit(data1,1); modeldata2=gmdistribution.fit(data2,1); 现在我有一个未知的“数据”观察,我想看看它是属于data1还是data2 根据我对这些函数的理解,使用posterior、cluster或pdf命令的nlogn输出不是一个好的度量方法,因为我将“数据”与两个不同的分布进行比较 我应该使用什么度量或输出来查找p(数据|模型数据1

让我们假设我有两个GMDistribution模型,我使用

modeldata1=gmdistribution.fit(data1,1);
modeldata2=gmdistribution.fit(data2,1);
现在我有一个未知的“数据”观察,我想看看它是属于
data1
还是
data2

根据我对这些函数的理解,使用posterior、cluster或pdf命令的nlogn输出不是一个好的度量方法,因为我将“数据”与两个不同的分布进行比较

我应该使用什么度量或输出来查找
p(数据|模型数据1)和p(数据|模型数据2)


非常感谢,

如果我理解正确,您希望使用gmdistribution.fit找到的每个类的描述符(在本例中为平均向量和协方差矩阵)为类1或类2分配一个新的未知数据点

在看到这个新的数据点时,让我们称之为x,您应该问问自己什么是 p(modeldata1 | x)和p(modeldata2 | x)以及其中哪一个是您应该将x指定给的最高值

那你觉得这些怎么样?您只需应用Bayes规则并选择其中最大的一个:

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(数据| modeldata1)的要求。(在进行分类时,请记住还要使用p(modeldata1)和p(modeldata2)

我知道这有点不清楚,但希望它能帮助你朝着正确的方向迈出一步


编辑:就我个人而言,我发现了下面这样的可视化(摘自Theodoridis和Koutroumbas的模式识别)。这里有两个高斯混合,有一些先验值和不同的协方差矩阵。蓝色区域是选择一个类的位置,而灰色区域是选择另一个类的位置

没错,但问题是,我可以用matlab本身找到可能性(或者更具体地说是NLOGLIHOOD)。然而,这些数字对我来说并没有什么意义。他们似乎需要一些我无法理解的正常化。你是什么意思?您通常得到的数字范围是多少?请记住,在连续情况下,你不能期望p(x | y)(概率分布)位于[0,1]中。如果我假设前面的p(modeldata1)=p(modeldata2),p(x)无关紧要,因为它只会对p(modeldata1 | x)和p(modeldata2 | x)产生相同的影响。那么我可以根据nlogn做出决定吗?我想你的观点正是我的困惑。P(x | y)不必是[0到1],但如果(p1 | x)>(p2 | x),那么我有更高的概率选择p1而不是p2,对吗?(我希望我表达了我的观点)我的问题是,我得到了它背后的理论,但我使用一个简单的阈值比gmm模型有更好的决策。所以在过去的两天里,我一直在拉扯我的头发,想看看这是怎么可能的。抱歉,回复有点晚。我不确定我是否完全遵守了,但也许你的问题是你已经专注于“选择p1的概率”——你应该用这个评估来制定一个严格的决策规则;我E“只要p(model1 | x)>p(model2 | x),我就选择model1”。不要陷入关于这“意味着什么”的细节中,只要承认这可能是一个值得遵循的好规则