【发布时间】:2018-03-25 10:00:57
【问题描述】:
好像只适合第一个参数。
当我尝试使用 curve_fit 示例生成曲线时,一切都很好,但当我使用自己的数据时却不行。
这是我的原始数据:https://pastebin.com/0hs2JVXL
为了简单起见,我将其转换为整数,所以这是我提供给curve_fit 的数据:https://pastebin.com/2uP0iyTw
这是我试图拟合的曲线(基本上是带有刻度值的对数正态分布的公式):
def func(x, k, s, u):
x=np.array(x)
return k * (1 / (x * s * np.sqrt(2*np.pi))) * np.exp( - np.power((np.log(x)-u),2) / (2*np.power(s , 2)))
这就是我使用它的方式:
graphData.append(
{
'x': xdata,
'y': ydata,
'name': "data",
'mode': 'lines'
}
)
popt, pcov = curve_fit(func, xdata, ydata)
graphData.append(
{
'x': xdata,
'y': func(xdata, *popt),
'name': "" + "[Fit]",
'mode': 'lines'
}
)
但这是我得到的输出数据:https://pastebin.com/WjaTH9wQ
这些是它设置的参数:k=33.06185171 s= 1. u=1.
并且可视化:
我完全不确定为什么这不起作用。
【问题讨论】:
-
您是否尝试使用
p0参数添加接近预期结果的初始猜测? -
@jadsq 我会尽快尝试。我希望将来针对相同形状的不同图形自动执行此操作,所以我不确定依靠猜测是否是个好主意
-
这里是一个使用 scipy.optimize.differential_evolution 遗传算法模块为曲线拟合创建 p0 初始参数估计的示例,该示例将碳纳米管的拉曼光谱数据拟合到双洛伦兹峰方程:bitbucket.org/zunzuncode/ramanspectroscopyfit - 根据您的具体情况修改此代码,您应该没问题。
标签: python numpy scipy regression curve-fitting