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