【问题标题】:Fitting a curve to the edge of a scatterplot将曲线拟合到散点图的边缘
【发布时间】: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))

Curve to be fit

我对 Python(R 原生)比较陌生,所以这里可能会出现一些明显的错误,但是我怎样才能提高拟合度以使线条正好位于边缘?

【问题讨论】:

  • 你有可用的数据,还是只有散点图?
  • 是的,我正在使用具有 X 和 Y 数据点的 20k 行矩阵
  • 如果您可以发布数据链接,我想我可以在短时间内为您提供一个工作示例。

标签: python-3.x curve-fitting scatter-plot


【解决方案1】:

我沿边缘提取数据点,为了适应它们,我必须在您的方程中添加一个偏移量 - 使其成为“a * (1 - (exp(-b * X))) + offset”,即用参数 a = 9.9214258118219334E+01, b = 4.2835994748526849E+00 和偏移量 = -1.4428475065933015E+00 很好地拟合了边缘。缺少偏移量可能会导致您遇到困难。

【讨论】:

  • 非常感谢!这绝对有助于解决我的问题,让我找到合适的衣服。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-19
相关资源
最近更新 更多