我已经使用sklearn训练了一个高斯混合模型,并且我试图在给定集群均值和方差的情况下获得数据点的非标准化职责。
遗憾的是, GMM.predict_proba
返回归一化概率,使得它们总和为1,但我需要原始概率。
我尝试了以下(GMM是适合的GM模型):
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。
我做错了什么?
答案 0 :(得分: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