Python将分布拟合到钟形曲线

时间:2017-04-19 22:14:09

标签: python numpy scipy

我正在研究预测模型。我的模型预测并不总是作为标准分布出现。我想要转换或拟合分布值,以便分布适合钟形曲线。这就像我想要一种转换函数,它将我的分布转换为钟形曲线(不一定标准化)。

例如,以下是我的发行版:

enter image description here

请注意,分布有些偏斜,而且完全标准/形状像钟形曲线。

这与我想要的分布接近:

enter image description here

注意:这也不是完美的分布,只是更接近

注意:我没有尝试将值标准化,只是适合分布。请注意,目标分布未规范化。

我以为我可以使用scipy.normnumpy的内容,但我似乎无法找到我想要的内容。

1 个答案:

答案 0 :(得分:2)

您可能考虑的一个工具是Box-Cox transformation。 scipy中的实现是scipy.stats.boxcox

以下是一个例子:

import numpy as np
from scipy.stats import boxcox, gamma
import matplotlib.pyplot as plt


# Generate a random sample that is not from a normal distribution.
np.random.seed(1234)
x = gamma.rvs(1.5, size=250)

# Transform the data.
y, lam = boxcox(x)

# Plot the histograms.
plt.subplot(2, 1, 1)
plt.hist(x, bins=21, rwidth=0.9)
plt.title('Histogram of Original Data')
plt.subplot(2, 1, 2)
plt.hist(y, bins=21, rwidth=0.9)
plt.title('Histogram After Box-Cox Transformation\n($\\lambda$ = %.4g)' % lam)
plt.tight_layout()
plt.show()

plot