我有一个散点图,我想要拟合一条最适合的线性线。原始数据如下:
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结果。事实上,这些功能确实给出了我需要的准确度水平。
答案 0 :(得分:1)
我不知道代码的问题是什么,这是我运行您的确切代码段时得到的内容:
login.mydomain.com
如你所见,我得到:
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...
查看更新库是否有效,否则请更新示例代码以确保您遇到与实际代码相同的问题。