首页 > 解决方案 > 拟合对数曲线 - 或将其更改为适合

问题描述

我有一组 50 个数据点,如下所示: 数据点

并想要拟合这样的曲线: 带曲线的数据点 如果我拟合 log(x),我会得到一个很好的线性关系(有点), 线性曲线 但我真的希望它是第二条曲线,这意味着我必须以某种方式将其改回来,但保存拟合曲线。

可能很容易,但我迷路了。

编辑:这是看起来过度拟合的 polyfit x,y, deg=3 曲线。 在此处输入图像描述

标签: pythonpandasnumpy

解决方案


这更多是关于对数函数线性化的问题,而不是关于拟合自身的问题。如果您的数据遵循简单的对数关系,例如:

日志

然后您可以对 y 与 log(x) 进行线性回归,其中斜率将等于 A,截距等于 A log(k)。然后,您可以使用这些参数来确定 A(只是斜率)和 k(e**(截距/斜率))并获得结果。

我将按如下方式实现:

import scipy.stats as stats
import numpy as np
import matplotlib.pyplot as plt

slope, intercept, r_value, p_value, std_err = stats.linregress(np.log(x), y)

plt.figure()
plt.plot(x,y,'o')
plt.plot(x,slope*np.log(x*np.e**(intercept/slope)))

推荐阅读