精华内容
下载资源
问答
  • 自动发音错误检测中基于F1值最大化的声学模型训练方法
  • 槽位F1值的计算方式是什么样的(我不太熟悉Pytorch,您的代码我刚刚看,希望能得到您的解答)?</p><p>该提问来源于开源项目:sz128/slot_filling_and_intent_detection_of_SLU...
  • 模型评价-精确率 召回率 F1值 sklearn

    千次阅读 2018-05-29 20:37:10
    sklearn模型评价参数API:https://blog.csdn.net/cymy001/article/details/794252331、在使用Sklearn进行机器学习算法预测测试数据时,常用到classification_report函数来进行测试的准确率的计算输出分类报告:...
    sklearn模型评价参数API:
    https://blog.csdn.net/cymy001/article/details/79425233

    1、在使用Sklearn进行机器学习算法预测测试数据时,常用到classification_report函数来进行测试的准确率的计算输出
    分类报告:sklearn.metrics.classification_report(y_true, y_pred, labels=None, target_names=None,sample_weight=None, digits=2),显示主要的分类指标,返回每个类标签的精确、召回率及F1值
    主要参数说明:
    labels:分类报告中显示的类标签的索引列表
    target_names:显示与labels对应的名称
    digits:指定输出格式的精确度
    精度(precision) = 正确预测的个数(TP)/被预测正确的个数(TP+FP)
    召回率(recall)=正确预测的个数(TP)/预测个数(TP+FN)
    F1 = 2*精度*召回率/(精度+召回率)

    In [4]: from sklearn.metrics import classification_report
    ...: y_true = [1, 2, 3, 3, 3]
    ...: y_pred = [1, 1, 3, 3, 2]
    ...: labels =[1,3,2]
    ...: target_names = ['labels_1','labels_2','labels_3','labels-4']
    ...: print(classification_report(y_true,y_pred,labels=labels,target_names= t
    ...: arget_names,digits=3))
    ...:
    precision recall f1-score support

    labels_1 0.500 1.000 0.667 1
    labels_2 1.000 0.667 0.800 3
    labels_3 0.000 0.000 0.000 1

    avg / total 0.700 0.600 0.613 5

    #开始预测
    y_pred = clf.predict(X_test)
    print("done in %0.3fs" % (time() - t0))
    #通过该函数,比较预测出的标签和真实标签,并输出准确率
    from sklearn.metrics import classification_report
    print(classification_report(y_test, y_pred))
    其中在函数中p=precision,r=recall,f1=f1-score,s=support

    #建立一个矩阵,以真实标签和预测标签为元素,print它的混淆矩阵
    在使用Sklearn进行机器学习算法预测测试数据时,常用到Confusion Matrix函数来进行测试效果直观描述
    from sklearn.metrics import confusion_matrix
    print(confusion_matrix(y_test, y_pred, labels=range(n_classes)))
    输出:
     [[18  1]
     [ 1  4]]
    #真负tn18,假正fp1,假负fn1,真正tp4,
    # PRECISION精确率=TP/TP+FP预测为正的样本中有多少是真正的正样本,=4/5=0.8
    # 负样本precision=预测为负的样本中有多少是真正的负样本=18/18+1=0.947
    #RECALL召回率=TP/TP+FN表示的是样本中的正例有多少被预测正确了=4/5=0.8
    # 负样本同上
    # 准确率(accuracy) = 预测对的 / 所有 = (TP + TN) / (TP + FN + FP + TN) = 22/24=0.91666
    # 精确率(precision) = TP / (TP + FP)
    # 召回率(recall) = TP / (TP + FN)
    # F1值是精确率和召回率的调和均值,即F1 = 2PR / (P + R)
    下面将一一给出‘tp’,‘fp’,‘fn’的具体含义:
     
    准确率: 所有识别为”1”的数据中,正确的比率是多少。 
    如识别出来100个结果是“1”, 而只有90个结果正确,有10个实现是非“1”的数据。 所以准确率就为90%
     
    召回率: 所有样本为1的数据中,最后真正识别出1的比率。 
    如100个样本”1”, 只识别出了93个是“1”, 其它7个是识别成了其它数据。 所以召回率是93%
    F1-score:  是准确率与召回率的综合。 可以认为是平均效果。
     
    详细定义如下:
    对于数据测试结果有下面4种情况:
    TP: 预测为正, 实现为正
    FP: 预测为正, 实现为负
    FN: 预测为负,实现为正
    TN: 预测为负, 实现为负
     
    准确率: TP/ (TP+FP) 
    召回率: TP(TP + FN)
    F1-score: 2*TP/(2*TP + FP + FN) 



    展开全文
  • 评估分类模型性能的方法是:混淆矩阵,其总体思路是统计A类别实例被预测(分类)为B类别的次数。召回率(Recall)和精度(Precise)是广泛用于统计学分类领域的两个度量,用来评估分类结果的质量。 召回率(Recall Rate...
    评估分类模型性能的方法是:混淆矩阵,其总体思路是统计A类别实例被预测(分类)为B类别的次数。召回率(Recall)和精度(Precise)是广泛用于统计学分类领域的两个度量值,用来评估分类结果的质量。

    召回率(Recall Rate,也叫查全率)是检索出的相关文档数和文档库中所有的相关文档数的比率,衡量的是检索系统的查全率;
    精度(Precision Rate,也叫查准率)是检索出的相关文档数与检索出的文档总数的比率,衡量的是检索系统的查准率。

    一,混淆矩阵

    要解释清楚精确率和召回率,得先解释混淆矩阵,二分类问题的混淆矩阵由 4 个数构成。

    • 真阴性(True Negatives,TN):算法预测为负例(N),实际上也是负例(N)的个数,即算法预测对了(True);
    • 真阳性(True Positives,TP):算法预测为正例(P),实际上是负例(N)的个数,即算法预测错了(False);
    • 假阴性(False Negatives,FN): 算法预测为负例(N),实际上是正例(P)的个数,即算法预测错了(False);
    • 假阳性(False Positives,FP):算法预测为正例(P),实际上也是正例(P)的个数,即算法预测对了(True)。

    混淆矩阵定义如下:

    二,召回率和精确率

    对于精确率和召回率:一句话,精确率就是“查的准”,召回率就是“查的全”:

    1,   精确率

    准确率的含义是:预测为正例的那些数据里预测正确的数据个数”

    2,召回率

    召回率的含义是:真实为正例的那些数据里预测正确的数据个数

    3,准确率和召回率的相互关系

    准确率和召回率互相影响,理想状态下肯定追求两个都高,但是实际情况是两者相互“制约”:追求准确率高,则召回率就低;追求召回率高,则通常会影响准确率。若两者都低,则一般是出了某种问题。

    在一组不同阈值下,准确率和召回率的关系如下图:

    4,调和均值

    精准率和召回率是此消彼长的,即精准率高了,召回率就下降,在一些场景下要兼顾精准率和召回率,就有 F1 score。

    F1值是来综合评估精确率和召回率,当精确率和召回率都高时,F1也会高

    F1的公式为:

     有时候我们对精确率和召回率并不是一视同仁,我们用一个参数 

    [公式] 来度量两者之间的关系。

     

    如果 

    [公式] >1,召回率有更大的影响;

    如果 

    [公式] <1,精确率有更大的影响;

    如果 

    [公式] =1,精确率和召回率影响力相同,和 
    [公式] 形式一样;
    参考文档:
    展开全文
  • 在处理文本分类问题时,即可以直接用BERT模型作为文本分类的模型,也可以将BERT模型的最后层输出的结果作为word embedding导入到我们定制的文本分类模型中(如text-CNN等)。总之现在只要你的计算资源能满足,一般...

      BERT预训练模型在诸多NLP任务中都取得最优的结果。在处理文本分类问题时,即可以直接用BERT模型作为文本分类的模型,也可以将BERT模型的最后层输出的结果作为word embedding导入到我们定制的文本分类模型中(如text-CNN等)。总之现在只要你的计算资源能满足,一般问题都可以用BERT来处理,此次针对公司的一个实际项目——一个多类别(61类)的文本分类问题,其就取得了很好的结果。

      我们此次的任务是一个数据分布极度不平衡的多类别文本分类(有的类别下只有几个或者十几个样本,有的类别下又有几千个样本),在不做不平衡数据处理且不采用BERT模型时,其取得的F1值只有50%,而在不做不平衡数据处理但采用BERT模型时,其F1值能达到65%,但是在用bert模型时获得F1值时却存在一些问题。

      在tensorflow中只提供了二分类的precision,recall,f1值的计算接口,而bert源代码中的run_classifier.py文件中训练模型,验证模型等都是用的estimator API,这些高层API极大的限制了修改代码的灵活性。好在tensorflow源码中有一个方法可以计算混淆矩阵的方法,并且会返回一个operation。注意:这个和tf.confusion_matrix()不同,具体看源代码中下面这段代码:

            elif mode == tf.estimator.ModeKeys.EVAL:
    
                def metric_fn(per_example_loss, label_ids, logits, num_labels):
                    predictions = tf.argmax(logits, axis=-1, output_type=tf.int32)
                    accuracy = tf.metrics.accuracy(
                        labels=label_ids, predictions=predictions)
              
              # 这里的metrics时我们定义的一个python文件,在下面会介绍
    conf_mat
    = metrics.get_metrics_ops(label_ids, predictions, num_labels) loss = tf.metrics.mean(values=per_example_loss) return { "eval_accuracy": accuracy, "eval_cm": conf_mat, "eval_loss": loss, }

      验证时的性能指标计算都在这个方法里面,而且在return的这个字典中每个值必须是一个tuple。以accuracy为例,tf.metrics.accuracy返回的是一个(accuracy, update_op)这样一个tuple,而我们上一段说的tf.confusion_matrix只返回一个混淆矩阵。因此在这里我们使用一个内部的方法,方法导入如下:

    from tensorflow.python.ops.metrics_impl import _streaming_confusion_matrix

    这个方法会返回一个(confusion_matrix, update_op)的tuple。我们新建一个metrics.py文件,里面的代码如下:

    import numpy as np
    import tensorflow as tf
    from tensorflow.python.ops.metrics_impl import _streaming_confusion_matrix
        
    
    def get_metrics_ops(labels, predictions, num_labels):
      # 得到混淆矩阵和update_op,在这里我们需要将生成的混淆矩阵转换成tensor cm, op
    = _streaming_confusion_matrix(labels, predictions, num_labels) tf.logging.info(type(cm)) tf.logging.info(type(op)) return (tf.convert_to_tensor(cm), op) def get_metrics(conf_mat, num_labels):   # 得到numpy类型的混淆矩阵,然后计算precision,recall,f1值。 precisions = [] recalls = [] for i in range(num_labels): tp = conf_mat[i][i].sum() col_sum = conf_mat[:, i].sum() row_sum = conf_mat[i].sum() precision = tp / col_sum if col_sum > 0 else 0 recall = tp / row_sum if row_sum > 0 else 0 precisions.append(precision) recalls.append(recall) pre = sum(precisions) / len(precisions) rec = sum(recalls) / len(recalls) f1 = 2 * pre * rec / (pre + rec) return pre, rec, f1

    最上面一段代码中return的字典中的值可以在run_classifier.py中main函数中的下面一段代码中得到:

        if FLAGS.do_eval:
            eval_examples = processor.get_dev_examples(FLAGS.data_dir)
            num_actual_eval_examples = len(eval_examples)
            if FLAGS.use_tpu:
                # TPU requires a fixed batch size for all batches, therefore the number
                # of examples must be a multiple of the batch size, or else examples
                # will get dropped. So we pad with fake examples which are ignored
                # later on. These do NOT count towards the metric (all tf.metrics
                # support a per-instance weight, and these get a weight of 0.0).
                while len(eval_examples) % FLAGS.eval_batch_size != 0:
                    eval_examples.append(PaddingInputExample())
    
            eval_file = os.path.join(FLAGS.output_dir, "eval.tf_record")
            file_based_convert_examples_to_features(
                eval_examples, label_list, FLAGS.max_seq_length, tokenizer, eval_file)
    
            tf.logging.info("***** Running evaluation *****")
            tf.logging.info("  Num examples = %d (%d actual, %d padding)",
                            len(eval_examples), num_actual_eval_examples,
                            len(eval_examples) - num_actual_eval_examples)
            tf.logging.info("  Batch size = %d", FLAGS.eval_batch_size)
    
            # This tells the estimator to run through the entire set.
            eval_steps = None
            # However, if running eval on the TPU, you will need to specify the
            # number of steps.
            if FLAGS.use_tpu:
                assert len(eval_examples) % FLAGS.eval_batch_size == 0
                eval_steps = int(len(eval_examples) // FLAGS.eval_batch_size)
    
            eval_drop_remainder = True if FLAGS.use_tpu else False
            eval_input_fn = file_based_input_fn_builder(
                input_file=eval_file,
                seq_length=FLAGS.max_seq_length,
                is_training=False,
                drop_remainder=eval_drop_remainder)
    
         # result中就是return返回的字典 result
    = estimator.evaluate(input_fn=eval_input_fn, steps=eval_steps) output_eval_file = os.path.join(FLAGS.output_dir, "eval_results.txt") with tf.gfile.GFile(output_eval_file, "w") as writer: tf.logging.info("***** Eval results *****")        
           # 我们可以拿到混淆矩阵(现在时numpy的形式),调用metrics.py文件中的方法来得到precision,recall,f1值 pre, rec, f1
    = metrics.get_metrics(result["eval_cm"], len(label_list)) tf.logging.info("eval_precision: {}".format(pre)) tf.logging.info("eval_recall: {}".format(rec)) tf.logging.info("eval_f1: {}".format(f1)) tf.logging.info("eval_accuracy: {}".format(result["eval_accuracy"])) tf.logging.info("eval_loss: {}".format(result["eval_loss"])) np.save("conf_mat.npy", result["eval_cm"])

    通过上面的代码拿到混淆矩阵后,调用metrics.py文件中的get_metrics方法就可以得到precision,recall,f1值。

     

    转载于:https://www.cnblogs.com/jiangxinyang/p/10341392.html

    展开全文
  • 自然语言处理(ML),机器学习(NLP),信息检索(IR)等领域,评估(Evaluation)是一个必要的工作,而其评价指标往往有如下几点:准确率(Accuracy),精确率(Precision),召回率(Recall)和F1-Measure。本文将简单介绍其中几个概念...

    自然语言处理(NLP),机器学习(ML),信息检索(IR)等领域,评估(Evaluation)是一个必要的工作,而其评价指标往往有如下几点:准确率(Accuracy),精确率(Precision),召回率(Recall)和F1-Measure。

    本文将简单介绍其中几个概念。中文中这几个评价指标翻译各有不同,所以一般情况下推荐使用英文。

    现在我先假定一个具体场景作为例子。

    假如某个班级有男生80人,女生20人,共计100人.目标是找出所有女生.
    现在某人挑选出50个人,其中20人是女生,另外还错误的把30个男生也当作女生挑选出来了.
    作为评估者的你需要来评估(evaluation)下他的工作

    首先我们可以计算准确率(accuracy),其定义是: 对于给定的测试数据集,分类器正确分类的样本数与总样本数之比。也就是损失函数是0-1损失时测试数据集上的准确率[1].

    这样说听起来有点抽象,简单说就是,前面的场景中,实际情况是那个班级有男的和女的两类,某人(也就是定义中所说的分类器)他又把班级中的人分为男女两类。accuracy需要得到的是此君分正确的人占总人数的比例。很容易,我们可以得到:他把其中70(20女+50男)人判定正确了,而总人数是100人,所以它的accuracy就是70 %(70 / 100).

    由准确率,我们的确可以在一些场合,从某种意义上得到一个分类器是否有效,但它并不总是能有效的评价一个分类器的工作。举个例子,google抓取了argcv 100个页面,而它索引中共有10,000,000个页面,随机抽一个页面,分类下,这是不是argcv的页面呢?如果以accuracy来判断我的工作,那我会把所有的页面都判断为”不是argcv的页面”,因为我这样效率非常高(return false,一句话),而accuracy已经到了99.999%(9,999,900/10,000,000),完爆其它很多分类器辛辛苦苦算的值,而我这个算法显然不是需求期待的,那怎么解决呢?这就是precision,recall和f1-measure出场的时间了.

    在说precision,recall和f1-measure之前,我们需要先需要定义TP,FN,FP,TN四种分类情况.
    按照前面例子,我们需要从一个班级中的人中寻找所有女生,如果把这个任务当成一个分类器的话,那么女生就是我们需要的,而男生不是,所以我们称女生为”正类”,而男生为”负类”.

    通过这张表,我们可以很容易得到这几个值:
    TP=20
    FP=30
    FN=0
    TN=50

    精确率(precision)的公式是

    P=TPTP+FP
    ,它计算的是所有”正确被检索的item(TP)”占所有”实际被检索到的(TP+FP)”的比例.

    在例子中就是希望知道此君得到的所有人中,正确的人(也就是女生)占有的比例.所以其precision也就是40%(20女生/(20女生+30误判为女生的男生)).

    召回率(recall)的公式是

    R=TPTP+FN
    ,它计算的是所有”正确被检索的item(TP)”占所有”应该检索到的item(TP+FN)”的比例。

    在例子中就是希望知道此君得到的女生占本班中所有女生的比例,所以其recall也就是100%(20女生/(20女生+ 0 误判为男生的女生))

    F1值就是精确值和召回率的调和均值,也就是

    2F1=1P+1R

    调整下也就是
    F1=2PRP+R=2TP2TP+FP+FN

    例子中 F1-measure 也就是约为 57.143%
    (20.410.4+1)
    展开全文
  • python实现计算精度、召回率和F1值

    万次阅读 多人点赞 2019-03-02 11:09:47
      摘要:在深度学习的分类任务中,对模型的评估或测试时需要计算其在验证集或测试集上的预测精度(prediction/accuracy)、召回率(recall)和F1值。本文首先简要介绍如何计算精度、召回率和F1值,其次给出python...
  • 自然语言处理(NLP),机器学习(ML),信息检索(IR)等领域,评估(Evaluation)是一个必要的工作,而其评价指标往往有如下几点:准确率(Accuracy),精确率(Precision),召回率(Recall)和F1-Measure。本文将简单介绍其中几个概念...
  • 【火炉炼AI】机器学习011-分类模型的评估:准确率,精确率,召回率,F1值 【本文所使用的Python库和版本号】: Python 3.5, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2   在前面的(【火炉炼AI】机器学习004...
  • 3、F函数 F1函数是一个常用指标,F1值是精确率和召回率的调和均值,即 F值也可泛化为对精确率和召回率赋不同权值进行加权调和,通过调节alpha来改变F值, alpha == 1时即上式中F1。 2、区别与应用 区别: 理想情况...
  • 1、召回率:评价模型的完整性 预测样本中的预测正确的信息条数/总样本中所有的属于这类样本的信息条数 举例: 这里用鱼和虾举例 TP: 将鱼预测为鱼 FP: 将虾预测为鱼 FN: 将鱼预测虾 TN: ...F1分数可以看作模型
  • 精确率、召回率、F1、AUC和ROC曲线其实都是评价模型好坏的指标,而且相互之间是有关系的,只是侧重点不同,题主如果理解了各指标的定义就能找出他们的区别与联系,下面就用一个例子解释这些指标。 以白...
  • 比如准确率(accuracy)、精确率(precision)、召回率(recall)、F1值(F1 score)、ROC、AUC等指标。而这些评价指标直接或间接都与混淆矩阵有关,前四者可以从混淆矩阵中直接计算得到,AUC值则要通过ROC曲线进行计算,而...
  • 模型性能评估
  • 精确率、召回率、F1值 (1)精确率(命中率)(precision):模型预测为正类的样本中预测正确的数量/模型预测为正类的样本数量;(追求查准) (2)召回率(覆盖率)(recall):模型预测为正类的样本中预测正确的...
  • 比如准确率、精确率、召回率、F1值、ROC、AUC等指标,但是你清楚这些指标的具体含义吗?下面我们一起来看看吧。 1.混淆矩阵 介绍各个指标之前,我们先来了解一下混淆矩阵。假如现在有一个二分类问题,那么预测结果...
  • 比如准确率、精确率、召回率、F1值、ROC、AUC等指标,但是你清楚这些指标的具体含义吗?下面我们一起来看看吧。 1.混淆矩阵 介绍各个指标之前,我们先来了解一下混淆矩阵。假如现在有一个二分类问题,那么预测结果和...
  • 在深度学习的分类任务中,对模型的评估或测试时需要计算其在验证集或测试集上的预测精度(prediction/accuracy)、召回率(recall)和F1值。本文首先简要介绍如何计算精度、召回率和F1值,其次给出python编写的模块...
  • 当我们训练一个分类模型,总要有一些指标来衡量这个模型的优劣。一般可以用如题的指标来对预测数据做评估,...即预测 == 实际的,即斜对角线上的总和 / 总样本 精确率:预测结果为类n中,其中实际为类n所占的比例...
  • 比如准确率、精确率、召回率、F1值、ROC、AUC等指标。 1. 混淆矩阵 介绍各个指标之前,我们先来了解一下混淆矩阵。假如现在有一个二分类问题,那么预测结果和实际结果两两结合会出现如下四种情况。 由于用数字1、0...
  • 混淆矩阵是机器学习中总结分类模型预测结果的情形分析表,以矩阵形式将数据集中的记录按照真实的类别与分类模型预测的类别判断两个标准进行汇总。其中矩阵的行表示真实,矩阵的列表示预测。 一类错.
  • 信息抽取(三)三元关系抽取——改良后的层叠...复现后的模型在百度2019年语言竞赛三元关系抽取的数据集上F1值仅达到77%,我在博文总结了几点可以优化的方向,并实现一系列层叠式指针网络的改良。在此贴出代码和提升结
  • 准确率、精确率(查准率)、召回率(查全率)、F1值、ROC曲线的AUC值,都可以作为评价一个机器学习模型好坏的指标(evaluation metrics),而这些评价指标直接或间接都与混淆矩阵有关,前四者可以从混淆矩阵中直接...
  • 转载链接:https://www.zhihu.com/question/30643044/answer/225095821本回答将以机器学习领域的"Hello World"数据集——MNIST为背景,来梳理一下关于分类问题模型评估的知识。分类问题有很多种,比如二分类(Binary...
  • 原文: ... ... 对于分类模型,也有很多评估指标来判断该分类模型是否达到我们的要求,这几个评估指标主要是指:准确率(accuracy),精确率(precision),召回率(recall),F1值(F1 meas...
  • 精准率、召回率、F1值、AUC、ROC曲线都是评价模型好坏的指标,并且之间相互关联,只是侧重点不同,明确理解各指标的定义,发现区别和联系如:以白条逾期预测模型为例,这是一个有监督的二分类模型...
  • 机器学习性能指标精确率、召回率、F1值、ROC、PRC与AUC 精确率、召回率、F1、AUC和ROC曲线都是评价模型好坏的指标,那么它们之间有什么不同,又有什么联系呢。下面让我们分别来看一下这几个指标分别是什么...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 478
精华内容 191
关键字:

模型f1值