服務(wù)器 打開網(wǎng)站iis7下載百度2023最新版
深度學(xué)習(xí)pytorch之22種損失函數(shù)數(shù)學(xué)公式和代碼定義
深度學(xué)習(xí)pytorch之19種優(yōu)化算法(optimizer)解析
深度學(xué)習(xí)pytorch之4種歸一化方法(Normalization)原理公式解析和參數(shù)使用
深度學(xué)習(xí)pytorch之簡單方法自定義9類卷積即插即用
實(shí)時(shí)語義分割之BiSeNetv2(2020)結(jié)構(gòu)原理解析及建筑物提取實(shí)踐
文章目錄
- 摘要
- 1. Accuracy Score
- 2. Balanced Accuracy
- 3. Brier Score Loss
- 4. Cohen's Kappa
- 5. F1/F-beta Score
- 6. Hamming Loss
- 7. Hinge Loss
- 8. Jaccard Score
- 9. Log Loss
- 10. Matthews Correlation
- 11. Precision
- 12. Recall
- 13. Zero-One Loss
- 關(guān)鍵參數(shù)說明
- 可執(zhí)行代碼示例
摘要
模型訓(xùn)練后需要評估模型性能,因此需要了解各種評估指標(biāo)的具體用法和背后的數(shù)學(xué)原理,本博客以清晰的格式呈現(xiàn)分類任務(wù)評估指標(biāo)的名稱、調(diào)用示例、公式說明。
1. Accuracy Score
調(diào)用方式:
from sklearn.metrics import accuracy_score
acc = accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)
公式:
Accuracy = (TP + TN) / (TP + TN + FP + FN)
2. Balanced Accuracy
調(diào)用方式:
from sklearn.metrics import balanced_accuracy_score
bal_acc = balanced_accuracy_score(y_true, y_pred, sample_weight=None, adjusted=False)
公式:
Balanced Accuracy = (Recall_Class1 + Recall_Class2 + … +Recall_ClassN) / N
調(diào)整后版本:BalancedAcc_adj = (BalancedAcc - 1/N) / (1 -1/N)
3. Brier Score Loss
調(diào)用方式:
from sklearn.metrics import brier_score_loss
brier = brier_score_loss(y_true, y_prob, sample_weight=None, pos_label=1)
公式:
Brier Score = 1/N * Σ(y_true_i - y_prob_i)^2
(適用于概率預(yù)測的校準(zhǔn)度評估)
4. Cohen’s Kappa
調(diào)用方式:
from sklearn.metrics import cohen_kappa_score
kappa = cohen_kappa_score(y1, y2, labels=None, weights=None, sample_weight=None)
公式:
κ = (p_o - p_e) / (1 - p_e) 其中 p_o 為觀察一致率,p_e 為期望一致率
5. F1/F-beta Score
調(diào)用方式:
from sklearn.metrics import f1_score, fbeta_score
f1 = f1_score(y_true, y_pred, average='weighted', zero_division=0)
fbeta = fbeta_score(y_true, y_pred, beta=0.5, average='macro')
公式:
Fβ = (1 + β2) * (precision * recall) / (β2 * precision + recall) 當(dāng) β=1
時(shí)為 F1 Score
6. Hamming Loss
調(diào)用方式:
from sklearn.metrics import hamming_loss
hamming = hamming_loss(y_true, y_pred, sample_weight=None)
公式:
Hamming Loss = 1/N * Σ(預(yù)測錯(cuò)誤的標(biāo)簽數(shù) / 總標(biāo)簽數(shù)) (多標(biāo)簽任務(wù)專用)
7. Hinge Loss
調(diào)用方式:
from sklearn.metrics import hinge_loss
hinge = hinge_loss(y_true, pred_decision, labels=None, sample_weight=None)
公式:
Hinge Loss = max(0, 1 - y_true * pred_decision) 的平均值 (SVM模型常用)
8. Jaccard Score
調(diào)用方式:
from sklearn.metrics import jaccard_score
jaccard = jaccard_score(y_true, y_pred, average='samples')
公式:
Jaccard = TP / (TP + FP + FN)
即IOU,多用于圖像分割評估
9. Log Loss
調(diào)用方式:
from sklearn.metrics import log_loss
logloss = log_loss(y_true, y_pred, eps=1e-15, normalize=True, labels=None)
公式:
Log Loss = -1/N * Σ[y_true_i * log(y_pred_i) + (1-y_true_i) *log(1-y_pred_i)]
交叉熵?fù)p失,需概率預(yù)測輸入
10. Matthews Correlation
調(diào)用方式:
from sklearn.metrics import matthews_corrcoef
mcc = matthews_corrcoef(y_true, y_pred, sample_weight=None)
公式:
MCC = (TPTN - FPFN) / √((TP+FP)(TP+FN)(TN+FP)(TN+FN))
適用于類別不平衡的二分類
11. Precision
調(diào)用方式:
from sklearn.metrics import precision_score
precision = precision_score(y_true, y_pred, average='weighted', zero_division=0)
公式:
Precision = TP / (TP + FP)
12. Recall
調(diào)用方式:
from sklearn.metrics import recall_score
recall = recall_score(y_true, y_pred, average='macro', zero_division=0)
公式:
Recall = TP / (TP + FN)
13. Zero-One Loss
調(diào)用方式:
from sklearn.metrics import zero_one_loss
zero_one = zero_one_loss(y_true, y_pred, normalize=True)
公式:
Zero-One Loss = 1 - Accuracy
直接統(tǒng)計(jì)錯(cuò)誤預(yù)測比例
關(guān)鍵參數(shù)說明
參數(shù) | 說明 |
---|---|
average | 計(jì)算方式:None(各類單獨(dú)計(jì)算)、‘micro’(全局統(tǒng)計(jì))、‘macro’(各類平均)、‘weighted’(按支持?jǐn)?shù)加權(quán)) |
zero_division | 處理除零情況:0(返回0)、1(返回1)或’warn’(返回0并警告) |
sample_weight | 樣本權(quán)重?cái)?shù)組 |
pos_label | 指定正類標(biāo)簽(僅二分類有效) |
labels | 指定要評估的類別列表 |
beta | F-beta中召回率的權(quán)重(>1側(cè)重召回率,<1側(cè)重精確率) |
可執(zhí)行代碼示例
以下程序采用常用的accuracy, precision, recall, f1對分類結(jié)果進(jìn)行評估,注意替換下列文件夾,兩個(gè)文件夾內(nèi)均為8位單波段影像,采用相同命名。
- label_dir = ‘label’ # 替換為實(shí)際路徑
- pred_dir = ‘pred’ # 替換為實(shí)際路徑
import os
import numpy as np
from PIL import Image
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score
import matplotlib.pyplot as pltdef load_images_and_labels(label_dir, pred_dir):"""讀取標(biāo)簽圖像和預(yù)測圖像,假設(shè)它們的像素值代表類別標(biāo)簽。:param label_dir: 實(shí)際標(biāo)簽圖像的文件夾路徑:param pred_dir: 預(yù)測標(biāo)簽圖像的文件夾路徑:return: 實(shí)際標(biāo)簽和預(yù)測標(biāo)簽的列表"""labels = []preds = []# 獲取文件列表label_files = sorted(os.listdir(label_dir))pred_files = sorted(os.listdir(pred_dir))# 遍歷每個(gè)圖像文件加載標(biāo)簽和預(yù)測for label_file, pred_file in zip(label_files, pred_files):label_path = os.path.join(label_dir, label_file)pred_path = os.path.join(pred_dir, pred_file)# 加載圖像并轉(zhuǎn)換為灰度label_img = Image.open(label_path).convert('L') # 灰度圖pred_img = Image.open(pred_path).convert('L') # 灰度圖# 假設(shè)灰度值代表類標(biāo)簽label = np.array(label_img)pred = np.array(pred_img)# 扁平化數(shù)組,以便計(jì)算評估指標(biāo)labels.extend(label.flatten())preds.extend(pred.flatten())return np.array(labels), np.array(preds)def evaluate_model(labels, preds):"""計(jì)算模型的評估指標(biāo):param labels: 實(shí)際標(biāo)簽:param preds: 預(yù)測標(biāo)簽"""# 計(jì)算評估指標(biāo)accuracy = accuracy_score(labels, preds)precision = precision_score(labels, preds, average='weighted', zero_division=0)recall = recall_score(labels, preds, average='weighted', zero_division=0)f1 = f1_score(labels, preds, average='weighted', zero_division=0)# 打印評估指標(biāo)print(f"Accuracy: {accuracy:.4f}")print(f"Precision: {precision:.4f}")print(f"Recall: {recall:.4f}")print(f"F1 Score: {f1:.4f}")# 可選:繪制混淆矩陣from sklearn.metrics import confusion_matriximport seaborn as snscm = confusion_matrix(labels, preds)sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=np.unique(labels), yticklabels=np.unique(labels))plt.title('Confusion Matrix')plt.xlabel('Predicted')plt.ylabel('True')plt.show()if __name__ == "__main__":# 設(shè)置實(shí)際標(biāo)簽和預(yù)測標(biāo)簽的文件夾路徑label_dir = 'label' # 替換為實(shí)際路徑pred_dir = 'pred' # 替換為實(shí)際路徑# 加載標(biāo)簽和預(yù)測數(shù)據(jù)labels, preds = load_images_and_labels(label_dir, pred_dir)# 評估模型evaluate_model(labels, preds)
輸出結(jié)果:
Accuracy: 0.9681
Precision: 0.9686
Recall: 0.9681
F1 Score: 0.9683
繪制混淆矩陣: