我发现问题真的很有趣,所以我决定尝试一下.我不知道pythonic或natural,但我认为我已经找到了一种更准确的方法,可以在使用每个点的信息时将边缘拟合到像您这样的数据集.
首先,让我们生成一个看起来像你所展示的随机数据.这个部分可以很容易地跳过,我发布它只是为了使代码完整和可重复.我使用了两个双变量正态分布来模拟那些过度密度,并在其上撒上一层均匀分布的随机点.然后将它们添加到与您类似的线方程中,线下的所有内容都被截断,最终结果如下所示:
以下是制作它的代码段:
import numpy as np
x_res = 1000
x_data = np.linspace(0, 2000, x_res)
# true parameters and a function that takes them
true_pars = [80, 70, -5]
model = lambda x, a, b, c: (a / np.sqrt(x + b) + c)
y_truth = model(x_data, *true_pars)
mu_prim, mu_sec = [1750, 0], [450, 1.5]
cov_prim = [[300**2, 0 ],
[ 0, 0.2**2]]
# covariance matrix of the second dist is trickier
cov_sec = [[200**2, -1 ],
[ -1, 1.0**2]]
prim = np.random.multivariate_normal(mu_prim, cov_prim, x_res*10).T
sec = np.random.mu