本题要求在多分类场景下,基于混淆矩阵(Confusion Matrix)的四种计数(TP/FP/FN/TN)计算每个类别的 Precision、Recall、F1 Score,并按给定权重 weights 做加权平均后输出整体指标。
相关算法与核心公式(逐类 one-vs-rest 方式统计):
c(c 从 0 到 K-1,K = len(weights)):混淆矩阵是分类模型评估中的核心工具,尤其适用于多分类问题。它以矩阵形式展示每个类别的真正例 (TP)、假正例 (FP)、真负例 (TN) 和假负例 (FN)。基于混淆矩阵,可以计算精确率 (Precision)、召回率 (Recall) 和 F1 分数 (F1 Score) 等指标,
详细说明:
1.混淆矩阵扩展:
2.指标计算:
精确率(Precision):对于每个类别,计算 TP/(TP+FP) 。若某个类别的 TP+FP 为零,则该类别的精确率为 0 。
召回率(Recall):对于每个类别,计算 TP/(TP+FN) 。若某个类别的 TP+FN 为零,则该类别的召回率为 0 。
F1 分数:每个类别的 F1 分数为 2∗ (Precision∗Recall)/(Precision+Recall) 。若 Precision 和 Recall 均为零,则 F1 分数为零。
3.加权计算:
推导过程:
1.构建混淆矩阵:
初始化一个 N×N 的零矩阵,N 为类别数。
遍历每个样本的预测结果和真实标签,更新混淆矩阵中的 TP、FP、FN 和 TN 。
2.计算每个类别的指标:
对于每个类别,计算 TP、FP、FN 和 TN 。
根据公式计算 Precision、Recal 和 F1 Score,处理分母为零的情况。
3.加权平均计算:
输入数据分为三行,分别对应以下内容:
第一行是模型的预测结果 pred,表示每个样本的预测类别,用空格分隔。
第二行是真实标签 trueY,表示第一行中每个样本的真实类别,用空格分隔。
第三行是每个类别的权重 weights,用空格分隔,第一个数据表示类别 0 的权重,第二个数据表示类别 1 的权重,以此类推。
说明:pred 和 trueY 的长度相等;样本类别是从 0 开始的整数 weights 的长度等于样本类别个数;weights 的值为非负数且总和为 1 。
输出结果为一行,包含三个评估指标,用空格分隔:
precision:精确率,计算方式为每个类别的 TP/(TP+FP),并根据权重计算加权平均。
recall:召回率,计算方式为每个类别的 TP/(TP+FN),并根据权重计算加权平均。
f1Score:F1 分数,每个类别的 F1 分数为精确率和召回率的调和平均,再根据权重计算加权平均。
输出结果保留 2 位小数,不足 2 位时补零。
输入
0 0 0 1 1 2 2 2 2
0 1 2 0 1 2 2 2 2
0.25 0.25 0.5
输出
0.71 0.65 0.67
说明
输入解释:
当前样本的预测类别 pred 为 0 0 0 1 1 2 2 2 2
上述样本的真实类别 trueY 为 0 1 2 0 1 2 2 2 2
类别 0、1、2 的权重 weights 分别为 0.25 0.25 0.5
输出解释:
precision:0.71
recall:0.65
f1Score:0.67
输入
0 0 1 1
0 0 0 1
0.5 0.5
输出
0.75 0.83 0.73
说明
输入解释:
当前输入样本的预测类别 pred 为 0 0 1 1
当前样本的真实类别 trueY 为 0 0 0 1
类别 0、1 的权重 weights 分别为 0.5 0.5
输出解释:
precision:0.75
recall:0.83
f1Score:0.73