线性代数错误:SVD在线性最小二乘法中没有收敛np.linalg.lstsq

3
尽管我在使用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
1个回答

2
这个错误有两个最常见的原因。一个是当你的数据中存在无穷大或NaN时。你说你检查过了,但你是在每次迭代中检查还是只在原始数据中检查呢?
如果这不是问题,那么另一个可能的问题是一组线性方程可以有1个解(类似于两条相交线之间的点),但也可能没有解(例如,平行线)或者有无限多个解(两条重合的直线)。后两种情况也应该触发此错误,因为函数无法得出明确的答案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接