栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

机器学习——使用sklearn的F1

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

机器学习——使用sklearn的F1

最近学习NLP,老师给了一个任务,slot tagging,然后使用F1评分,并且需要得到每一个tagging的评分用于展示。

一共有6种分类:

from sklearn.metrics import f1_score
def my_f1_score(y_pred, target, label2idx):
    
    pred = np.array(y_pred)
    truth = np.array(target)
    
    f1_total = f1_score(pred , truth , average='micro')
    
    T_f1 = f1_score(pred[truth==label2idx['T']], truth[truth==label2idx['T']], average='micro')
    O_f1 = f1_score(pred[truth==label2idx['O']], truth[truth==label2idx['O']], average='micro')
    C_f1 = f1_score(pred[truth==label2idx['C']], truth[truth==label2idx['C']], average='micro')
    
    
    return f1_total, T_f1, C_f1, O_f1

上述方法,会根据设置的tagging进行计算F1,分别计算出每个tagging的数据。

import numpy as np

label2idx = {'O': 0, 'T': 1, 'C': 2, 'D': 3}

truth = np.array([2, 2, 1, 3, 2])
pred =  np.array([1, 2, 1, 3, 5])


print(truth==label2idx['C'])
print(truth[truth==label2idx['C']])
print(pred[truth==label2idx['C']])

对应的输出:

[ True  True False False  True]
[2 2 2]
[1 2 5]

如上所示,假如我们需要仅计算tagging为C的分数,就需要找出真实值为C的,组成一个新的数组。
然后在pred中,找到本该为C的位置的值,组成新的数组。
然后把两个新数组交给sklearn进行计算。

PS: f1_score方法中的average,可以设置为[None, ‘micro’, ‘macro’, 'samples, ‘weighted’, ‘binary’], 默认是binary。

在此记录一下,方便后续学习。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/934841.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号