记录F1分数和召回率

内容

参考博文:

  1. F1分数以及micro、macro区别
    对于上面说的矩阵是不是挺懵的,它的真名叫混下矩阵,看下面

  2. 混淆矩阵
    所有正确的预测结果都在对角线上,所以从混淆矩阵中可以很方便直观的看出哪里有错误,因为他们呈现在对角线外面。
    它允许我们做出更多的分析,而不仅仅是局限在正确率。准确率对于分类器的性能分析来说,并不是一个很好地衡量指标,因为如果数据集不平衡(每一类的数据样本数量相差太大),很可能会出现误导性的结果。例如,如果在一个数据集中有95只猫,但是只有5条狗,那么某些分类器很可能偏向于将所有的样本预测成猫。整体准确率为95%,但是实际上该分类器对猫的识别率是100%,而对狗的识别率是0%。

  3. 怎么求F1分数呢? 代码实现?
    在Sklearn库中有现成的代码:
    输入: 必须是1-array的预测和GT
    输出: 得到相应的结果
    sklearn.metrics.f1_score 使用方法
    sklearn.metrics.f1_score中micro、macro、samples理解

  4. 适用什么场景?
    在这里插入图片描述
    也就是后者会注重所有分类效果都得好! 平均效果!
    而micro则是会带有权重的思想

代码

我的实现:

def evaluation_metric(pred, label):
    '''
    pred: Prediction results with whatever size
    label: Label with whatever size
    return: [Evaluation Metric]
    '''
    # average=None, get the P, R, and F1 value of a single class
    pred = numpy.asarray(pred)
    label = numpy.asarray(label)

    Precision = precision_score(y_true=label, y_pred=pred, average="macro")
    Recall = recall_score(y_true=label, y_pred=pred, average="macro")
    F1_score = f1_score(y_true=label, y_pred=pred, average="macro")
    F1_score_micro = f1_score(y_true=label, y_pred=pred, average="micro")
    return Precision, F1_score, Recall, F1_score_micro

其中average参数有下面的几个选项

y_true:1d数组,或标签指示符数组/稀疏矩阵
		基本事实(正确)目标值。

y_pred:1d数组,或标签指示符数组/稀疏矩阵
		分类器返回的估计目标。

labels:list,optional
		包括when的标签集,以及if的顺序。可以排除数据中存在的标
		签,例如,以忽略多数否定类别的方式计算多类平均值,而数
		据中不存在的标签将导致宏平均值中的0成分。对于多标签目
		标,标签是列索引。默认情况下,和 中的所有标签均按排序顺
		序使用。
		average != 'binary'average is Noney_truey_pred

pos_label:strint,默认值为1
	 	   要报告是否average='binary'以及数据是否为二进制的类。如果数据是
		   多类或多标签的,则将被忽略;设置,labels=[pos_label]并且只会报
		   告该标签的得分。average != 'binary'

average:string, [None, ‘binary’ (default), ‘micro’, ‘macro’, ‘samples’, ‘weighted’]
		 对于多类/多标签目标,此参数是必需的。如果为None,则返
		 回每个班级的分数。否则,这将确定对数据执行的平均类型:

	'binary':仅报告由指定的类的结果pos_label。
			  仅在目标(y_{true,pred})为二进制时适用。

	'micro':通过计算正确,错误和否定的总数来全局计算指标。

	'macro':计算每个标签的指标,并找到其未加权平均值。
			 这没有考虑数据数量的不平衡。而是平等地对待每一类

	'weighted':计算每个标签的指标,并找到其平均权重(受支持)
				(每个标签的真实实例数)。
			    这改变了“宏观”以解决标签的不平衡。
			    这可能导致F得分不在精确度和召回率之间。

	'samples':计算每个实例的指标,并找到其平均值
			  (仅对不同于的多标签分类有意义 accuracy_score)。

sample_weight:array-like of shape (n_samples,), default=None
			   样品重量。

zero_division:“warn”, 0 or 1, default=”warn”
			   设置除法为零(即所有预测和标签均为负)时
			   返回的值。如果设置为“ warn”,则该值为0,
			   但也会发出警告。

返回值:

f1_score:float or array of float, shape = [n_unique_labels]
		  二进制分类中的阳性类别的F1分数,
		  或者对于多类别任务,每个类别的F1分数的加权平均值。

例子:

 Examples
    --------
    >>> from sklearn.metrics import precision_score
    >>> y_true = [0, 1, 2, 0, 1, 2]
    >>> y_pred = [0, 2, 1, 0, 0, 1]
    >>> precision_score(y_true, y_pred, average='macro')
    0.22...
    >>> precision_score(y_true, y_pred, average='micro')
    0.33...
    >>> precision_score(y_true, y_pred, average='weighted')
    0.22...
    >>> precision_score(y_true, y_pred, average=None)
    array([0.66..., 0.        , 0.        ])
    >>> y_pred = [0, 0, 0, 0, 0, 0]
    >>> precision_score(y_true, y_pred, average=None)
    array([0.33..., 0.        , 0.        ])
    >>> precision_score(y_true, y_pred, average=None, zero_division=1)
    array([0.33..., 1.        , 1.        ])

    """

其中micro是求的全部的准确率! 没有考虑数据的平衡性!

average = “micro” = average=NULL

precision_score
recall_score
f1_score

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值