为什么numpy给出了正确的最小二乘解,但不是scipy?

时间:2018-03-10 23:04:40

标签: python numpy scipy scikit-learn least-squares

我正在摸索这个非常简单的问题。鉴于这个玩具数据:

randgen = np.random.RandomState(9)
npoints = 1000
noise = randgen.randn(npoints)
x = np.linspace(0, 1, npoints)
y = 5 + 10*x + noise

使用numpy的最小二乘法解决这个问题:

# design matrix::
X = np.ones((npoints, 2))
X[:,0] = np.copy(x)  
p, res, rnk, s = np.linalg.lstsq(X, y)
p

array([ 9.94406755, 5.05954009])提供了合理的答案:p。但是,使用scipy的最小二乘法求解得到了截然不同的答案(每次调用函数时都会发生变化):

p, res, rnk, s = scipy.linalg.lstsq(X, y)
p

示例解决方案是array([ 1.16328381e+08, -2.26560583e+06])。我不明白我错过了什么。我在使用Scikit-learn LinearRegression时遇到了这个问题,该内部使用scipy' lstsq。这给了我奇怪的答案。

修改
Numpy版本:1.11.2
Scipy版本:0.18.1
Python:3.5

编辑2:
我已经意识到在加载scipy之前加载一个特定的库会导致这个问题。以下加载库的顺序会导致问题:

import numpy as np
from numpy.ma import MaskedArray
from matplotlib import pyplot as plt
from netCDF4 import Dataset
import matplotlib as mpl
from mpl_toolkits.basemap import Basemap
from pyeemd import ceemdan
from scipy.sparse.linalg import svds
from sklearn.utils.extmath import svd_flip
from matplotlib.colors import BoundaryNorm
from matplotlib.ticker import MaxNLocator
from scipy.signal import convolve, boxcar

如果我删除了from pyeemd import ceemdan行,那么问题就解决了!这提出了以下问题:为什么会发生这种情况?

0 个答案:

没有答案