佛山網(wǎng)站排名推廣有沒有永久免費(fèi)crm
二分類和多分類的損失函數(shù)
二分類
-
損失函數(shù)
L ( y , y ^ ) = ? ( y l o g ( y ^ ) ) + ( 1 ? y ) l o g ( 1 ? y ^ ) L(y,\hat{y}) = -(ylog(\hat{y})) + (1-y)log(1-\hat{y}) L(y,y^?)=?(ylog(y^?))+(1?y)log(1?y^?)
其中真實(shí)標(biāo)簽表示為y(取值為 0 或 1),預(yù)測概率表示為 y ^ \hat{y} y^?(取值在 0 到 1 之間) -
代碼
import torch
import torch.nn as nncriterion = nn.BCELoss() # 或者使用 nn.BCEWithLogitsLoss() BCEWithLogitsLoss可以直接接收logit輸出
# 假設(shè)模型的輸出 logits
logits = torch.tensor([0.2, 0.8, 0.5, 0.1]) #shape: (4, 1)
predicted_probabilities = torch.sigmoid(logits) #shape: (4, 1)
# 真實(shí)標(biāo)簽
labels = torch.tensor([0.0, 1.0, 1.0, 0.0]) #shape: (4, 1)
# 計(jì)算損失
loss = criterion(predicted_probabilities, labels)
print("Loss:", loss.item())
- 可視化損失值
對于輸出的loss值,我們往往不能理解這個(gè)loss是好還是壞,我們重看損失函數(shù),發(fā)現(xiàn)對于單個(gè)正樣本來說:
l o s s = ? l o g ( y ^ ) loss = -log(\hat{y}) loss=?log(y^?)
對于單個(gè)負(fù)樣本來說:
l o s s = ? l o g ( 1 ? y ^ ) loss = -log(1-\hat{y}) loss=?log(1?y^?)
從這個(gè)公式我們可以反推模型對正樣本預(yù)測的概率為:
h i t p o s = e ? l o s s hit_{pos} = e^{-loss} hitpos?=e?loss
對負(fù)樣本預(yù)測的概率為:
h i t n e g = 1 ? e ? l o s s hit_{neg} = 1-e^{-loss} hitneg?=1?e?loss
這個(gè)hit就比較形象了,$hit_{pos}$
越接近1,說明正樣本的預(yù)測效果效果越好,$hit_{neg}$
越接近0,說明負(fù)樣本的預(yù)測效果效果越好
多分類
- 損失函數(shù)
L ( y , y ^ ) = ? ∑ c = 1 C y l o g ( y ^ ) L(y,\hat{y}) = -\sum_{c=1}^Cylog(\hat{y}) L(y,y^?)=?c=1∑C?ylog(y^?)
其中真實(shí)標(biāo)簽表示為y(取值為 0 或 1,表示是否屬于第c類),預(yù)測概率表示為$\hat{y}$
(取值在 0 到 1 之間) - 代碼
import torch
import torch.nn as nncriterion = nn.CrossEntropyLoss()# 假設(shè)模型的輸出 logits(未經(jīng)過 sigmoid)
logits = torch.tensor([[1.0, 2.0], # 類別 0 和 1 的 logits[0.0, 1.0],[0.5, 0.5],[0.0, 0.0]]) # shape:(4,2)# 真實(shí)標(biāo)簽,格式為類別索引
# 0 表示第一個(gè)類別,1 表示第二個(gè)類別
labels = torch.tensor([1, 1, 0, 0]) # shape:(1,4)# 計(jì)算損失
loss = criterion(logits, labels)print("Loss:", loss.item())
- 可視化損失值
對于輸出的loss值,我們往往不能理解這個(gè)loss是好還是壞,我們重看損失函數(shù),發(fā)現(xiàn)對于單個(gè)樣本來說:
l o s s = ? l o g ( y ^ ) loss = -log(\hat{y}) loss=?log(y^?)
從這個(gè)公式我們可以反推模型對當(dāng)前樣本的正確類別預(yù)測的概率為:
h i t = e ? l o s s hit = e^{-loss} hit=e?loss
這個(gè)hit就比較形象了,hit越接近1,說明效果越好
二分類和多分類區(qū)別
- 從損失函數(shù)的物理含義上來看,二分類的損失函數(shù)不僅希望正樣本輸出概率接近1,并且希望負(fù)樣本的輸出概率接近0;而多分類的損失函數(shù)僅僅希望正樣本輸出概率接近1,對于負(fù)樣本其實(shí)沒有約束
- 對于二分類問題:如果你希望模型不僅能找出正樣本,而且篩掉副樣本,就用二分類損失。如果你僅僅希望找出正樣本而不管負(fù)樣本,多分類的損失也能用。
多分類問題中評價(jià)問題
TP(True Positive):真實(shí)標(biāo)簽為正類,模型預(yù)測為正類的樣本數(shù)量。
TN(True Negative):真實(shí)標(biāo)簽為負(fù)類,模型預(yù)測為負(fù)類的樣本數(shù)量。
FP(False Positive):真實(shí)標(biāo)簽為負(fù)類,但模型預(yù)測為正類的樣本數(shù)量。
FN(False Negative):真實(shí)標(biāo)簽為正類,但模型預(yù)測為負(fù)類的樣本數(shù)量。
-
準(zhǔn)確率acc
關(guān)心模型預(yù)測的能力
a c c = T P + T N T P + F P + F N + T N acc = \frac{TP+TN}{TP+FP+FN+TN} acc=TP+FP+FN+TNTP+TN? -
精準(zhǔn)率pre
關(guān)心模型預(yù)測負(fù)樣本能力
p r e = T P T P + F P pre = \frac{TP}{TP+FP} pre=TP+FPTP? -
召回率Recall
關(guān)心模型預(yù)測正樣本的能力
r e c a l l = T P T P + F N recall = \frac{TP}{TP+FN} recall=TP+FNTP?