<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 如何用線性代數求解線性回歸 > 原文: [https://machinelearningmastery.com/solve-linear-regression-using-linear-algebra/](https://machinelearningmastery.com/solve-linear-regression-using-linear-algebra/) 線性回歸是一種用于對一個或多個自變量與因變量之間的關系進行建模的方法。 它是統計學的主要內容,通常被認為是一種很好的入門機器學習方法。它也是一種可以使用矩陣表示法重新構造并使用矩陣運算求解的方法。 在本教程中,您將發現線性回歸的矩陣公式以及如何使用直接和矩陣分解方法來解決它。 完成本教程后,您將了解: * 線性回歸與正規方程的矩陣重構。 * 如何使用 QR 矩陣分解求解線性回歸。 * 如何使用 SVD 和偽逆求解線性回歸。 讓我們開始吧。 ![How to Solve Linear Regression Using Linear Algebra](img/390621d529d53c033bce38791fd2f38d.jpg) 如何使用線性代數解決線性回歸 照片來自 [likeaduck](https://www.flickr.com/photos/thartz00/4855670046/) ,保留一些權利。 ## 教程概述 本教程分為 6 個部分;他們是: 1. 線性回歸 2. 線性回歸的矩陣公式 3. 線性回歸數據集 4. 直接解決 5. 通過 QR 分解解決 6. 通過奇異值分解求解 ## 線性回歸 線性回歸是一種建模兩個標量值之間關系的方法:輸入變量 x 和輸出變量 y。 該模型假設 y 是線性函數或輸入變量的加權和。 ``` y = f(x) ``` 或者,用系數表示。 ``` y = b0 + b1 . x1 ``` 在給定多個輸入變量(稱為多元線性回歸)的情況下,該模型還可用于對輸出變量進行建模(下面,為了便于閱讀,添加了括號)。 ``` y = b0 + (b1 . x1) + (b2 . x2) + ... ``` 創建線性回歸模型的目的是找到系數值(b)的值,以最小化輸出變量 y 的預測誤差。 線性回歸的矩陣公式 線性回歸可以使用 Matrix 符號表示;例如: ``` y = X . b ``` 或者,沒有點符號。 ``` y = Xb ``` 其中 X 是輸入數據并且每列是數據特征,b 是系數的向量,y 是 X 中每行的輸出變量的向量。 ``` x11, x12, x13 X = (x21, x22, x23) x31, x32, x33 x41, x42, x43 b1 b = (b2) b3 y1 y = (y2) y3 y4 ``` 重新制定后,問題就變成了一個線性方程組,其中 b 向量值是未知的。這種類型的系統被稱為超定,因為存在比未知數更多的方程,即每個系數用于每行數據。 分析解決這個問題是一個具有挑戰性的問題,因為存在多種不一致的解決方案,例如:系數的多個可能值。此外,所有解決方案都會有一些錯誤,因為沒有任何線路幾乎可以通過所有點,因此求解方程的方法必須能夠處理。 通常實現這種方法的方法是找到一種解決方案,其中模型中 b 的值最小化平方誤差。這稱為線性最小二乘法。 ``` ||X . b - y||^2 = sum i=1 to m ( sum j=1 to n Xij . bj - yi)^2 ``` 只要輸入列是獨立的(例如不相關的),該秘籍就具有獨特的解決方案。 > 我們不能總是得到錯誤 e = b - Ax 降到零。當 e 為零時,x 是 Ax = b 的精確解。當 e 的長度盡可能小時,xhat 是最小二乘解。 - 第 219 頁,[線性代數簡介](http://amzn.to/2AZ7R8j),第五版,2016 年。 在矩陣表示法中,使用所謂的正規方程來表達這個問題: ``` X^T . X . b = X^T . y ``` 這可以重新安排,以便為 b 指定解決方案: ``` b = (X^T . X)^-1 . X^T . y ``` 這可以直接求解,但是假設存在矩陣逆可能在數值上具有挑戰性或不穩定。 ## 線性回歸數據集 為了探索線性回歸的矩陣公式,我們首先將數據集定義為上下文。 我們將使用一個簡單的 2D 數據集,其中數據易于作為散點圖可視化,并且模型很容易可視化為試圖擬合數據點的線。 下面的示例定義了一個 5×2 矩陣數據集,將其拆分為 X 和 y 分量,并將數據集繪制為散點圖。 ``` from numpy import array from matplotlib import pyplot data = array([ [0.05, 0.12], [0.18, 0.22], [0.31, 0.35], [0.42, 0.38], [0.5, 0.49], ]) print(data) X, y = data[:,0], data[:,1] X = X.reshape((len(X), 1)) # plot dataset pyplot.scatter(X, y) pyplot.show() ``` 首先運行該示例將打印定義的數據集。 ``` [[ 0.05 0.12] [ 0.18 0.22] [ 0.31 0.35] [ 0.42 0.38] [ 0.5 0.49]] ``` 然后創建數據集的散點圖,顯示直線不能精確擬合此數據。 ![Scatter Plot of Linear Regression Dataset](img/3a83b3e74ce3afc9f877d33e7ac66270.jpg) 線性回歸數據集的散點圖 ## 直接解決 第一種方法是嘗試直接解決回歸問題。 也就是說,給定 X,當乘以 X 時,系數 b 的集合將給出 y。正如我們在前一節中看到的那樣,正規方程定義了如何直接計算 b。 ``` b = (X^T . X)^-1 . X^T . y ``` 這可以使用 inv()函數直接在 NumPy 中計算,以計算矩陣求逆。 ``` b = inv(X.T.dot(X)).dot(X.T).dot(y) ``` 一旦計算出系數,我們就可以用它們來預測給定 X 的結果。 ``` yhat = X.dot(b) ``` 將其與上一節中定義的數據集放在一起,下面列出了完整的示例。 ``` # solve directly from numpy import array from numpy.linalg import inv from matplotlib import pyplot data = array([ [0.05, 0.12], [0.18, 0.22], [0.31, 0.35], [0.42, 0.38], [0.5, 0.49], ]) X, y = data[:,0], data[:,1] X = X.reshape((len(X), 1)) # linear least squares b = inv(X.T.dot(X)).dot(X.T).dot(y) print(b) # predict using coefficients yhat = X.dot(b) # plot data and predictions pyplot.scatter(X, y) pyplot.plot(X, yhat, color='red') pyplot.show() ``` 運行該示例執行計算并打印系數向量 b。 ``` [ 1.00233226] ``` 然后使用模型的線圖創建數據集的散點圖,顯示數據的合理擬合。 ![Scatter Plot of Direct Solution to the Linear Regression Problem](img/91b6afb9c67f31b0595aec4fd7e51e5c.jpg) 線性回歸問題直接解的散點圖 這種方法的一個問題是矩陣逆,它在計算上既昂貴又在數值上不穩定。另一種方法是使用矩陣分解來避免這種操作。我們將在以下部分中查看兩個示例。 ## 通過 QR 分解解決 QR 分解是將矩陣分解為其組成元素的方法。 ``` A = Q . R ``` 其中 A 是我們希望分解的矩陣,Q 是尺寸為 m×m 的矩陣,R 是尺寸為 m×n 的上三角矩陣。 QR 分解是解決線性最小二乘方程的常用方法。 跨越所有推導,可以使用 Q 和 R 元素找到系數,如下所示: ``` b = R^-1 . Q.T . y ``` 該方法仍然涉及矩陣求逆,但在這種情況下僅在更簡單的 R 矩陣上。 可以使用 NumPy 中的 qr()函數找到 QR 分解。 NumPy 中系數的計算如下: ``` # QR decomposition Q, R = qr(X) b = inv(R).dot(Q.T).dot(y) ``` 將其與數據集結合在一起,下面列出了完整的示例。 ``` # least squares via QR decomposition from numpy import array from numpy.linalg import inv from numpy.linalg import qr from matplotlib import pyplot data = array([ [0.05, 0.12], [0.18, 0.22], [0.31, 0.35], [0.42, 0.38], [0.5, 0.49], ]) X, y = data[:,0], data[:,1] X = X.reshape((len(X), 1)) # QR decomposition Q, R = qr(X) b = inv(R).dot(Q.T).dot(y) print(b) # predict using coefficients yhat = X.dot(b) # plot data and predictions pyplot.scatter(X, y) pyplot.plot(X, yhat, color='red') pyplot.show() ``` 首先運行該示例打印系數解決方案并使用模型繪制數據。 ``` [ 1.00233226] ``` QR 分解方法比直接計算正規方程計算效率更高,數值更穩定,但不適用于所有數據矩陣。 ![Scatter Plot of QR Decomposition Solution to the Linear Regression Problem](img/e5a01f60368022abf81f7728508c79bb.jpg) QR 分解解對線性回歸問題的散點圖 ## 通過奇異值分解求解 奇異值分解(簡稱 SVD)是一種像 QR 分解一樣的矩陣分解方法。 ``` X = U . Sigma . V^* ``` 其中 A 是我們希望分解的真實 nxm 矩陣,U 是 amxm 矩陣,Sigma(通常由大寫希臘字母 Sigma 表示)是 mxn 對角矩陣,V ^ *是 nxn 矩陣的共軛轉置,其中*是一個上標。 與 QR 分解不同,所有矩陣都具有 SVD 分解。作為求解線性回歸線性方程組的基礎,SVD 更穩定,是首選方法。 一旦分解,就可以通過計算輸入矩陣 X 的偽逆并將其乘以輸出向量 y 來找到系數。 ``` b = X^+ . y ``` 偽逆的計算方法如下: ``` X^+ = U . D^+ . V^T ``` 其中 X ^ +是 X 的偽逆,+是上標,D ^ +是對角矩陣 Sigma 的偽逆,V ^ T 是 V ^ *的轉置。 > 沒有為非正方形的矩陣定義矩陣求逆。 [...]當 A 的列數多于行數時,使用 pseudoinverse 求解線性方程式提供了許多可能的解決方案之一。 - 第 46 頁,[深度學習](http://amzn.to/2B3MsuU),2016 年。 我們可以通過 SVD 操作獲得 U 和 V.可以通過從 Sigma 創建對角矩陣并計算 Sigma 中每個非零元素的倒數來計算 D ^ +。 ``` s11, 0, 0 Sigma = ( 0, s22, 0) 0, 0, s33 1/s11, 0, 0 D = ( 0, 1/s22, 0) 0, 0, 1/s33 ``` 我們可以手動計算 SVD,然后計算偽逆。相反,NumPy 提供了我們可以直接使用的函數 pinv()。 下面列出了完整的示例。 ``` # least squares via SVD with pseudoinverse from numpy import array from numpy.linalg import pinv from matplotlib import pyplot data = array([ [0.05, 0.12], [0.18, 0.22], [0.31, 0.35], [0.42, 0.38], [0.5, 0.49], ]) X, y = data[:,0], data[:,1] X = X.reshape((len(X), 1)) # calculate coefficients b = pinv(X).dot(y) print(b) # predict using coefficients yhat = X.dot(b) # plot data and predictions pyplot.scatter(X, y) pyplot.plot(X, yhat, color='red') pyplot.show() ``` 運行該示例將打印系數并使用紅線繪制數據,以顯示模型中的預測。 ``` [ 1.00233226] ``` 實際上,NumPy 提供了一個函數來替換你可以直接使用的 lstsq()函數中的這兩個步驟。 ![Scatter Plot of SVD Solution to the Linear Regression Problem](img/90bd88eb9baf4b460d9c76f03faeb6b7.jpg) SVD 解對線性回歸問題的散點圖 ## 擴展 本節列出了一些擴展您可能希望探索的教程的想法。 * 使用內置的 lstsq()NumPy 函數實現線性回歸 * 在您自己的小型人為數據集上測試每個線性回歸。 * 加載表格數據集并測試每個線性回歸方法并比較結果。 如果你探索任何這些擴展,我很想知道。 ## 進一步閱讀 如果您希望深入了解,本節將提供有關該主題的更多資源。 ### 圖書 * 第 7.7 節最小二乘近似解。 [線性代數無廢話指南](http://amzn.to/2k76D4),2017 年。 * 第 4.3 節最小二乘近似,[線性代數簡介](http://amzn.to/2AZ7R8j),第五版,2016 年。 * 第 11 講,最小二乘問題,[數值線性代數](http://amzn.to/2kjEF4S),1997。 * 第 5 章,正交化和最小二乘法,[矩陣計算](http://amzn.to/2B9xnLD),2012。 * 第 12 章,奇異值和 Jordan 分解,[線性代數和矩陣分析統計](http://amzn.to/2A9ceNv),2014。 * 第 2.9 節 Moore-Penrose 偽逆,[深度學習](http://amzn.to/2B3MsuU),2016。 * 第 15.4 節一般線性最小二乘法,[數字秘籍:科學計算的藝術](http://amzn.to/2BezVEE),第三版,2007 年。 ### API * [numpy.linalg.inv()API](https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.linalg.inv.html) * [numpy.linalg.qr()API](https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.linalg.qr.html) * [numpy.linalg.svd()API](https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.linalg.svd.html) * [numpy.diag()API](https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.diag.html) * [numpy.linalg.pinv()API](https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.linalg.pinv.html) * [numpy.linalg.lstsq()API](https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.linalg.lstsq.html) ### 用品 * [維基百科上的線性回歸](https://en.wikipedia.org/wiki/Linear_regression) * [維基百科上的最小二乘](https://en.wikipedia.org/wiki/Least_squares) * [維基百科上的線性最小二乘(數學)](https://en.wikipedia.org/wiki/Linear_least_squares_(mathematics)) * [維基百科上的超定系統](https://en.wikipedia.org/wiki/Overdetermined_system) * 維基百科上的 [QR 分解](https://en.wikipedia.org/wiki/QR_decomposition) * [維基百科上的奇異值分解](https://en.wikipedia.org/wiki/Singular-value_decomposition) * [Moore-Penrose 逆](https://en.wikipedia.org/wiki/Moore%E2%80%93Penrose_inverse) ### 教程 * [最小二乘回歸的線性代數視圖](https://medium.com/@andrew.chamberlain/the-linear-algebra-view-of-least-squares-regression-f67044b7f39b) [線性代數與 Python 和 NumPy](https://meshlogic.github.io/posts/jupyter/linear-algebra/linear-algebra-with-python-and-numpy-2/) ## 摘要 在本教程中,您發現了線性回歸的矩陣公式以及如何使用直接和矩陣分解方法來解決它。 具體來說,你學到了: * 線性回歸與正規方程的矩陣重構。 * 如何使用 QR 矩陣分解求解線性回歸。 * 如何使用 SVD 和偽逆求解線性回歸。 你有任何問題嗎? 在下面的評論中提出您的問題,我會盡力回答。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看