【发布时间】:2020-05-15 13:39:49
【问题描述】:
所以我在数据框中有一些点让我相信我正在处理幂律曲线。经过一番谷歌搜索,我使用我找到的 in this post 进行曲线拟合。
def func_powerlaw(x, m, c, c0):
return c0 + x**m * c
target_func = func_powerlaw
X = np.array(selection_to_feed.selection[1:])
y = np.array(selection_to_feed.avg_feed_size[1:])
popt, pcov = curve_fit(func_powerlaw, X, y, p0 =np.asarray([-1,10**5,0]))
curvex = np.linspace(0,5000,1000)
curvey = target_func(curvex, *popt)
plt.figure(figsize=(10, 5))
plt.plot(curvex, curvey, '--')
plt.plot(X, y, 'ro')
plt.legend()
plt.show()
这是结果:
问题是,曲线拟合导致前几个值的负值(如蓝线所示),而在实际关系中,不存在负 Y 值。
几个问题:
- 如何确保不会输出负 Y 值?实际上,0 的 X 也应该具有 0 的 Y 值。
- 幂律曲线拟合是否正确?您如何描述这条曲线?
谢谢!
【问题讨论】:
-
能否请您发布数据链接?
-
您需要指定参数的界限,在文档docs.scipy.org/doc/scipy/reference/generated/… 中有一个很好的例子,特别是,我认为如果您的债券都在正范围内,您不应该得到任何负值。
-
@Fabrizio 请参阅我对这个问题的回答,其中讨论了强制曲线通过 [0,0] 点的一种方法 - 这也可以防止问题中讨论的负值。跨度>
标签: python scipy statistics regression curve-fitting