numpy.linalg.LinAlgError:SVD 仅在第一次运行时未收敛于线性最小二乘法

Lut*_*hor 6 python numpy pandas

我一直在努力解决一个已知且有记录的 SVD 收敛问题。在阅读了其他人提出的类似问题后,我仔细检查了我的数据并将其缩减为一个很小的 ​​DataFrame - 仅 10 行/2 列 - 都是 float64 的。绝对不存在 NaN 或无穷大。

第一次运行时,我通过断点在有问题的行处暂停。第一次我手动执行下一个(有问题的)行时,我收到控制台错误(见下文) - 但在后续运行中它会解决而没有错误!我正在使用 numpy 1.19.1

我非常感谢有关如何解决此问题的想法或想法。这让我发疯,也动摇了我的信心。

在此先感谢您的任何建议。我真的很想弄清楚这件事的真相。

卢瑟

代码:

# Simplifying the df
df = df.head(10)
df = df[['dti','close']]
print(df)
ltt2_poly = np.polyfit(df['dti'] - df['dti'][0], df['close'], 2)
Run Code Online (Sandbox Code Playgroud)

运行时:

pydev debugger: process 36368 is connecting
Connected to pydev debugger (build 202.6948.78)
Importing local settings
   dti  close
0    0  11.28
1    3  11.35
2    4  11.10
3    5  10.95
4    6  11.07
5    7  11.45
6   10  11.46
7   11  11.46
8   12  11.74
9   13  11.96

**ltt2_poly = np.polyfit(df['dti'] - df['dti'][0], df['close'], 2)**

Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm 2020.1.1\plugins\python\helpers\pydev\_pydevd_bundle\pydevd_exec2.py", line 3, in Exec
    exec(exp, global_vars, local_vars)
  File "<input>", line 1, in <module>
  File "<__array_function__ internals>", line 5, in polyfit
  File "C:\Users\luthor\PycharmProjects\MC\venv\lib\site-packages\numpy\lib\polynomial.py", line 629, in polyfit
    c, resids, rank, s = lstsq(lhs, rhs, rcond)
  File "<__array_function__ internals>", line 5, in lstsq
  File "C:\Users\luthor\PycharmProjects\MC\venv\lib\site-packages\numpy\linalg\linalg.py", line 2306, in lstsq
    x, resids, rank, s = gufunc(a, b, rcond, signature=signature, extobj=extobj)
  File "C:\Users\luthor\PycharmProjects\MC\venv\lib\site-packages\numpy\linalg\linalg.py", line 100, in _raise_linalgerror_lstsq
    raise LinAlgError("SVD did not converge in Linear Least Squares")
numpy.linalg.LinAlgError: SVD did not converge in Linear Least Squares

*In the SAME debug session:*

**ltt2_poly = np.polyfit(df['dti'] - df['dti'][0], df['close'], 2)**    now works!!!

print(ltt2_poly)
[ 1.00902938e-02 -8.70161869e-02  1.13247743e+01]
Run Code Online (Sandbox Code Playgroud)

打印(np.版本)1.19.1

雪上加霜的是,当我将 df 降低到 5-9 之间时 - 它可以正常工作而不会失败。我缺少什么?

小智 4

我没有办法解决这个问题,但我可以告诉你,你并不孤单。我有同样的错误。

我通过简单地将 NumPy 函数包装在 while-try 语句中来“修复”它。

while True: try: NumPy-函数break except: continue