我已标记2D数据。集合中有4个标签,我知道每个点与其标签的对应关系。我想给定一个新的任意数据点,找出它具有4个标签中的每个标签的概率。它必须属于一个标签且只能属于其中一个标签,因此概率之和应为1。
到目前为止,我所做的是在与每个标签关联的数据点上训练4个独立的sklearn GMM(sklearn.mixture.GaussianMixture
)。应该注意的是,我不希望使用4个组件来训练一个GMM,因为我已经知道标签,并且不想以比我的标签更差的方式重新聚类。 (似乎可以为Y=
函数提供fit()
标签,但是我似乎无法使其正常工作。)
在上图中,点用其已知的标签着色,轮廓表示适合这4组点的四个独立的GMM。
对于新的观点,我尝试通过以下几种方式计算其标签的概率:
GaussianMixture.predict_proba()
:由于每个独立的GMM仅具有一个分布,因此对于所有模型,这仅返回1的概率。
GaussianMixture.score_samples()
:根据文档,此函数返回“每个样本的加权对数概率”。我的过程是,从一个新的观点出发,我代表上述每个分布的四个独立训练的GMM中的每个对该函数进行了四个调用。我在这里确实得到了半明智的结果-对于正确的模型,通常为正数,对于三个不正确的模型,通常为负数,对于相交分布边界附近的点,结果更加混乱。这是一个典型的明确结果:
2.904136, -60.881554, -20.824841, -30.658509
此点实际上与第一个标签关联,并且最不可能是第二个标签(距离第二个分布最远)。我的问题是如何将上述得分转换为概率之和为1,并准确地表示给定点属于四个分布之一且只有其中之一的机会?鉴于这些是4个独立的模型,这可能吗?如果不是,是否有我忽略的另一种方法可以让我根据已知的标签训练GMM,并提供总计为1的概率?
答案 0 :(得分:1)
通常,如果您不知道如何计算分数,但是知道分数和概率之间存在单调关系,则可以简单地使用softmax函数通过可选的温度变量来近似概率。控制分布的尖锐度。
让V
为分数列表,tau
为温度。然后,
p = np.exp(V/tau) / np.sum(np.exp(V/tau))
是您的答案。
PS:幸运的是,我们知道sklearn GMM评分是如何工作的,使用tau=1
的softmax是您的确切答案。