Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 更好地拟合幂律曲线_Python_Scipy_Statistics_Regression_Curve Fitting - Fatal编程技术网

Python 更好地拟合幂律曲线

Python 更好地拟合幂律曲线,python,scipy,statistics,regression,curve-fitting,Python,Scipy,Statistics,Regression,Curve Fitting,所以我在一个数据框中有一些点让我相信我在处理幂律曲线。在谷歌搜索之后,我用我发现的来进行曲线拟合 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 = curv

所以我在一个数据框中有一些点让我相信我在处理幂律曲线。在谷歌搜索之后,我用我发现的来进行曲线拟合

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值?实际上,X为0时,Y值也应该为0
  • 幂律曲线拟合是正确的吗?你如何描述这条曲线

  • 谢谢大家!

    如果你只是在寻找一个更适合的简单近似方程,我从你的图中提取数据,并在你的注释中添加已知数据点[0,0]。由于[0,0]点的不确定度为零——也就是说,你100%确定该值——我使用了加权回归,其中一个已知点的权重非常高,所有其他点的权重为1。这会迫使曲线通过[0,0]点,这可以通过任何允许加权拟合的软件完成。我发现一个标准的几何加偏移方程,“y=a*pow(x,(b*x))+offset”,参数为:

    a = -1.0704001788540748E+02
    b = -1.5095055897637395E-03
    Offset =  1.0704001788540748E+02
    
    如所附绘图所示进行拟合,并通过[0,0]。我的建议是使用实际数据加上已知的[0,0]点,使用这些值作为初始参数估计值,并在可能的情况下使用非常大的权重作为[0,0]点进行回归


    如果你只是想寻找一个更适合的简单近似方程,我从你的图中提取了数据,并根据你的注释添加了已知的数据点[0,0]。由于[0,0]点的不确定度为零——也就是说,你100%确定该值——我使用了加权回归,其中一个已知点的权重非常高,所有其他点的权重为1。这会迫使曲线通过[0,0]点,这可以通过任何允许加权拟合的软件完成。我发现一个标准的几何加偏移方程,“y=a*pow(x,(b*x))+offset”,参数为:

    a = -1.0704001788540748E+02
    b = -1.5095055897637395E-03
    Offset =  1.0704001788540748E+02
    
    如所附绘图所示进行拟合,并通过[0,0]。我的建议是使用实际数据加上已知的[0,0]点,使用这些值作为初始参数估计值,并在可能的情况下使用非常大的权重作为[0,0]点进行回归


    请您发布一个数据链接好吗?您需要指定参数的界限,文档中有一个很好的例子,我认为如果您的键都在正范围内,您不应该得到任何负值。@Fabrizio请查看我对这个问题的回答,它讨论了迫使曲线通过[0,0]点的方法之一-这也防止了问题中讨论的负值。请发布数据链接好吗?您需要指定参数的边界,文档中有一个很好的例子,我认为如果你的键都在正范围内,你不应该得到任何负值。@Fabrizio请看我对这个问题的回答,其中讨论了迫使曲线通过[0,0]点的方法之一——这也防止了问题中讨论的负值。