Вал*_*лей 1 python data-analysis scikit-learn
我通过 scikit-learn 和搜索概率密度函数(PDF,黑线)获得了我的 SPS(太阳能发电站)发电的 GMM 模型:
但我想要一个概率函数(CDF 或累积分布函数)。换句话说,我想得到一个像示例一样的函数:
可以接收 y 轴上 [0, 1] 范围内的值,并在所有 x 轴上增长。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)
Run Code Online (Sandbox Code Playgroud)
然后,您只需对估计的密度值求累积和,然后对其进行缩放以使最大值为 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');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1671 次 |
| 最近记录: |