【问题标题】:fitting a logaritmic curve - or changing it to fit拟合对数曲线 - 或将其更改为适合
【发布时间】:2019-09-09 21:14:41
【问题描述】:

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

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

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

编辑: 这是看起来过度拟合的 polyfit x,y, deg=3 曲线。

【问题讨论】:

标签: python pandas numpy


【解决方案1】:

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

然后您可以对 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)))

【讨论】:

  • 是的!谢谢!如果我想计算这条曲线的 RSS 和 R2 系数 - 我该怎么做?
  • “o”代表什么?抱歉,这可能真的很基础,但我是新手 ;)
  • 查看 scipy stats.linregress function 的文档:r_value 是相关系数,因此您只需将其平方作为 R2。关于 RSS,您可以直接从其 definition 计算它
  • 和 'o' 只是将您的数据绘制为点,否则 plt.plot 默认会给您一条线。如需更多标记选项,请查看documentation
猜你喜欢
  • 2020-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-19
  • 1970-01-01
  • 2021-09-01
相关资源
最近更新 更多