7.機器學習之線性回歸演算法

来源:https://www.cnblogs.com/bonheur/archive/2020/03/20/12469888.html
-Advertisement-
Play Games

什麼是線性回歸(Linear Regression) 我們在初中可能就接觸過,y=ax,x為自變數,y為因變數,a為繫數也是斜率。如果我們知道了a繫數,那麼給我一個x,我就能得到一個y,由此可以很好地為未知的x值預測相應的y值。在只有一個變數的情況下,線性回歸可以用方程:y = ax+b 表示;多元 ...


什麼是線性回歸(Linear Regression)

我們在初中可能就接觸過,y=ax,x為自變數,y為因變數,a為繫數也是斜率。如果我們知道了a繫數,那麼給我一個x,我就能得到一個y,由此可以很好地為未知的x值預測相應的y值。在只有一個變數的情況下,線性回歸可以用方程:y = ax+b 表示;多元線性回歸方程可以表示為:y = a0 + a1*x1 + a2*x2 + a3*x3 + ...... +an*xn。

機器學習的實質說白了就是通過數據之間的關係找出某種映射f:Xy。而針對線性回歸來說就是假定X與y之間有線性相關關係。回歸模型就是表示從輸入變數到輸出變數之間映射的函數,回歸問題的學習等價於函數擬合:選擇一條函數曲線使其很好地擬合已知數據且很好地預測未知數據。

線性回歸的表示是一個方程,它描述了一條線,通過尋找輸入變數繫數(B)的特定權重,擬合輸入變數(x)和輸出變數(y)之間的關係。

例如:y=B0+B1∗x,我們將在給定輸入x的情況下預測y,線性回歸學習演算法的目標是找到繫數B0和B1的值。 可以使用不同的技術從數據中學習線性回歸模型,如普通最小二乘的線性代數解和梯度下降優化。

線性回歸的模型函數

 回歸分析中,只包括一個自變數和一個因變數,且二者的關係可用一條直線近似表示,這種回歸分析稱為一元線性回歸分析。如果回歸分析中包括兩個或兩個以上的自變數,且因變數和自變數之間是線性關係,則稱為多元線性回歸分析。多元線性回歸模型如下(n=1,表示的是一元一次方程):

 

  

預設x0總是等於1,表達式也可以寫成:

 

進一步用矩陣形式表達更加簡潔如下:

再簡化得:

其中, , 

 

線性回歸的損失函數

得到了模型,我們要根據已知數據集,在假設空間中,選出最合適的線性回歸模型。這時,就要引出損失函數。即找出使損失函數最小的向量θ。線性回歸的目的就是求解出合適的θ。損失函數(有時也被成為代價函數):是用來估量你模型的預測值 f(x)與真實值 Y的不一致程度,損失函數越小,模型的效果就越好。線性回歸中,損失函數用均方誤差表示,因此損失函數就是我們尋找最佳模型的一種依據。線上性回歸這裡,對應的就是找出最符合數據的權重參數 θ→,即[θ0,θ1,...,θn]T。一般線性回歸我們用均方誤差(MSN)作為損失函數。損失函數的代數法表示如下:

我們並不關係損失函數的最小值是多少,而僅僅關心損失函數最小時的模型參數的值即可,也可寫成如下所示(公式里的1/2對損失函數沒有影響,只是為了能抵消求導後的乘數2):

進一步用矩陣形式表達損失函數:

由於矩陣法表達比較的簡潔,後面我們將統一採用矩陣方式表達模型函數和損失函數。

線性回歸中,損失函數用均方誤差表示的證明過程,可以看博客 https://zhuanlan.zhihu.com/p/48205156 的 "線性回歸的損失函數" 部分介紹。

線性回歸的演算法

現在,我們的目標就成了求解向量θ使得J(θ)最小。我們常用的有兩種方法來求損失函數最小化時候的θ參數:一種是梯度下降法,一種是最小二乘法。梯度下降法,是搜索演算法,先給 θ 賦個初值,然後再根據使 J(θ) 更小的原則對 θ 進行修改,直到最小 θ 收斂,J(θ) 達到最小,也就是不斷嘗試;另外一種是正規方程法,要使 J(θ) 最小,就對 θ 求導,使導數等於 0,求得 θ。

如果採用梯度下降法,則θ的迭代公式是這樣的:

通過若幹次迭代後,我們可以得到最終的θθ的結果

如果採用最小二乘法,則θ的結果公式如下:

梯度下降法的演算法可以有代數法和矩陣法(也稱向量法)兩種表示,同樣最小二乘法也有矩陣法和代數法兩種表示。詳細證明過程可以參考下麵兩篇博客內容:https://www.cnblogs.com/pinard/p/5976811.html

https://www.cnblogs.com/pinard/p/5970503.html

 

最小二乘法 vs 梯度下降法:

通過上面推導,我們不難看出,二者都對損失函數的回歸繫數進行了求偏導,並且所得到的推導結果是相同的,那麼究竟哪裡不同呢?如果仔細觀察,可以觀察到:最小二乘法通過使推導結果等於0,從而直接求得極值,而梯度下降則是將推導結果帶入迭代公式中,一步一步地得到最終結果。簡單地說,最小二乘法是一步到位的,而梯度下降是一步步進行的。因而通過以上的異同點,總結如下:

最小二乘法:

  • 得到的是全局最優解,因為一步到位,直接求極值,因而步驟簡單
  • 線性回歸的模型假設,這是最小二乘方法的優越性前提,否則不能推出最小二乘是最佳(即方差最小)的無偏估計
  • 相比梯度下降,當n不是很大時,最小得到結果更快一些,一般線性回歸問題更偏向運用最小二乘法,但是梯度下降法在機器學習中適用範圍更大

梯度下降法:

  • 得到的是局部最優解,因為是一步步迭代的,而非直接求得極值
  • 既可以用於線性模型,也可以用於非線性模型,沒有特殊的限制和假設條件
  • 梯度下降演算法有時需要我們對特征值進行適當的縮放,提高求解效率,需要進行數據歸一化處理
  • 梯度下降演算法需要我們自己選擇適當的學習率α ,且需要多次的迭代運算
  • 當n很大時,這時矩陣運算的代價就變的很大,最小二乘求解也會變的很慢,所以梯度下降更適合特征變數很多的情況,一般n小於10000時,選擇正規方程是沒問題的

線性回歸的正則化

為瞭解決過擬合問題,在損失函數中引入了正則化。我們常用的正則化一般是L1正則化和L2正則化。而線性回歸因為引入的正則化項不同,從而出現了Ridge回歸、Lasso回歸以及ElasticNet回歸。

L1正則化Lasso回歸:

線性回歸的L1正則化通常稱為Lasso回歸,它和一般線性回歸的區別是在損失函數上增加了一個L1正則化的項,L1正則化的項有一個常數繫數α來調節損失函數的均方差項和正則化項的權重,具體Lasso回歸的損失函數表達式如下: 

  

其中n為樣本個數,α為常數繫數,需要進行調優。|θ|1為L1範數。Lasso回歸可以使得一些特征的繫數變小,甚至還是一些絕對值較小的繫數直接變為0。增強模型的泛化能力。關於求解,因為L1範數的原因,導致損失函數不再是連續可導的。所以之前的梯度下降法等演算法失效,需要另尋它法。Lasso回歸的求解辦法一般有坐標軸下降法(coordinate descent)和最小角回歸法( Least Angle Regression)。

 

L2正則化Ridge回歸:

L2正則化通常稱為Ridge回歸,它和一般線性回歸的區別是在損失函數上增加了一個L2正則化的項,和Lasso回歸的區別是Ridge回歸的正則化項是L2範數,而Lasso回歸的正則化項是L1範數。具體Ridge回歸的損失函數表達式如下:

其中α為常數繫數,需要進行調優。|θ|2為L2範數。Ridge回歸在不拋棄任何一個特征的情況下,縮小了回歸繫數,使得模型相對而言比較的穩定,但和Lasso回歸比,這會使得模型的特征留的特別多,模型解釋性差。Ridge回歸的求解比較簡單,一般用最小二乘法。這裡給出用最小二乘法的矩陣推導形式,和普通線性回歸類似。

正則化之後的損失函數求解過程推薦參考博客:https://www.cnblogs.com/pinard/p/6018889.html

 

正則化求解之後的理解:

嶺回歸就是給模型參數加一個懲罰項,限制參數的大小。 通過引入該懲罰項,可以減少不重要的參數,這個技術在統計學中也叫做縮減(shrinkage)。(嶺回歸解決數據的輸入變數數目比樣本點還多的問題)。嶺回歸的本質是給參數增加了一個限制條件,即懲罰項,嶺回歸相當於增加瞭如下的約束:

[公式]

上式限定了所有回歸繫數的平方和不能大於 [公式] 。所以在嶺回歸中,有時稱為“L2回歸”,懲罰因數是變數繫數的平方值之和。懲罰因數縮小了自變數的繫數,但從來沒有完全消除它們。這意味著通過嶺回歸,您的模型中的雜訊將始終被您的模型考慮在內。與嶺回歸類似,另一個縮減方法lasso也對回歸繫數做了限定,對應的約束條件如下:

 

當 [公式] 足夠小時,一些繫數會因此縮減到0,這個特性幫助我們更好的理解數據,但是這個變化卻導致計算複雜度大大提升,因為求解這個約束條件下的回歸繫數,需要使用二次規划算法。Lasso模型可以用來估計“稀疏參數”。在某些情況下Lasso非常有用,由於它的懲罰條件比較嚴格,所以傾向於選擇參數值較少的解,從而有效地減少了給定解所依賴的參數的數量。簡單說,如果你想要的最優解包含的參數數量越少越好,那麼使用Lasso是個很好的選擇。例如當你想從雜訊和信號的疊加中得到信號時。

在LASSO正則化中,只需懲罰高繫數特征,而不是懲罰數據中的每個特征。此外,LASSO能夠將繫數一直縮小到零。這基本上會從數據集中刪除這些特征,因為它們的“權重”現在為零(即它們實際上是乘以零)。通過LASSO回歸,模型有可能消除大部分雜訊在數據集中。這在某些情況下非常有用!

 

ElasticNet回歸:
ElasticNet回歸是對Lasso回歸和嶺回歸的一個綜合,它的懲罰項是L1範數和L2範數的一個權衡。損失函數為:

其中,α和ρ均為超參數,α≥0,1≥ρ≥0。而ρ影響的是性能下降的速度,因為這個參數控制著兩個正則化項之間的比例。

不同正則化之間的比較:

Lasso回歸(縮減繫數):可以使得一些特征繫數變小,甚至一些絕對值較小的繫數直接變為零,從而增強模型的泛化能力。因此很適合與參數數目縮減與參數的選擇,作為用來估計稀疏參數的線性模型。當進行模型選擇的時候,如果特征特別多,需要進行壓縮時,就可以選擇Lasso回歸。
Ridge回歸(平滑繫數):是在不拋棄任何一個特征的情況下,限制(縮小)了回歸繫數,使得模型相對而言比較複雜。和Lasso回歸相比,這會使得模型保留的特別多,導致解釋性差。
ElasticNet回歸:則是對上面兩個進行了權衡。實際上,L1L1正則項可以得到稀疏的θ⃗ θ→,L2L2正則項則可以得到比較小的θ⃗ θ→,ElasticNet回歸就是將這兩個結合著用。

 

線性回歸的推廣:多項式線性回歸

我們遇到的數據不一定都是線性的形式,如果是  的模型,那線性回歸很難擬合這個函數,這時候就需要用到多項式回歸了。回到我們開始的線性模型,, 如果這裡不僅僅是x的一次方,而是二次方,那麼模型就變成了多項式回歸。這裡寫一個只有兩個特征的2次多項式回歸的模型: 我們令 ,,這樣我們就得到了下式:。可以發現,我們又重新回到了線性回歸,這是一個五元線性回歸,可以用線性回歸的方法來完成演算法。對於每個二元樣本特征我們得到一個五元樣本特征 ,通過這個改進的五元樣本特征,我們重新把不是線性回歸的函數變回線性回歸,但是達到了非線性擬合的效果。

 

線性回歸的推廣:廣義線性回歸

 在上一節的線性回歸的多項式中,我們對樣本特征進行了變換,用線性回歸完成了非線性回歸的效果。這裡我們對於特征y做推廣。比如我們的輸出Y不滿足和X的線性關係,但是logYX滿足線性關係,模型函數如下:,這樣對與每個樣本的輸入y,我們用logy去對應, 從而仍然可以用線性回歸的演算法去處理這個問題。我們把 logy一般化,假設這個函數是單調可微函數g(.),則一般化的廣義線性回歸形式是:。這個函數g(.)我們通常稱為聯繫函數。後面會講到的邏輯回歸這是在聯繫函數的基礎上進行分類的。

 

總結:

最簡單的單變數線性回歸:

多變數線性回歸模型:

多項式回歸模型: 

線性回歸的優點:

1. 建模速度快,不需要很複雜的計算,在數據量大的情況下依然運行速度很快;
2. 可以根據繫數給出每個變數的理解和解釋;
3. 對異常值很敏感。

線性回歸的缺點:

1. 不能很好的擬合非線性數據,所以需要先判斷變數之間是否線性相關。

多項式回歸的特點:

1. 能夠擬合非線性可分的數據,更加靈活的處理複雜的關係
2. 因為需要設置變數的指數,所以它是完全控制要素變數的建模

多項式回歸的特點:

1. 需要一些數據的先驗知識才能選擇最佳指數
2. 如果指數選擇不當容易出現過擬合

 

參考文章:

 https://www.cnblogs.com/pinard/p/6004041.html

 https://zhuanlan.zhihu.com/p/48205156

 https://zhuanlan.zhihu.com/p/45023349

 https://zhuanlan.zhihu.com/p/45690499

 https://blog.csdn.net/fengxinlinux/article/details/86556584

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...