我正在摸索这个非常简单的问题。鉴于这个玩具数据:
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
行,那么问题就解决了!这提出了以下问题:为什么会发生这种情况?