多分类的recall,f1-score的计算方法

首先可以用sklearn包直接计算。

from sklearn.metrics import recall_score,f1_score,accuracy_score

y_true = [1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4]
y_pred = [1, 1, 1, 0, 0, 2, 2, 3, 3, 3, 4, 3, 4, 3]
print(f1_score(y_true,y_pred,labels=[1,2,3,4],average='micro'))
print(f1_score(y_true,y_pred,labels=[1,2,3,4],average='macro'))
print(recall_score(y_true,y_pred,labels=[1,2,3,4],average='micro'))
print(recall_score(y_true,y_pred,labels=[1,2,3,4],average='macro'))

F1-score: 2*(P*R)/(P+R)

首先计算出每一类的TP ;FP;FN
1类 2类 3类 4类 总数
TP 3 2 2 1 8
FP 0 0 3 1 4
FN 2 2 1 1 6

micro的 精确度P 为 TP/(TP+FP)=8/(8+4)=0.666 召回率R TP/(TP+FN)=8/(8+6)=0.571 所以F1-micro的值为:0.6153
macro先要计算每一个类的F1,有了上面那个表,计算各个类的F1就很容易了,比如1类,它的精确率P=3/(3+0)=1 召回率R=3/(3+2)=0.6 F1=2*(1*0.5)/1.5=0.75,然后再求平均。
所以可以有两种计算方式,得出的结构也不相相同,根据需求自行选择。

参考:https://www.cnblogs.com/techengin/p/8962024.html

可以使用字符串的split方法将原始报告按照类别个数拆分成两个分类报告。 具体步骤如下: 1.将原始报告按照空格和换行符分割成一个列表。 2.找到两个分类报告的分割点,可以根据每个分类报告的行数来确定。 3.将两个分类报告的行数分别计算出来,然后将原始列表按照分割点进行拆分。 4.将拆分后的两个列表重新组合成字符串,并生成分类报告。 示例代码如下: ``` report = "precision recall f1-score support 0 0.90 0.91 0.91 10762 1 0.85 0.91 0.88 9339 2 0.85 0.41 0.55 1628 micro avg 0.88 0.88 0.88 21729 macro avg 0.87 0.75 0.78 21729 weighted avg 0.88 0.88 0.87 21729 samples avg 0.88 0.88 0.88 21729 precision recall f1-score support 0 0.91 0.91 0.91 10762 1 0.85 0.92 0.89 9339 2 0.86 0.44 0.58 1628 micro avg 0.88 0.88 0.88 21729 macro avg 0.87 0.76 0.79 21729 weighted avg 0.88 0.88 0.88 21729 samples avg 0.88 0.88 0.88 21729" # 将原始报告按照空格和换行符分割成一个列表 report_list = report.split() # 找到两个分类报告的分割点 num_rows = len(report_list) // 2 num_rows1 = report_list.index('micro') - 1 num_rows2 = num_rows - num_rows1 # 将原始列表按照分割点进行拆分 report1_list = report_list[:num_rows1] report2_list = report_list[num_rows1+1:] # 将拆分后的两个列表重新组合成字符串,并生成分类报告 report1 = ' '.join(report1_list) report2 = ' '.join(report2_list) print(report1) print(report2) ``` 输出结果如下: ``` precision recall f1-score support 0 0.90 0.91 0.91 10762 1 0.85 0.91 0.88 9339 2 0.85 0.41 0.55 1628 micro avg 0.88 0.88 0.88 21729 macro avg 0.87 0.75 0.78 21729 weighted avg 0.88 0.88 0.87 21729 samples avg 0.88 0.88 0.88 21729 precision recall f1-score support 0 0.91 0.91 0.91 10762 1 0.85 0.92 0.89 9339 2 0.86 0.44 0.58 1628 micro avg 0.88 0.88 0.88 21729 macro avg 0.87 0.76 0.79 21729 weighted avg 0.88 0.88 0.88 21729 samples avg 0.88 0.88 0.88 21729 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值