擅长:python、mysql、java
<p>正如Matthew Gunn所提到的,计算系数矩阵的显式逆作为解线性方程组的一种方法是不好的。直接获得解(<a href="https://stackoverflow.com/q/31256252/1461210">see here</a>)更快更准确。</p>
<p>你之所以看到<code>np.linalg.solve</code>和<code>np.linalg.lstsq</code>之间的差异,是因为这些函数对你试图求解的系统做出不同的假设,并使用不同的数值方法。</p>
<ul>
<li><p>在引擎盖下,<code>solve</code>调用<a href="http://www.netlib.org/lapack/explore-html/d7/d3b/group__double_g_esolve_ga5ee879032a8365897c3ba91e3dc8d512.html#ga5ee879032a8365897c3ba91e3dc8d512" rel="nofollow noreferrer">DGESV LAPACK routine</a>,它使用LU分解,然后向前和向后替换来找到<code>Ax = b</code>的精确解。它要求系统是精确确定的,即<code>A</code>是平方的,并且是满秩的。</p></li>
<li><p><code>lstsq</code>改为调用<a href="http://www.netlib.org/lapack/explore-html/d7/d3b/group__double_g_esolve_ga479cdaa0d257e4e42f2fb5dcc30111b1.html#ga479cdaa0d257e4e42f2fb5dcc30111b1" rel="nofollow noreferrer">DGELSD</a>,它使用<code>A</code>的奇异值分解来找到一个<em>最小二乘</em>解。这也适用于超定和欠定的情况。</p></li>
</ul>
<p>如果您的系统已完全确定,那么您应该使用<code>solve</code>,因为它需要更少的浮点操作,因此将更快、更精确。在您的情况下,由于正则化步骤,<code>XtX_lamb</code>被保证是满秩的。</p>