Scikit-Learn 中的累积分布函数 (CDF)?

Cumulative Distribution Function (CDF) in Scikit-Learn?

我通过scikit-learn获得我的SPS(太阳能发电站)发电的GMM模型并搜索概率密度函数(PDF,黑线):

但我想要一个概率函数(CDF 或累积分布函数)。换句话说,我想得到一个像例子这样的函数:

可以接收 y 轴上 [0, 1] 范围内的值并在所有 x-axis 上增长。 scikit-learn允许还是不允许?

假设您做过这样的事情:

import numpy as np
from sklearn.mixture import GaussianMixture

# create data
rng = np.random.RandomState(seed=42)
X = np.concatenate([rng.normal(0, 1, 100),
                    rng.normal(10, 3, 100),
                    rng.normal(30, 2, 100)]).reshape(-1, 1)

# estimate probability density function (pdf) 
model = GaussianMixture(n_components=2)
model.fit(X) 
x = np.linspace(-10, 40, 1000)
logprob = model.score_samples(x.reshape(-1, 1))
pdf = np.exp(logprob)

然后你可以得到累积分布函数,只需对估计的密度值求累积和,然后缩放它,使最大值为 1:

import matplotlib.pyplot as plt

# derive cumulative distribution function (cdf)
cdf = np.cumsum(pdf)
# scale as a probability distribution
cdf = cdf / np.max(cdf)

# plot data and pdf  
plt.hist(X, 25, density=True, histtype='stepfilled', alpha=0.3)
plt.plot(x, pdf, '-k')

# plot cdf, scaled to the y limits of the above plot
xmin, xmax, ymin, ymax = plt.axis()
plt.plot(x, cdf * ymax, '-b');