scipy.optimize.curve_fit不适合颠倒的高斯

时间:2018-01-18 14:59:54

标签: python scipy curve-fitting gaussian

我试图使用scipy.optimize.curve_fit将线条与颠倒的高斯分布拟合。它完美地适合传统的高斯,但不适合高斯与标志翻转,而是总是输出一条直线。

我也尝试过限制我的高斯函数,以便变量' a'总是消极但这并不能解决问题。指定-max(y)而不是max(y)似乎也没有帮助。

<a name="list">list</a>
<ul>
  <li><a href="http://google.com">http://google.com</a></li>
  <li><a href="/tutorial">/tutorial.html</a></li>
  <li><a href="local/path">local/path</a></li>
  <li><a href="ftp://ftp.com/my.zip">ftp://ftp.com/my.zip</a></li>
  <li><a href="http://nodejs.org">http://nodejs.org</a></li>
  <li><a href="http://internal.com/test">http://internal.com/</a></li>
</ul>

output

1 个答案:

答案 0 :(得分:2)

我认为这是因为您的第二行可能需要偏移参数?即你的guassianfunc可以制作倒置的钟形曲线,只要它在x轴下方。例如:

y = np.array((3, 2, 1, 2, 3))-4
ax2.plot(x, y, color='black')
ax2.plot(x, fitdata(x, y), linewidth=2, label='Fit')

尝试添加像这样的第4个参数

def fitdata(x, y):
    mean = sum(x * y) / sum(y)
    sigma = np.sqrt(sum(y * (x - mean) ** 2) / sum(y))

    def guassianfunc(xVar, a, b, c, d):
        return a * exp(-(xVar - b) ** 2 / (2 * c ** 2)) + d

    popt, _ = scipy.optimize.curve_fit(guassianfunc, x, y, p0=[max(y), mean,         sigma,0])
    return guassianfunc(x, *popt)

这也可以显着降低您的错误。

相关问题