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

2024-05-12 22:25:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我对这个很简单的问题感到困惑。根据这个玩具数据:

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

用纽比最小二乘法求解:

^{pr2}$

给出了一个合理的答案:array([ 9.94406755, 5.05954009])代表p。然而,使用scipy的最小二乘法求解得到了完全不同的答案(每次调用函数时都会发生变化):

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

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

编辑:
Numpy版本:1.11.2
Scipy版本:0.18.1
Python:3.5

编辑:
我已经意识到在加载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行,那么问题就解决了!这引发了以下问题:为什么会发生这种情况?在


Tags: 答案fromimport编辑matplotlibasnprandgen