【发布时间】:2019-11-06 14:30:43
【问题描述】:
我正在努力解决一个问题,该问题涉及计算适合散点图边缘的曲线方程,如下所示。这是一个明确定义的边缘,但我需要一个精确的配合。
我最初的尝试是基于这个脚本...
Fit a curve to the boundary of a scatterplot
...但是我对 Python 不够熟悉,无法通过阅读了解这段代码是如何组成的,并且无法完全适应我的情况。
这是我从该示例中尝试过的。这里的目标是将曲线建模为具有限制的指数增长,然后将曲线向下移动到迭代的点。但是,这和 scipy.optimize curve_fit 似乎都没有给我一个精确的拟合。
from math import e
model = lambda x, a, b: (a * (1 - (e ** (-b * x)))
def get_flipped(y_data, y_model):
flipped = y_model - y_data
flipped[flipped > 0] = 0
return flipped
def flipped_resid(pars, x, y):
y_model = model(x, *pars)
flipped = get_flipped(y, y_model)
resid = np.square(y + flipped - y_model)
return np.nan_to_num(resid)
from scipy.optimize import leastsq
guesses =[100, 5]
fit_pars, flag = leastsq(func = flipped_resid, x0 = guesses,
args = (x_data, y_data))
我对 Python(R 原生)比较陌生,所以这里可能会出现一些明显的错误,但是我怎样才能提高拟合度以使线条正好位于边缘?
【问题讨论】:
-
你有可用的数据,还是只有散点图?
-
是的,我正在使用具有 X 和 Y 数据点的 20k 行矩阵
-
如果您可以发布数据链接,我想我可以在短时间内为您提供一个工作示例。
标签: python-3.x curve-fitting scatter-plot