Python 如何获得高斯混合模型的cdf?

Python 如何获得高斯混合模型的cdf?,python,scikit-learn,cdf,mixture-model,Python,Scikit Learn,Cdf,Mixture Model,现在我做了这样的事情,如果有更好的方法,我会赢的 import numpy as np from scipy import integrate from sklearn.mixture import GaussianMixture as GMM model = GMM(n, covariance_type = "full").fit(X) def cdf(x): return integrate.quad(lambda t: np.exp(model.score(t)), -inf, x)

现在我做了这样的事情,如果有更好的方法,我会赢的

import numpy as np
from scipy import integrate
from sklearn.mixture import GaussianMixture as GMM

model = GMM(n, covariance_type = "full").fit(X)

def cdf(x):
 return integrate.quad(lambda t: np.exp(model.score(t)), -inf, x)[0]

混合高斯分布的CDF为F_1,F_2,F_3…,权重为ω_1,ω_2,ω_3…,等于F_混合=ω_1*F_1+ω_2*F_2+ω_3*F_3+。。。因此,答案是:

from scipy.stats import norm

weights = [0.163, 0.131, 0.486, 0.112, 0.107]
means = [45.279, 55.969, 49.315, 53.846, 61.953]
covars = [0.047, 1.189, 3.632, 0.040, 0.198]


def mix_norm_cdf(x, weights, means, covars):
    mcdf = 0.0
    for i in range(len(weights)):
        mcdf += weights[i] * norm.cdf(x, loc=means[i], scale=covars[i])
    return mcdf


print(mix_norm_cdf(50, weights, means, covars))
输出

0.442351546658755

我认为你们的数据是一维的,对吗?是的,你们是对的,模型中的t是什么?分数(t)?