现在我做这样的事情,如果有更好的方法,我想知道。
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]
答案 0 :(得分:0)
混合高斯分布的CDF的CDF为F_1,F_2,F_3 ...,权重ω_1,ω_2,ω_3...等于F_mixed =ω_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