机器学习中分类任务评价指标

机器学习中分类任务评价指标

分类任务的评价指标核心是衡量 “预测结果与真实标签的匹配程度”,基础源于混淆矩阵,衍生出单维度指标、综合指标、排序指标及多分类适配指标,不同指标适配不同业务场景。
# 生成示例数据
X, y = datasets.make_classification(n_samples=1000, n_features=20, n_classes=2, 
                                   random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, 
                                                    random_state=42)

# 训练模型
model = LogisticRegression(random_state=42)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
y_pred_proba = model.predict_proba(X_test)[:, 1]  # 正类的预测概率

一、基础:混淆矩阵(Confusion Matrix)

混淆矩阵是所有分类评价指标的核心,通过划分 “预测标签 - 真实标签” 的四种组合,量化分类结果的分布。

核心定义

TP(True Positive):真实标签为正类,预测标签也为正类(真阳性)。

TN(True Negative):真实标签为负类,预测标签也为负类(真阴性)。

FP(False Positive):真实标签为负类,预测标签为正类(假阳性,误判)。

FN(False Negative):真实标签为正类,预测标签为负类(假阴性,漏判)。

# 计算混淆矩阵
cm = confusion_matrix(y_test, y_pred)
tn, fp, fn, tp = cm.ravel()

print("=== 二分类评价指标 ===")
print(f"混淆矩阵:\n{cm}")
print(f"TN: {tn}, FP: {fp}, FN: {fn}, TP: {tp}")

二分类混淆矩阵结构

混淆矩阵=[TNFPFNTP]\text{混淆矩阵} = \begin{bmatrix} TN & FP \\ FN & TP \end{bmatrix}混淆矩阵=[TNFNFPTP]

二、单维度基础指标​

基于混淆矩阵计算,聚焦分类任务的单一核心需求(如 “判对率”“不漏判”“不错判”)。​

1. 准确率(Accuracy)​

定义:所有样本中预测正确的比例,是最直观的整体评价指标。​

数学公式:​

Accuracy=TP+TNTP+TN+FP+FN\text{Accuracy} = \frac{TP + TN}{TP + TN + FP + FN}Accuracy=TP+TN+FP+FNTP+TN


适用场景:数据分布均衡(正、负类样本数量接近)的通用场景。

# 1. 准确率 (Accuracy)
accuracy = accuracy_score(y_test, y_pred)
print(f"\n1. 准确率 (Accuracy): {accuracy:.4f}")
print("   定义: 正确预测的样本数占总样本数的比例")
print(f"   公式: (TP + TN) / (TP + TN + FP + FN) = ({tp} + {tn}) / ({tp} + {tn} + {fp} + {fn})")

2. 精确率(Precision,查准率)​

定义:预测为正类的样本中,真实为正类的比例,聚焦 “不错判”。​

数学公式:​

Precision=TPTP+FP\text{Precision} = \frac{TP}{TP + FP}Precision=TP+FPTP


适用场景:重视误判成本的场景(如垃圾邮件识别,避免正常邮件被误判)。

# 2. 精确率 (Precision)
precision = precision_score(y_test, y_pred)
print(f"\n2. 精确率 (Precision): {precision:.4f}")
print("   定义: 预测为正类的样本中,实际为正类的比例")
print(f"   公式: TP / (TP + FP) = {tp} / ({tp} + {fp})")

3. 召回率(Recall,查全率)​

定义:真实为正类的样本中,被正确预测为正类的比例,聚焦 “不漏判”。​

数学公式:​

Recall=TPTP+FN\text{Recall} = \frac{TP}{TP + FN}Recall=TP+FNTP

适用场景:重视漏判成本的场景(如疾病诊断,避免漏诊患病患者)。

3. 召回率 (Recall)
recall = recall_score(y_test, y_pred)
print(f"\n3. 召回率 (Recall): {recall:.4f}")
print("   定义: 实际为正类的样本中,被正确预测为正类的比例")
print(f"   公式: TP / (TP + FN) = {tp} / ({tp} + {fn})")

4. 特异度(Specificity,真阴性率)​

定义:真实为负类的样本中,被正确预测为负类的比例,聚焦 “负类判准率”。​

数学公式:​

Specificity=TNTN+FP\text{Specificity} = \frac{TN}{TN + FP}Specificity=TN+FPTN


适用场景:需要关注负类识别效果的场景(如异常检测中正常样本的识别)。

# 4. 特异度 (Specificity)
specificity = tn / (tn + fp)
print(f"\n5. 特异度 (Specificity): {specificity:.4f}")
print("   定义: 实际为负类的样本中,被正确预测为负类的比例")
print(f"   公式: TN / (TN + FP) = {tn} / ({tn} + {fp})")

三、综合指标:平衡精确率与召回率​

精确率与召回率通常呈负相关,综合指标通过融合二者,提供更全面的评价。​

1. F1 分数(F1-Score)​

定义:精确率和召回率的调和平均数,平衡二者权重(同等重要)。​

数学公式:​

F1=2×Precision×RecallPrecision+Recall=2TP2TP+FP+FNF1 = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}} = \frac{2TP}{2TP + FP + FN}F1=2×Precision+RecallPrecision×Recall=2TP+FP+FN2TP


适用场景:希望同时兼顾 “不错判” 和 “不漏判”,且二者重要性相当。

# 5. F1分数 (F1-Score)
f1 = f1_score(y_test, y_pred)
print(f"\n4. F1分数 (F1-Score): {f1:.4f}")
print("   定义: 精确率和召回率的调和平均数")
print(f"   公式: 2 × (Precision × Recall) / (Precision + Recall)")

2. Fβ 分数(Fβ-Score)​

定义:加权调和平均数,可通过 β 调整召回率的权重(β>1 时召回率更重要,β<1 时精确率更重要)。​

数学公式:​

​Fβ=(1+β2)×Precision×Recallβ2×Precision+Recall=(1+β2)TP(1+β2)TP+β2FN+FP​F_\beta = (1 + \beta^2) \times \frac{\text{Precision} \times \text{Recall}}{\beta^2 \times \text{Precision} + \text{Recall}} = \frac{(1 + \beta^2)TP}{(1 + \beta^2)TP + \beta^2 FN + FP}Fβ=(1+β2)×β2×Precision+RecallPrecision×Recall=(1+β2)TP+β2FN+FP(1+β2)TP


适用场景:需要明确侧重召回率或精确率的场景(如 β=2 时更重视召回率)。

# 6. Fβ分数 (F-beta Score)
f_beta = f1_score(y_test, y_pred, beta=2)  # beta=2表示更重视召回率
print(f"\n7. F2分数 (F2-Score): {f_beta:.4f}")
print("   定义: F1分数的泛化,可以调整精确率和召回率的权重")
print("   公式: (1 + β²) × (Precision × Recall) / (β² × Precision + Recall)")

3. 马修斯相关系数(MCC,Matthews Correlation Coefficient)​

定义:考虑了所有混淆矩阵元素的综合指标,取值范围 [-1,1],1 为完美分类,0 为随机分类,-1 为完全错误分类。​

数学公式:​

​MCC=TP×TN−FP×FN(TP+FP)(TP+FN)(TN+FP)(TN+FN)​\text{MCC} = \frac{TP \times TN - FP \times FN}{\sqrt{(TP + FP)(TP + FN)(TN + FP)(TN + FN)}}MCC=(TP+FP)(TP+FN)(TN+FP)(TN+FN)TP×TNFP×FN


适用场景:数据极度不平衡时,比准确率、F1 更可靠。​

# 马修斯相关系数 (Matthews Correlation Coefficient)
mcc = matthews_corrcoef(y_test, y_pred)
print(f"16. 马修斯相关系数: {mcc:.4f}")
print("    定义: 综合考虑TP、TN、FP、FN的平衡指标")
print("    范围: -1(完全错误)到 1(完美预测)")
print("    特点: 在不平衡数据中表现良好")

四、排序相关指标:评估概率输出质量​

当模型输出分类概率而非直接标签时,需通过排序指标衡量概率的区分能力。​

1. ROC 曲线与 AUC-ROC​

ROC 曲线:以 “假阳性率(FPR)” 为横轴,“真阳性率(TPR=Recall)” 为纵轴的曲线,反映不同阈值下的分类权衡。​

假阳性率公式:

FPR=FPTN+FPFPR = \frac{FP}{TN + FP}FPR=TN+FPFP

AUC-ROC(Area Under ROC Curve):ROC 曲线下的面积,取值范围 [0,1],越接近 1 说明模型区分能力越强。​

数学公式(基于排序的计算方式):​

设正类样本数为P,负类样本数为N,对所有样本按预测概率降序排序,记正类样本的排序名次为rankirank_iranki(从 1 开始),则:

AUC-ROC=1P×N∑i∈正类ranki−P(P+1)2N\text{AUC-ROC} = \frac{1}{P \times N} \sum_{i \in \text{正类}} rank_i - \frac{P(P + 1)}{2N}AUC-ROC=P×N1i正类ranki2NP(P+1)

# 8. ROC曲线和AUC
fpr_roc, tpr_roc, thresholds_roc = roc_curve(y_test, y_pred_proba)
auc_score = roc_auc_score(y_test, y_pred_proba)

print(f"8. AUC-ROC: {auc_score:.4f}")
print("   定义: ROC曲线下的面积,衡量分类器整体性能")
print("   范围: 0.5(随机猜测)到 1.0(完美分类器)")

2. PR 曲线与 AUC-PR

PR 曲线:以 “精确率” 为纵轴,“召回率” 为横轴的曲线,聚焦正类样本的识别效果。
AUC-PR(Area Under PR Curve):PR 曲线下的面积,取值范围 [0,1],在数据不平衡场景下比 AUC-ROC 更敏感。

数学公式(积分形式):

AUC-PR=∫01Precision(r)dr\text{AUC-PR} = \int_{0}^{1} \text{Precision}(r) drAUC-PR=01Precision(r)dr

其中rrr为召回率,Precision(r)\text{Precision}(r)Precision(r)为对应召回率下的精确率。

# 9. 精确率-召回率曲线和AUC-PR
precision_pr, recall_pr, thresholds_pr = precision_recall_curve(y_test, y_pred_proba)
auc_pr = average_precision_score(y_test, y_pred_proba)

print(f"9. AUC-PR: {auc_pr:.4f}")
print("   定义: 精确率-召回率曲线下的面积")
print("   应用: 在不平衡数据集中比AUC-ROC更有意义")

五、多分类适配指标​

二分类指标需扩展才能适用于多分类(k类),核心思路是 “拆解为多个二分类任务”。​

1. 宏平均(Macro Average)​

定义:对每个类别单独计算指标(如 Precision),再取算术平均,平等对待所有类别。​

数学公式(以宏精确率为例):​

Macro-Precision=1k∑i=1kPrecisioni\text{Macro-Precision} = \frac{1}{k} \sum_{i=1}^{k} \text{Precision}_iMacro-Precision=k1i=1kPrecisioni


同理可推导宏召回率(Macro-Recall)、宏 F1(Macro-F1)。

# 宏平均 (Macro Average)
precision_macro = precision_score(y_test_multi, y_pred_multi, average='macro')
recall_macro = recall_score(y_test_multi, y_pred_multi, average='macro')
f1_macro = f1_score(y_test_multi, y_pred_multi, average='macro')

print(f"12. 宏平均:")
print(f"    精确率: {precision_macro:.4f}")
print(f"    召回率: {recall_macro:.4f}")
print(f"    F1分数: {f1_macro:.4f}")
print("    定义: 对所有类别平等对待,计算每个类别的指标后取平均")

2. 微平均(Micro Average)

定义:先汇总所有类别的混淆矩阵(总 TP、总 FP、总 FN),再计算指标,侧重样本数量多的类别。

数学公式(以微精确率为例):

Micro-Precision=∑i=1kTPi∑i=1k(TPi+FPi)\text{Micro-Precision} = \frac{\sum_{i=1}^{k} TP_i}{\sum_{i=1}^{k} (TP_i + FP_i)}Micro-Precision=i=1k(TPi+FPi)i=1kTPi

同理可推导微召回率(Micro-Recall)、微 F1(Micro-F1)。

# 微平均 (Micro Average)
precision_micro = precision_score(y_test_multi, y_pred_multi, average='micro')
recall_micro = recall_score(y_test_multi, y_pred_multi, average='micro')
f1_micro = f1_score(y_test_multi, y_pred_multi, average='micro')

print(f"\n14. 微平均:")
print(f"    精确率: {precision_micro:.4f}")
print(f"    召回率: {recall_micro:.4f}")
print(f"    F1分数: {f1_micro:.4f}")
print("    定义: 将所有类别的TP、FP、FN汇总后计算指标")

3. 加权平均(Weighted Average)

定义:对每个类别单独计算指标,再按该类别的样本数量占比加权平均,平衡类别规模差异。

数学公式(以加权精确率为例):

Weighted-Precision=∑i=1k(niN×Precisioni)\text{Weighted-Precision} = \sum_{i=1}^{k} \left( \frac{n_i}{N} \times \text{Precision}_i \right)Weighted-Precision=i=1k(Nni×Precisioni)

其中nin_ini为第iii类的样本数,NNN为总样本数,同理可推导加权召回率、加权 F1。

#  加权平均 (Weighted Average)
precision_weighted = precision_score(y_test_multi, y_pred_multi, average='weighted')
recall_weighted = recall_score(y_test_multi, y_pred_multi, average='weighted')
f1_weighted = f1_score(y_test_multi, y_pred_multi, average='weighted')

print(f"\n13. 加权平均:")
print(f"    精确率: {precision_weighted:.4f}")
print(f"    召回率: {recall_weighted:.4f}")
print(f"    F1分数: {f1_weighted:.4f}")
print("    定义: 按每个类别的样本数加权计算平均值")

六、指标选择核心原则​

数据均衡性:平衡数据用准确率、F1;不平衡数据用 MCC、AUC-PR、加权平均。​

业务优先级:漏判代价高(如疾病诊断)选高召回率;误判代价高(如垃圾邮件)选高精确率。​

模型输出形式:仅输出标签用混淆矩阵、准确率、F1;输出概率用 AUC-ROC、AUC-PR。​

分类类型:二分类直接用基础指标;多分类优先选加权平均(兼顾类别规模)。

补充:

1. 对数损失(Log Loss,交叉熵损失 Cross-Entropy Loss)

定义:

衡量模型预测概率与真实标签之间的 “不确定性差异”,值越小表示概率预测越准确。​

适用场景:

所有输出概率的分类任务(二分类、多分类),是训练分类模型时常用的损失函数,也可作为评价指标。​

数学公式:​

二分类:设真实标签为y∈{0,1},预测为正类的概率为p,则:

Log Loss=−1N∑i=1N[yilog⁡(pi)+(1−yi)log⁡(1−pi)]\text{Log Loss} = -\frac{1}{N} \sum_{i=1}^{N} \left[ y_i \log(p_i) + (1 - y_i) \log(1 - p_i) \right]Log Loss=N1i=1N[yilog(pi)+(1yi)log(1pi)]

多分类:设真实标签为yi∈{0,1,...,k−1}y_i \in \{0,1,...,k-1\}yi{0,1,...,k1},(one-hot 编码),预测第c类的概率为pi,cp_{i,c}pi,c

Log Loss=−1N∑i=1N∑c=0k−1yi,clog⁡(pi,c)\text{Log Loss} = -\frac{1}{N} \sum_{i=1}^{N} \sum_{c=0}^{k-1} y_{i,c} \log(p_{i,c})Log Loss=N1i=1Nc=0k1yi,clog(pi,c)

2. 布里尔分数(Brier Score)​

定义:

衡量概率预测的 “校准误差”,即预测概率与真实结果(0/1)的平方差均值,值越小表示概率越校准。​

特点:

比对数损失更稳健(对极端概率不敏感),同时包含 “可靠性”(概率是否准确)和 “分辨率”(区分正负例的能力)。​

适用场景:

二分类概率预测的校准评估(如天气预报中 “降雨概率” 的准确性)。​

数学公式:​

对二分类任务,真实标签y∈{0,1},预测概率p:

Brier Score=1N∑i=1N(pi−yi)2\text{Brier Score} = \frac{1}{N} \sum_{i=1}^{N} (p_i - y_i)^2Brier Score=N1i=1N(piyi)2

3.科恩卡帕系数(Cohen’s Kappa)​

定义:

衡量模型预测与真实标签的一致性,扣除了随机猜测导致的一致性,比准确率更适合不平衡数据或评判标注者一致性。​

核心思想:

Kappa=观测一致性−随机一致性1−随机一致性Kappa = \frac{\text{观测一致性} - \text{随机一致性}}{1 - \text{随机一致性}}Kappa=1随机一致性观测一致性随机一致性

适用场景:类别不平衡的分类任务、多标注者一致性检验(如医学影像标注)。​

数学公式:​

设混淆矩阵中第iii类的真实样本数为TiT_iTi,预测样本数为PiP_iPi,总样本数为N,则:

随机一致性=∑i=1kTi×PiN2\text{随机一致性} = \sum_{i=1}^{k} \frac{T_i \times P_i}{N^2}随机一致性=i=1kN2Ti×Pi

Kappa=Accuracy−随机一致性1−随机一致性\text{Kappa} = \frac{\text{Accuracy} - \text{随机一致性}}{1 - \text{随机一致性}}Kappa=1随机一致性Accuracy随机一致性

(取值范围:[-1,1],1 表示完美一致,0 表示与随机猜测一致,负数表示比随机更差)

4. 汉明损失(Hamming Loss)​

定义:

衡量预测标签与真实标签之间的 “逐标签错误率”,即错误标注的标签占总标签数的比例。​

适用场景:

多标签分类(如文本多标签分类、图像多标签识别)。​

数学公式:

设样本数为N,总标签数为L,对第iii个样本,真实标签集合为YiY_iYi ,预测标签集合为Y^i\hat{Y}_iY^i ,则:

Hamming Loss=1N×L∑i=1N∣YiΔY^i∣\text{Hamming Loss} = \frac{1}{N \times L} \sum_{i=1}^{N} \left| Y_i \Delta \hat{Y}_i \right|Hamming Loss=N×L1i=1NYiΔY^i

其中,YiΔY^iY_i \Delta \hat{Y}_iYiΔY^i表示YiY_iYiY^i\hat{Y}_iY^i的对称差集(即只在其中一个集合中的标签),∣⋅∣\left| \cdot \right|为集合大小。​(取值范围:[0,1],0 表示所有标签预测正确)

5.杰卡德相似系数(Jaccard Index,交并比 IoU)​

定义:

衡量两个标签集合的相似度,即交集大小与并集大小的比值,适用于评估 “标签集合整体匹配度”。​

扩展:

在多标签分类中,通常计算所有样本的杰卡德系数均值(称为 “平均杰卡德系数”)。​

适用场景:多标签分类、目标检测(评估预测框与真实框的重叠度)。​

数学公式:​

对单个样本,真实标签集合Y,预测标签集合Y^\hat{Y}Y^:

Jaccard(Y,Y^)=∣Y∩Y^∣∣Y∪Y^∣\text{Jaccard}(Y, \hat{Y}) = \frac{|Y \cap \hat{Y}|}{|Y \cup \hat{Y}|}Jaccard(Y,Y^)=YY^YY^

平均杰卡德系数:

Mean Jaccard=1N∑i=1NJaccard(Yi,Y^i)\text{Mean Jaccard} = \frac{1}{N} \sum_{i=1}^{N} \text{Jaccard}(Y_i, \hat{Y}_i)Mean Jaccard=N1i=1NJaccard(Yi,Y^i)

(取值范围:[0,1],1 表示标签集合完全匹配)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值