繁体   English   中英

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

[英]Why does numpy give correct least squares solution but not scipy?

我为这个非常简单的问题ing之以鼻。 鉴于此玩具数据:

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

给出一个合理的答案: p array([ 9.94406755, 5.05954009]) 但是,使用scipy的最小二乘法求解将产生截然不同的答案(在每次调用函数时都会改变):

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

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

编辑:
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行中删除了from pyeemd import ceemdan那么问题就解决了! 这就提出了以下问题:为什么会发生这种情况?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM