機器學習中常用的5種回歸損失函數,你都用過嗎?

2022-01-10 小小挖掘機

「損失函數」是機器學習優化中至關重要的一部分。L1、L2損失函數相信大多數人都早已不陌生。那你了解Huber損失、Log-Cosh損失、以及常用於計算預測區間的分位數損失麼?這些可都是機器學習大牛最常用的回歸損失函數哦!

機器學習中所有的算法都需要最大化或最小化一個函數,這個函數被稱為「目標函數」。其中,我們一般把最小化的一類函數,稱為「損失函數」。它能根據預測結果,衡量出模型預測能力的好壞。

在實際應用中,選取損失函數會受到諸多因素的制約,比如是否有異常值、機器學習算法的選擇、梯度下降的時間複雜度、求導的難易程度以及預測值的置信度等等。因此,不存在一種損失函數適用於處理所有類型的數據。這篇文章就講介紹不同種類的損失函數以及它們的作用。

損失函數大致可分為兩類:分類問題的損失函數和回歸問題的損失函數。在這篇文章中,我將著重介紹回歸損失。

本文出現的代碼和圖表我們都妥妥保存在這兒了:https://nbviewer.jupyter.org/github/groverpr/Machine-Learning/blob/master/notebooks/05_Loss_Functions.ipynb

分類、回歸問題損失函數對比

均方誤差(MSE)是最常用的回歸損失函數,計算方法是求預測值與真實值之間距離的平方和,公式如圖。

下圖是MSE函數的圖像,其中目標值是100,預測值的範圍從-10000到10000,Y軸代表的MSE取值範圍是從0到正無窮,並且在預測值為100處達到最小。

MSE損失(Y軸)-預測值(X軸)

平均絕對誤差(MAE)是另一種用於回歸模型的損失函數。MAE是目標值和預測值之差的絕對值之和。其只衡量了預測值誤差的平均模長,而不考慮方向,取值範圍也是從0到正無窮(如果考慮方向,則是殘差/誤差的總和——平均偏差(MBE))。

MAE損失(Y軸)-預測值(X軸)

簡單來說,MSE計算簡便,但MAE對異常點有更好的魯棒性。下面就來介紹導致二者差異的原因。

訓練一個機器學習模型時,我們的目標就是找到損失函數達到極小值的點。當預測值等於真實值時,這兩種函數都能達到最小。

下面是這兩種損失函數的python代碼。你可以自己編寫函數,也可以使用sklearn內置的函數。

<pre style="margin: 0px; padding: 0px; max-width: 100%;box-sizing: border-box !important; word-wrap: break-word !important; color: rgb(51, 51, 51); font-size: 17px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: 0.544000029563904px; line-height: 27.2000007629395px; orphans: auto; text-align: justify; text-indent: 0px; text-transform: none; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">true: Array of true target variablepred: Array of predictionsdef mse(true, pred):return np.sum((true - pred)**2)def mae(true, pred):return np.sum(np.abs(true - pred))also available in sklearnfrom sklearn.metrics import mean_squared_errorfrom sklearn.metrics import mean_absolute_error</pre>

下面讓我們觀察MAE和RMSE(即MSE的平方根,同MAE在同一量級中)在兩個例子中的計算結果。第一個例子中,預測值和真實值很接近,而且誤差的方差也較小。第二個例子中,因為存在一個異常點,而導致誤差非常大。

左圖:誤差比較接近 右圖:有一個誤差遠大於其他誤差

從圖中可以知道什麼?應當如何選擇損失函數?

MSE對誤差取了平方(令e=真實值-預測值),因此若e>1,則MSE會進一步增大誤差。如果數據中存在異常點,那麼e值就會很大,而e²則會遠大於|e|。

直觀上可以這樣理解:如果我們最小化MSE來對所有的樣本點只給出一個預測值,那麼這個值一定是所有目標值的平均值。但如果是最小化MAE,那麼這個值,則會是所有樣本點目標值的中位數。眾所周知,對異常值而言,中位數比均值更加魯棒,因此MAE對於異常值也比MSE更穩定。

然而MAE存在一個嚴重的問題(特別是對於神經網絡):更新的梯度始終相同,也就是說,即使對於很小的損失值,梯度也很大。這樣不利於模型的學習。為了解決這個缺陷,我們可以使用變化的學習率,在損失接近最小值時降低學習率。

而MSE在這種情況下的表現就很好,即便使用固定的學習率也可以有效收斂。MSE損失的梯度隨損失增大而增大,而損失趨於0時則會減小。這使得在訓練結束時,使用MSE模型的結果會更精確。

根據不同情況選擇損失函數

如果異常點代表在商業中很重要的異常情況,並且需要被檢測出來,則應選用MSE損失函數。相反,如果只把異常值當作受損數據,則應選用MAE損失函數。

這裡L1損失和L2損失只是MAE和MSE的別稱。總而言之,處理異常點時,L1損失函數更穩定,但它的導數不連續,因此求解效率較低。L2損失函數對異常點更敏感,但通過令其導數為0,可以得到更穩定的封閉解。

二者兼有的問題是:在某些情況下,上述兩種損失函數都不能滿足需求。例如,若數據中90%的樣本對應的目標值為150,剩下10%在0到30之間。那麼使用MAE作為損失函數的模型可能會忽視10%的異常點,而對所有樣本的預測值都為150。

這是因為模型會按中位數來預測。而使用MSE的模型則會給出很多介於0到30的預測值,因為模型會向異常點偏移。上述兩種結果在許多商業場景中都是不可取的。

這些情況下應該怎麼辦呢?最簡單的辦法是對目標變量進行變換。而另一種辦法則是換一個損失函數,這就引出了下面要講的第三種損失函數,即Huber損失函數。

Huber損失,平滑的平均絕對誤差

Huber損失對數據中的異常點沒有平方誤差損失那麼敏感。它在0也可微分。本質上,Huber損失是絕對誤差,只是在誤差很小時,就變為平方誤差。誤差降到多小時變為二次誤差由超參數δ(delta)來控制。當Huber損失在[0-δ,0+δ]之間時,等價為MSE,而在[-∞,δ]和[δ,+∞]時為MAE。

Huber損失(Y軸)與預測值(X軸)圖示。真值取0

這裡超參數delta的選擇非常重要,因為這決定了你對與異常點的定義。當殘差大於delta,應當採用L1(對較大的異常值不那麼敏感)來最小化,而殘差小於超參數,則用L2來最小化。

使用MAE訓練神經網絡最大的一個問題就是不變的大梯度,這可能導致在使用梯度下降快要結束時,錯過了最小點。而對於MSE,梯度會隨著損失的減小而減小,使結果更加精確。

在這種情況下,Huber損失就非常有用。它會由於梯度的減小而落在最小值附近。比起MSE,它對異常點更加魯棒。因此,Huber損失結合了MSE和MAE的優點。但是,Huber損失的問題是我們可能需要不斷調整超參數delta。

Log-cosh是另一種應用於回歸問題中的,且比L2更平滑的的損失函數。它的計算方式是預測誤差的雙曲餘弦的對數。

Log-cosh損失(Y軸)與預測值(X軸)圖示。真值取0

優點:對於較小的x,log(cosh(x))近似等於(x^2)/2,對於較大的x,近似等於abs(x)-log(2)。這意味著『logcosh』基本類似於均方誤差,但不易受到異常點的影響。它具有Huber損失所有的優點,但不同於Huber損失的是,Log-cosh二階處處可微。

為什麼需要二階導數?許多機器學習模型如XGBoost,就是採用牛頓法來尋找最優點。而牛頓法就需要求解二階導數(Hessian)。因此對於諸如XGBoost這類機器學習框架,損失函數的二階可微是很有必要的。

XgBoost中使用的目標函數。注意對一階和二階導數的依賴性

但Log-cosh損失也並非完美,其仍存在某些問題。比如誤差很大的話,一階梯度和Hessian會變成定值,這就導致XGBoost出現缺少分裂點的情況。

Huber和Log-cosh損失函數的Python代碼:

在大多數現實世界預測問題中,我們通常希望了解預測中的不確定性。清楚預測的範圍而非僅是估計點,對許多商業問題的決策很有幫助。

當我們更關注區間預測而不僅是點預測時,分位數損失函數就很有用。使用最小二乘回歸進行區間預測,基於的假設是殘差(y-y_hat)是獨立變量,且方差保持不變。

一旦違背了這條假設,那麼線性回歸模型就不成立。但是我們也不能因此就認為使用非線性函數或基於樹的模型更好,而放棄將線性回歸模型作為基線方法。這時,分位數損失和分位數回歸就派上用場了,因為即便對於具有變化方差或非正態分布的殘差,基於分位數損失的回歸也能給出合理的預測區間。

下面讓我們看一個實際的例子,以便更好地理解基於分位數損失的回歸是如何對異方差數據起作用的。

****分位數回歸與最小二乘回歸****

左:b/wX1和Y為線性關係。具有恆定的殘差方差。

右:b/wX2和Y為線性關係,但Y的方差隨著X2增加。(異方差)

橙線表示兩種情況下OLS的估值

分位數回歸。虛線表示基於0.05和0.95分位數損失函數的回歸

附上圖中所示分位數回歸的代碼:

https://github.com/groverpr/Machine-Learning/blob/master/notebooks/09_Quantile_Regression.ipynb

****理解分位數損失函數****

如何選取合適的分位值取決於我們對正誤差和反誤差的重視程度。損失函數通過分位值(γ)對高估和低估給予不同的懲罰。例如,當分位數損失函數γ=0.25時,對高估的懲罰更大,使得預測值略低於中值。

γ是所需的分位數,其值介於0和1之間。

分位數損失(Y軸)與預測值(X軸)圖示。Y的真值為0

這個損失函數也可以在神經網絡或基於樹的模型中計算預測區間以下是用Sklearn實現梯度提升樹回歸模型的示例。

使用分位數損失(梯度提升回歸器)預測區間

上圖表明:在sklearn庫的梯度提升回歸中使用分位數損失可以得到90%的預測區間。其中上限為γ=0.95,下限為γ=0.05。

為了證明上述所有損失函數的特點,讓我們來一起看一個對比研究。首先,我們建立了一個從sinc(x)函數中採樣得到的數據集,並引入了兩項人為噪聲:高斯噪聲分量ε〜N(0,σ2)和脈衝噪聲分量ξ〜Bern(p)。

加入脈衝噪聲是為了說明模型的魯棒效果。以下是使用不同損失函數擬合GBM回歸器的結果。

連續損失函數:

D:分位數損失函數。將一個平滑的GBM擬合成有噪聲的sinc(x)數據的示例:G:具有Huber損失的平滑GBM,且δ={4,2,1};H:具有分位數損失的平滑的GBM,且α={0.5,0.1,0.9}。

仿真對比的一些觀察結果:

最後,讓我們將所有損失函數都放進一張圖,我們就得到了下面這張漂亮的圖片!它們的區別是不是一目了然了呢~

End.

編譯:Apricock、睡不著的iris、JonyKai、錢天培

相關焦點

  • 機器學習中常用的5種回歸損失函數
    那你了解Huber損失、Log-Cosh損失、以及常用於計算預測區間的分位數損失麼?這些可都是機器學習大牛最常用的回歸損失函數哦!機器學習中所有的算法都需要最大化或最小化一個函數,這個函數被稱為「目標函數」。其中,我們一般把最小化的一類函數,稱為「損失函數」。它能根據預測結果,衡量出模型預測能力的好壞。
  • 機器學習從業者必知的5種回歸損失函數
    機器學習中的所有算法都依靠最小化或最大化函數,我們將其稱為「目標函數」。被最小化的函數就被稱為「損失函數」。
  • 機器學習大牛最常用的5個回歸損失函數,你知道幾個?
    L1、L2損失函數相信大多數人都早已不陌生。那你了解Huber損失、Log-Cosh損失、以及常用於計算預測區間的分位數損失麼?這些可都是機器學習大牛最常用的回歸損失函數哦!機器學習中所有的算法都需要最大化或最小化一個函數,這個函數被稱為「目標函數」。
  • 機器學習初學者都應該知道的5類回歸損失函數
    -4fb140e9d4b0翻譯:石頭機器學習中的所有算法都依賴於最小化或最大化一個函數,我們稱之為「目標函數」。最小化的函數稱為「損失函數」,損失函數衡量的是模型預測預期結果的能力,最常用的最小化損失函數的方法是「梯度下降法」,把損失函數想像成起伏的山脈,梯度下降法就像從山上滑下來到達最低點。沒有一個損失函數適用於所有類型的數據,它取決於許多因素,包括異常值的存在,機器學習算法的選擇,梯度下降法的時間效率和預測的置信度等。本文的目的是了解不同的損失函數以及它們是如何幫助數據科學家。
  • 機器學習常用損失函數小結
    本文將介紹機器學習、深度學習中分類與回歸常用的幾種損失函數,包括均方差損失 Mean Squared Loss、平均絕對誤差損失 Mean Absolute Error Loss、Huber Loss、分位數損失 Quantile Loss、交叉熵損失函數 Cross Entropy Loss、Hinge 損失 Hinge Loss。
  • 入門| 機器學習中常用的損失函數你知多少?
    選自towards data science作者:Ravindra Parmar機器之心編譯參與:李詩萌、王淑婷本文作者將常用的損失函數分為了兩大類:分類和回歸。然後又分別對這兩類進行了細分和講解,其中回歸中包含了一種不太常見的損失函數:平均偏差誤差,可以用來確定模型中存在正偏差還是負偏差。
  • 機器學習常用損失函數總覽:基本形式、原理、特點
    本文將介紹機器學習、深度學習中分類與回歸常用的幾種損失函數,包括均方差損失 Mean Squared Loss、平均絕對誤差損失 Mean Absolute Error Loss、Huber Loss、分位數損失 Quantile Loss、交叉熵損失函數 Cross Entropy Loss、Hinge 損失 Hinge Loss。
  • 機器學習經典損失函數比較
    我們常常將最小化的函數稱為損失函數,它主要用于衡量模型的預測能力。在尋找最小值的過程中,我們最常用的方法是梯度下降法,這種方法很像從山頂下降到山谷最低點的過程。 雖然損失函數描述了模型的優劣為我們提供了優化的方向,但卻不存在一個放之四海皆準的損失函數。損失函數的選取依賴於參數的數量、局外點、機器學習算法、梯度下降的效率、導數求取的難易和預測的置信度等方面。
  • 如何為模型選擇合適的損失函數?所有ML學習者應該知道的5種回歸損失函數
    損失函數的選擇取決於許多因素,包括是否有離群點,機器學習算法的選擇,運行梯度下降的時間效率,是否易於找到函數的導數,以及預測結果的置信度。這篇文章的目的就是希望幫助大家了解不同的損失函數。機器學習中的所有算法都依賴於最小化或最大化某一個函數,我們稱之為「目標函數」。最小化的這組函數被稱為「損失函數」。損失函數是衡量預測模型預測期望結果表現的指標。
  • 【深度學習】一文讀懂機器學習常用損失函數(Loss Function)
    理解:損失函數旨在表示出logit和label的差異程度,不同的損失函數有不同的表示意義,也就是在最小化損失函數過程中,logit逼近label的方式不同,得到的結果可能也不同。最小二乘的基本原則是:最優擬合直線應該是使各點到回歸直線的距離和最小的直線,即平方和最小。換言之,OLS是基於距離的,而這個距離就是我們用的最多的歐幾裡得距離。
  • 機器學習常見的損失函數以及何時使用它們
    每一個機器學習工程師都應該知道機器學習中這些常見的損失函數以及何時使用它們。在數學優化和決策理論中,損失函數或成本函數將一個或多個變量的值映射為一個實數,該實數直觀地表示與該事件相關的一些「成本」。所以損失函數被用於評估模型的性能,通常人們想要損失函數最小化。廣義地說,損失函數根據應用場景可以分為兩大類:分類問題和回歸問題。在分類問題中,任務是預測問題所處理的所有類的各自概率。相反,在回歸問題中,任務是預測一組給定的獨立特徵對學習算法的連續值。
  • 深度學習常用損失函數總覽:基本形式、原理、特點
    本文將介紹機器學習、深度學習中分類與回歸常用的幾種損失函數,包括均方差損失 Mean Squared Loss、平均絕對誤差損失 Mean Absolute Error Loss、Huber Loss、分位數損失 Quantile Loss、交叉熵損失函數 Cross Entropy Loss、Hinge 損失 Hinge Loss。
  • 你是否有過疑問:為啥損失函數很多用的都是交叉熵(cross entropy)?
    引言我們都知道損失函數有很多種:均方誤差(MSE)、SVM的合頁損失(hinge loss)、交叉熵(cross entropy)。這幾天看論文的時候產生了疑問:為啥損失函數很多用的都是交叉熵(cross entropy)?其背後深層的含義是什麼?如果換做均方誤差(MSE)會怎麼樣?下面我們一步步來揭開交叉熵的神秘面紗。2.
  • 機器學習算法中的7個損失函數的詳細指南
    介紹想像一下-你已經在給定的數據集上訓練了機器學習模型,並準備好將它交付給客戶。但是,你如何確定該模型能夠提供最佳結果?是否有指標或技術可以幫助你快速評估數據集上的模型?當然是有的,簡而言之,機器學習中損失函數可以解決以上問題。
  • 機器學習中的目標函數總結
    關注「SIGAI公眾號」,選擇「星標」或「置頂」原創技術文章,第一時間獲取機器學習中的目標函數總結SIGAI幾乎所有的機器學習算法都歸結為求解最優化問題。有監督學習算法在訓練時通過優化一個目標函數而得到模型,然後用模型進行預測。無監督學習算法通常通過優化一個目標函數完成數據降維或聚類。
  • 機器學習中的19 種損失函數,你使用過幾種?
    在多分類任務中,經常採用 softmax 激活函數+交叉熵損失函數,因為交叉熵描述了兩個概率分布的差異,然而神經網絡輸出的是向量,並不是概率分布的形式。所以需要 softmax激活函數將一個向量進行「歸一化」成概率分布的形式,再採用交叉熵損失函數計算 loss。
  • 機器學習-損失函數
    在邏輯回歸的推導中,它假設樣本服從伯努利分布(0-1分布),然後求得滿足該分布的似然函數,接著取對數求極值等等。而邏輯回歸併沒有求似然函數的極值,而是把極大化當做是一種思想,進而推導出它的經驗風險函數為:最小化負的似然函數(即max F(y, f(x)) —-> min -F(y, f(x)))。從損失函數的視角來看,它就成了log損失函數了。
  • Python機器學習算法中的7個損失函數的詳細指南
    介紹想像一下-你已經在給定的數據集上訓練了機器學習模型,並準備好將它交付給客戶。但是,你如何確定該模型能夠提供最佳結果?是否有指標或技術可以幫助你快速評估數據集上的模型?當然是有的,簡而言之,機器學習中損失函數可以解決以上問題。
  • 入門機器學習之線性回歸
    什麼是回歸分析在客觀世界中普通存在著變量之間的關係,變量之間的關係一般來說可以分成確定性關係和不確定關係,確定性關係是說變量之間的關係是可以用函數關係來表示的,另一種不確定性關係即所謂相關關係。對於那些有創意的人,如果你覺得有必要使用上面這些參數的一個組合,你甚至可以創造出一個沒有被使用過的回歸模型。最常用的回歸方法如下:1、Linear Regression線性回歸:它是最為人熟知的建模技術之一。線性回歸通常是人們在學習預測模型時首選的技術之一。在這種技術中,因變量是連續的,自變量可以是連續的也可以是離散的,回歸線的性質是線性的。
  • 理解損失函數(理論篇)機器學習你會遇到的「坑」
    而評估指的是模型在數據上表現的量化形式,我們選取合適的函數來表示什麼樣子的模型是好的,性能度量就是評估。在前兩步都完成了以後,最後要做的就是優化,就是對評估函數進行求解,找出最合適的解,來確定最終的模型。