根據標籤分佈來選擇損失函數

來自 | 知乎   作者丨馬東什麼

來源丨https://zhuanlan.zhihu.com/p/304462034

編輯丨極市平臺

本文僅作學術交流,如有侵權,請聯繫後臺刪除。

本文約2000字,建議閱讀5分鐘

本文介紹了損失函數與標籤分佈的聯繫。

首先回到經典的面試問題:

爲什麼線性迴歸使用mse作爲損失函數?

爲什麼邏輯迴歸二分類常用二元交叉熵作爲損失函數?

熟悉lgb、xgb或者是sklearn中的各類迴歸模型包括了線性迴歸,tweedie迴歸等等應該都比較熟悉,我們在模型的框架之下可以選擇不同的損失函數,以lightgbm爲例:

針對於迴歸問題有非常多的備選損失函數,那麼這些損失函數什麼時候用,爲什麼?

回到基本面試問題,首先我們需要知道的是,使用特定損失函數的前提是我們對標籤的分佈進行了某種假設,在這種假設的前提下通過極大似然法推出所有樣本構成的極大似然公式,然後再使用凸優化的方法比如常見的梯度下降法進行求解。

以常見的二分類問題和迴歸問題爲例:

二分類問題的常見假設就是標籤服從伯努利分佈:

伯努利分佈是一個離散型機率分佈。試驗成功,隨機變量取值爲1;試驗失敗,隨機變量取值爲0。成功機率爲p,失敗機率爲q =1-p,N次試驗後,成功期望爲N*p,方差爲N*p*(1-p) ,所以伯努利分佈又稱兩點分佈。

觀察到的數據爲D1,D2,D3,...,DN,極大似然的目標:

聯合分佈難計算,我們因此引入一個假設,獨立同分布(i.i.d.)(機器學習的基本假設),目標公式改變爲:

將函數取對數,函數的極值點不會改變,公式變爲:

伯努利分佈下隨機變量的最大似然計算方法,P(X=1)=p,P(X=0)=1-p:

這樣就得到了我們熟悉的二元交叉熵的公式了,注意,二元交叉熵的名字有很多,有的地方把它叫logloss的類別數爲2的特例之類的balabala,記住一個名字能辨別同義不同名就行了。

然後是經典的迴歸的mse的損失函數,這個之前寫過了,參考這篇即可:

馬東什麼:線性迴歸面經總結——from 牛客

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

線性迴歸要求因變量服從正態分佈_lyh的專欄-CSDN博客

https://blog.csdn.net/u010462995/article/details/70847146

我們在使用線性迴歸的時候的基本假設是噪聲服從正態分佈,當噪聲符合正態分佈N(0,delta^2)時,因變量則符合正態分佈N(ax(i)+b,delta^2),其中預測函數y=ax(i)+b。這個結論可以由正態分佈的概率密度函數得到。也就是說當噪聲符合正態分佈時,其因變量必然也符合正態分佈。因此,我們使用mse的時候實際上是假設y服從正態分佈的。

然而生活中的很多回歸問題並不符合正態分佈,例如典型的奢侈品商城的銷量,用戶到商城中閒逛,大部分用戶基本不買東西,只有少部分用戶會進行購買,極少部分用戶會購買大量的奢侈品,因此分佈常常是這樣的:

橫軸代表了銷量取件從小到達排列,縱軸代表了某個銷量區間對應的用戶數量,這樣的分佈情況明顯不符合高斯分佈。

需要注意,從不均衡學習的角度來說,當正負樣本數量相差極大的時候,

例如上圖,

此時,其實仍舊是滿足二元交叉熵分佈的,因此分類問題並不是特別好從基本假設的角度出發去思考損失函數的選擇,更多的是偏工程話的一些解釋,例如典型的不均衡樣本爲什麼會影響模型的表現,核心原因是少類樣本的數量太少,模型學習不到太多的規律,但是如果少類樣本的數量很少,例如1000w:10w這樣的比例,雖然比例上也是不均衡,但是每個類別的數量都很多足夠模型充分學習,實際應用上來看,這種情況基本不需要進行不均衡處理,因此嚴格來說,這種情況不屬於不均衡學習的問題,不均衡學習針對的更多是“絕對不均衡”的問題,即樣本的絕對數量很稀少而不是比例。


回到迴歸問題上,在迴歸問題的領域基本不會談論不均衡問題,因爲連續的標籤沒有不均衡的概念,取而代之的是標籤分佈詭異的情況,因此簡單來說,我們可以把這類標籤分佈不符合高斯分佈從而使得以mse作爲損失函數的模型擬合效果差的問題作爲迴歸問題中的“不均衡問題”,這類不均衡問題就比較棘手,因爲某些情況下的標籤的分佈情況和樣本數量沒關係,比如前面說到的奢侈品銷量的問題,就是典型的非高斯分佈的形式,這個時候,我們就需要使用一些方法來應對這種問題了,和不均衡學習類似,我們可以在樣本層面進行一些採樣的操作。

這裏,我們可以對銷量爲0的用戶進行下采樣,這樣整體分佈看起來會更加符合高斯分佈一點,不過這種做法其實意義不大,因爲我們未來要預測的樣本的分佈被破壞了,即使模型擬合出好的效果也沒用,這就好比我們進行電商銷量預測的時候把雙十一的銷量樣本砍掉,會發現mse變得很優美,但是預測的時候,對於未來的雙十一的預測效果會特別差。

因此,更加常見的做法是在標籤層面或者損失函數方面進行修正,例如使用對數變換或者更大一點,使用boxcox變換來使得標籤儘量接近高斯分佈然後使用mse:

比如這個例子:

所以有時候我們會發現處理迴歸問題的時候進行對數變換效果更好了。如果標籤存在負數,則所有的標籤加上一個min_data+1然後進行對數變換即可,或者直接使用boxcox變換。

但是在處理電商銷量問題的時候,我發現這種方法並不奏效,因爲如果標籤分佈本身是非常畸形的,可能你處理了半天還是莫得用,處理完的分佈還是畸形的,這個時候我們就要考慮使用其它損失函數來進行處理了。

例如使用tweedie loss、possion loss等損失函數替代mse,例如:

這是tweedie分佈的典型例子,tweedie loss的實現並不複雜,下次處理迴歸問題遇到模型效果很差的問題的時候,可以看一下標籤的分佈情況,然後考慮選擇使用不同的損失函數進行測試。

當然,如果懶得看或者看不出來,把損失函數作爲超參數進行調參也是可以的。

編輯:於騰凱

校對:洪舒越

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章