【问题标题】:LinAlgError: SVD did not converge in Linear Least Squares np.linalg.lstsqLinAlgError:SVD 未在线性最小二乘 np.linalg.lstsq 中收敛
【发布时间】:2021-03-15 00:23:01
【问题描述】:

我得到了上述错误,尽管我在尝试使用 np.linalg.lstsq 进行线性回归时检查了我没有缺失值或无限值...有什么想法吗?我递归地进行这些回归,我打印了 X 和 Y 的形状,并且总是相同,但它会在特定迭代中引发错误

---> 17             betas = np.linalg.lstsq(X,Y,rcond=None)[0]
     18 
     19             res = Y - X.dot(betas)

<__array_function__ internals> in lstsq(*args, **kwargs)

~\anaconda3\lib\site-packages\numpy\linalg\linalg.py in lstsq(a, b, rcond)
   2257         # lapack can't handle n_rhs = 0 - so allocate the array one larger in that axis
   2258         b = zeros(b.shape[:-2] + (m, n_rhs + 1), dtype=b.dtype)
-> 2259     x, resids, rank, s = gufunc(a, b, rcond, signature=signature, extobj=extobj)
   2260     if m == 0:
   2261         x[...] = 0

~\anaconda3\lib\site-packages\numpy\linalg\linalg.py in _raise_linalgerror_lstsq(err, flag)
    107 
    108 def _raise_linalgerror_lstsq(err, flag):
--> 109     raise LinAlgError("SVD did not converge in Linear Least Squares")
    110 
    111 def get_linalg_error_extobj(callback):

LinAlgError: SVD did not converge in Linear Least Squares

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    此错误有两个最常见的原因。一种是当您的数据中存在无穷大或 NaN 时。您说您会检查这些,但您是在每次迭代中检查还是仅在原始数据中检查?

    如果这不是问题,那么另一个可能的问题是一组线性方程可以有一个解(就像两条相交线之间的一个点),但它也可以没有解(例如,平行线)或无限数量的解决方案(两条线相互重叠)。后两种情况也应该触发此错误,因为该函数无法得出明确的答案。

    【讨论】:

      猜你喜欢
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      • 2016-06-05
      • 1970-01-01
      • 1970-01-01
      • 2017-08-27
      • 2012-08-29
      • 1970-01-01
      相关资源
      最近更新 更多