当使用scipy.stats.linregress vs numpy.polyfit(deg = 1)时,为什么在线性回归时会得到不同的结果

时间:2018-03-30 15:50:46

标签: python numpy scipy linear-regression

我有一个散点图,我想要拟合一条最适合的线性线。原始数据如下:

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结果。事实上,这些功能确实给出了我需要的准确度水平。

1 个答案:

答案 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...

查看更新库是否有效,否则请更新示例代码以确保您遇到与实际代码相同的问题。