【问题标题】:Manually implementing approximation functions手动实现近似函数
【发布时间】:2019-07-23 15:27:59
【问题描述】:

我有一个来自kaggle 的数据集,共有 45,253 行和一列用于底特律市开尔文温度的单列。平均值 = 282.97,标准值 = 11,最小值 = 243.48,最大值 = 308.05。

这是绘制为密度 = True 的 100 个 bin 的直方图时的结果:

我应该写以下两个函数,看看哪个最接近直方图:

在这里使用 scipy.stats.norm.pdf 喜欢这个:

我使用以下图像生成了上面的图像:

x = np.linspace(dataset.Detroit.min(), dataset.Detroit.max(), 1001)
P_norm = norm.pdf(x, dataset.Detroit.mean(), dataset.Detroit.std())

plot_pdf_single(x, P_norm)

但是,每当我尝试实现这两个近似函数中的任何一个时,我的 P_norm 的所有值都会导致 0 或 infs。

这是我尝试过的:

P_norm = [(1.0/(np.sqrt(2.0*pi*(std*std))))*np.exp(((-x_i-mu)*(-x_i-mu))/(2.0*(std*std))) for x_i in x]

我还将它分解为单个 x_i:

part1 = ((-x[0] - mu)*(-x[0] - mu)) / (2.0*(std * std))
part2 = np.exp(part1)
part3 = 1.0 / (np.sqrt(2.0 * pi * (std*std)))
total = part3*part2

我得到以下值:

1145.3913234604413
inf
0.036267480036493875
inf

【问题讨论】:

  • 请尝试-(x_i-mu)*(x_i-mu)
  • 谢谢你,成功了。令人惊讶的是,一个简单的减号如何在 0 和无穷大之间产生差异......

标签: python-3.x numpy approximation


【解决方案1】:

由于两个方程使用相同的公式:

def pdf_approximation(x_i, mu, std):
    return (1.0 / (np.sqrt(2.0 * pi * (std*std)))) * np.exp((-(x_i-mu)*(x_i-mu)) / (2.0 * (std*std)))

第一次近似的代码是:

mu = 283
std = 11

P_norm = np.array([pdf_approximation(x_i, mu, std) for x_i in x])

plot_pdf_single(x, P_norm)

第二个近似的代码是:

mu1 = 276
std1 = 6
mu2 = 293
std2 = 6.5

P_norm = np.array([(pdf_approximation(x_i, mu1, std1) * 0.5) + (pdf_approximation(x_i, mu2, std2) * 0.5) for x_i in x])

plot_pdf_single(x, P_norm)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    相关资源
    最近更新 更多