我有一个散点图,我想拟合一条最适合的线性线。原始数据如下:
x = [2,5,10,20,30,50]
y = [0.0013,0.0018,0.0067,0.0081,0.009,0.013]
当我使用
numpy.polyfit(x,y,deg=1)
和
scipy.stats.linregress(x,y)
我得到不同的斜率和截距值。为什么是这样?我想也许他们使用的算法略有不同,但 scipy 版本给了我一条高估我所有数据的线。
scipy 功能是否仅适用于特定应用程序?有没有办法调和这种差异?
我想知道什么时候使用哪个以及每个功能的适用性。
谢谢你。
编辑:结果形式为斜率,截距
scipy: 0.000257290802691 0.00826916605228
numpy: 0.0002322 0.00212209
编辑:错误在于一行代码改变了我的 scipy 结果。事实上,这些函数确实为我需要的准确度提供了相同的结果。
我不知道代码有什么问题,这是我运行您的确切代码段时得到的结果:
In [1]: x = [2,5,10,20,30,50,100,200,300]
...: y = [0.0013,0.0018,0.0067,0.0081,0.009,0.013,0.077,0.085,0.057]
...: print(numpy.polyfit(x,y,deg=1))
...: print(scipy.stats.linregress(x,y))
...:
[0.00025729 0.00826917]
LinregressResult(slope=0.0002572908026909962, intercept=0.00826916605228397, rvalue=0.7851975581052358, pvalue=0.012170749250986976, stderr=7.669358704600765e-05)
如您所见,我得到:
slope intercept
numpy 0.00025729 0.00826917
scipy 0.0002572908026... 0.0082691660...
除了四舍五入之外,这是相同的。这是我的库版本:
In [14]: numpy.__version__
Out[14]: '1.14.2'
In [15]: scipy.__version__
Out[15]: '1.0.1'
查看更新您的库是否有任何影响,否则更新您的示例代码以确保您遇到与实际代码相同的问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句