如何获取GMM聚类的未归一化责任?

1 投票
1 回答
1258 浏览
提问于 2025-04-17 23:18

我用sklearn训练了一个高斯混合模型,现在想根据聚类的均值和方差,得到某个数据点的未归一化责任值。

可惜的是,GMM.predict_proba返回的是归一化的概率,这些概率加起来等于1,但我需要的是原始的概率。

我尝试了以下方法(GMM是我训练好的高斯模型):

import numpy as np
from sklearn import mixture
lpr = (mixture.log_multivariate_normal_density(X, GMM.means_, GMM.covars_, GMM.covariance_type) + np.log(GMM.weights_))
probs = np.exp(lpr)

但是我得到的概率大于1。

我哪里出错了呢?

1 个回答

0

lpr 是高斯成分的对数概率。要把它转换成高斯混合模型(GMM)的概率,需要在对数空间中进行求和。下面的代码会对此进行解释。

from sklearn.utils.extmath import logsumexp

lpr = (mixture.log_multivariate_normal_density(X, GMM.means_, GMM.covars_, GMM.covariance_type) + np.log(GMM.weights_)) # probabilities of components
logprob = logsumexp(lpr, axis=1) # logsum to get probability of GMM
probs = np.exp(logprob) # 0 < probs < 1 

撰写回答