深度學(xué)習(xí)二分類評(píng)估詳細(xì)解析與代碼實(shí)戰(zhàn)
如果你關(guān)心前面的深度學(xué)習(xí)二分類的實(shí)戰(zhàn)代碼,可以參考下述官方的技術(shù)文檔:使用 Trainer API 微調(diào)模型. https://huggingface.co/learn/nlp-course/zh-CN/chapter3/3
如果你剛接觸 自然語(yǔ)言處理,huggingface 是你繞不過(guò)去的坎。但是目前它已經(jīng)被墻了,相信讀者的實(shí)力,自行解決吧。
設(shè)置代理,如果不設(shè)置的話,那么huggingface的包無(wú)法下載;
import os
os.environ['HTTP_PROXY'] = 'http://127.0.0.1:7890'
os.environ['HTTPS_PROXY'] = 'http://127.0.0.1:7890'在探討二分類問(wèn)題時(shí),經(jīng)常會(huì)遇到四種基本的分類結(jié)果,它們根據(jù)樣例的真實(shí)類別與分類器的預(yù)測(cè)類別來(lái)定義。以下是對(duì)這些分類結(jié)果的詳細(xì)解釋:
這四個(gè)定義均由兩個(gè)字母組成,它們各自代表了不同的含義。
第一個(gè)字母(True/False)用于表示算法預(yù)測(cè)的正確性,而第二個(gè)字母(Positive/Negative)則用于表示算法預(yù)測(cè)的結(jié)果。
- 第1個(gè)字母(True/False):描述的是分類器是否預(yù)測(cè)正確。True表示分類器判斷正確,而False則表示分類器判斷錯(cuò)誤。
- 第2個(gè)字母(Positive/Negative):表示的是分類器的預(yù)測(cè)結(jié)果。Positive代表分類器預(yù)測(cè)為正例,而Negative則代表分類器預(yù)測(cè)為負(fù)例。
- 真正例(True Positive,TP):當(dāng)樣例的真實(shí)類別為正例時(shí),如果分類器也預(yù)測(cè)其為正例,那么我們就稱這個(gè)樣例為真正例。簡(jiǎn)而言之,真實(shí)情況與預(yù)測(cè)結(jié)果均為正例。
- 假正例(False Positive,F(xiàn)P):有時(shí),分類器可能會(huì)將真實(shí)類別為負(fù)例的樣例錯(cuò)誤地預(yù)測(cè)為正例。這種情況下,我們稱該樣例為假正例。它代表了分類器的“過(guò)度自信”或“誤報(bào)”現(xiàn)象。
- 假負(fù)例(False Negative,F(xiàn)N):與假正例相反,假負(fù)例指的是真實(shí)類別為正例的樣例被分類器錯(cuò)誤地預(yù)測(cè)為負(fù)例。這種情況下的“遺漏”或“漏報(bào)”是分類器性能評(píng)估中需要重點(diǎn)關(guān)注的問(wèn)題。
- 真負(fù)例(True Negative,TN):當(dāng)樣例的真實(shí)類別和預(yù)測(cè)類別均為負(fù)例時(shí),我們稱其為真負(fù)例。這意味著分類器正確地識(shí)別了負(fù)例。
數(shù)據(jù)準(zhǔn)備
做深度學(xué)習(xí)的同學(xué)應(yīng)該都默認(rèn)裝了 torch,跳過(guò) torch的安裝
!pip install evaluate導(dǎo)包
import torch
import random
import evaluate隨機(jī)生成二分類的預(yù)測(cè)數(shù)據(jù) pred 和 label;
label = torch.tensor([random.choice([0, 1]) for i in range(20)])
pred = torch.tensor([random.choice([0, 1, label[i]]) for i in range(20)])
sum(label == pred)下述是隨機(jī)生成的 label 和 pred
# label
tensor([0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0])
# pred
tensor([0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0])使用 random.choice([0, 1, label[i]]? 是為了提高 pred 的 準(zhǔn)確率;因?yàn)?label[i] 是真實(shí)的 label;
下述的是計(jì)算TP、TN、FP、FN的值:
Tips:
pred : 與第2個(gè)字母(Positive/Negative)保持一致,
label: 根據(jù)第一個(gè)字母是否預(yù)測(cè)正確,再判斷填什么
TP = sum((label == 1) & (pred == 1))
TN = sum((label == 0) & (pred == 0))
FP = sum((label == 0) & (pred == 1))
FN = sum((label == 1) & (pred == 0))標(biāo)簽 | Value |
TP | 6 |
TN | 8 |
FP | 2 |
FN | 4 |
準(zhǔn)確率 Accuracy
準(zhǔn)確率(Accuracy): 分母通常指的是所有樣本的數(shù)量,即包括真正例(True Positives, TP)、假正例(False Positives, FP)、假負(fù)例(False Negatives, FN)和真負(fù)例(True Negatives, TN)的總和。而分子中的第一個(gè)字母為“T”(True),意味著我們計(jì)算的是算法預(yù)測(cè)正確的樣本數(shù)量,即TP和TN的總和。
然而,準(zhǔn)確率作為一個(gè)評(píng)價(jià)指標(biāo)存在一個(gè)顯著的缺陷,那就是它對(duì)數(shù)據(jù)樣本的均衡性非常敏感。當(dāng)數(shù)據(jù)集中的正負(fù)樣本數(shù)量存在嚴(yán)重不均衡時(shí),準(zhǔn)確率往往不能準(zhǔn)確地反映模型的性能優(yōu)劣。
例如,假設(shè)有一個(gè)測(cè)試集,其中包含90%正樣本和10%負(fù)樣本。若模型將所有樣本都預(yù)測(cè)為正樣本,那么它的準(zhǔn)確率將輕松達(dá)到90%。從準(zhǔn)確率這一指標(biāo)來(lái)看,模型似乎表現(xiàn)得非常好。但實(shí)際上,這個(gè)模型對(duì)于負(fù)樣本的預(yù)測(cè)能力幾乎為零。
因此,在處理樣本不均衡的問(wèn)題時(shí),需要采用其他更合適的評(píng)價(jià)指標(biāo),如精確度(Precision)、召回率(Recall)、F1分?jǐn)?shù)(F1 Score)等,來(lái)更全面地評(píng)估模型的性能。這些指標(biāo)能夠更準(zhǔn)確地反映模型在各類樣本上的預(yù)測(cè)能力,從而幫助我們做出更準(zhǔn)確的決策。
精準(zhǔn)率的公式如下:

accuracy = evaluate.load("accuracy")
accuracy.compute(
predictinotallow=pred,
references=label
)Output:
{'accuracy': 0.7}下述三種方法都可以用來(lái)計(jì)算 accuracy:
print(
(TP + TN) / (TP + TN + FP +FN),
(TP + TN) / len(label),
sum((label == pred)) / 20
)Output:
tensor(0.7000) tensor(0.7000) tensor(0.7000)使用公式計(jì)算出來(lái)的與通過(guò)evaluate庫(kù),算出來(lái)的結(jié)果一致,都是 0.7。
precision 精準(zhǔn)率

precision = evaluate.load("precision")
precision.compute(
predictinotallow=pred,
references=label
)Output:
{'precision': 0.75}
TP / (TP + FP)recall 召回率

recall = evaluate.load("recall")
recall.compute(
predictinotallow=pred,
references=label
)Output:
{'recall': 0.6}
TP / (TP + FN)F1
f1 = evaluate.load("f1")
f1.compute(
predictinotallow=pred,
references=label
)Output:
{'f1': 0.6666666666666666}
2 * 0.7500 * 0.6000 / (0.7500 + 0.6000)Output:
0.6666666666666665參考資料
- 如何在python代碼中使用代理下載Hungging face模型. https://www.jianshu.com/p/209528bed023
- [機(jī)器學(xué)習(xí)] 二分類模型評(píng)估指標(biāo)---精確率Precision、召回率Recall、ROC|AUC. https://blog.csdn.net/zwqjoy/article/details/78793162
- 使用 Trainer API 微調(diào)模型. https://huggingface.co/learn/nlp-course/zh-CN/chapter3/3
- Huggingface Evaluate 文檔. https://huggingface.co/docs/evaluate/index?
本文轉(zhuǎn)載自 ??AI悠閑區(qū)??,作者: JieShen

















