准确率(Precision)、召回率(Recall)、F值(F-Measure)

准确率(Precision)、召回率(Recall)、F值(F-Measure),第1张

1、准确率与召回率(Precision & Recall)

准确率 和 召回率 是广泛用于信息检索和统计学分类领域的两个度量值,用来评价结果的质量。其中精度是检索出相关文档数与检索出的文档总数的比率,衡量的是检索系统的 查准率 ;召回率是指检索出的相关文档数和文档库中所有的相关文档数的比率,衡量的是检索系统的 查全率 。

一般来说,Precision就是检索出来的条目(比如:文档、网页等)有多少是准确的,Recall就是所有准确的条目有多少被检索出来了。

正确率、召回率和 F 值是在鱼龙混杂的环境中,选出目标的重要评价指标。不妨看看这些指标的定义先:

1正确率 = 提取出的正确信息条数 /  提取出的信息条数

2 召回率 = 提取出的正确信息条数 /  样本中的信息条数

两者取值在0和1之间,数值越接近1,查准率或查全率就越高。

3 F值  = 正确率 召回率 2 / (正确率 + 召回率) (F 值即为正确率和召回率的调和平均值)

不妨举 这样一个例子 :某池塘有1400条鲤鱼,300只虾,300只鳖。现在以捕鲤鱼为目的。撒一大网,逮着了700条鲤鱼,200只虾,100只鳖。那么,这些指标分别如下:

正确率 = 700 / (700 + 200 + 100) = 70%

召回率 = 700 / 1400 = 50%

F值 = 70% 50% 2 / (70% + 50%) = 583%

不妨看看如果把池子里的所有的鲤鱼、虾和鳖都一网打尽,这些指标又有何变化:

正确率 = 1400 / (1400 + 300 + 300) = 70%

召回率 = 1400 / 1400 = 100%

F值 = 70% 100% 2 / (70% + 100%) = 8235%

由此可见,正确率是评估捕获的成果中目标成果所占得比例;召回率,顾名思义,就是从关注领域中,召回目标类别的比例;而F值,则是综合这二者指标的评估指标,用于综合反映整体的指标。

当然希望检索结果Precision越高越好,同时Recall也越高越好,但事实上这两者在某些情况下有矛盾的。比如极端情况下,我们只搜索出了一个结果,且是准确的,那么Precision就是100%,但是Recall就很低;而如果我们把所有结果都返回,那么比如Recall是100%,但是Precision就会很低。因此在不同的场合中需要自己判断希望Precision比较高或是Recall比较高。如果是做实验研究,可以绘制 Precision-Recall曲线 来帮助分析。

2、综合评价指标(F-Measure)

P和R指标有时候会出现的矛盾的情况,这样就需要综合考虑他们,最常见的方法就是F-Measure(又称为F-Score)。

F-Measure是Precision和Recall加权调和平均 :

当参数α=1时,就是最常见的F1,也即

可知F1综合了P和R的结果,当F1较高时则能说明试验方法比较有效。

3、E值

E值表示查准率P和查全率R的加权平均值,当其中一个为0时,E值为1,其计算公式:

b越大,表示查准率的权重越大。

4、平均正确率(Average Precision, AP)

平均正确率表示不同查全率的点上的正确率的平均。

原文链接:>

#include

#include

int main(void)

{

char cName[5][10],temp[10];

float fScore[5],ftemp;

int i,j,k;

printf("输入学生的姓名和成绩:\n");

for(i=0;i<5;i++)

{

printf("cName[%d]是:",i);

scanf("%s",cName[i]);

printf("成绩为:");

scanf("%f",&fScore[i]);

}

for(i=0;i<5;i++)

{

k=i;

for(j=i+1;j<5;j++)

if(fScore[k]>fScore[j])

{

k=j;}

if(k!=i)

{ strcpy(temp,cName[i]);

strcpy(cName[i],cName[k]);

strcpy(cName[k],temp);

ftemp=fScore[i];

fScore[i]=fScore[k];

fScore[k]=ftemp;

}

}

printf("成绩由低到高的顺序为:\n");

for(i=0;i<5;i++)

{

printf("%s的成绩为%f\n",cName[i],fScore[i]);

}

return 0;

}

#include <string>

#include <iostream>

using namespace std;

class Student

{

public:

// 带参数的构造函数初始化对象

Student(int id, string name, double score)

: id(id), name(name), score(score)

{

count++;

total+=score;

}

// 修改分数成员函数

void ChangeScore(double newScore)

{

total +=newScore-score;

score=newScore;

}

static double GetAverage()

{

return total / count;

}

private:

int id;

string name;

double score;

private:

static double total;

static int count;

};

// 类外对静态数据成员进行定义声明

double Student::total = 00f;

int Student::count= 0;

void main()

{

// 声明四个学生对象并初始化

Student s1(1001,"James", 86);

Student s2(1001,"Kate", 67);

Student s3(1001,"Lucy", 91);

Student s4(1001,"LiLei", 65);

cout<<"The average score is "<<Student::GetAverage()<<endl;

// 修改成绩

s1ChangeScore(50);

s2ChangeScore(50);

s3ChangeScore(50);

s4ChangeScore(50);

cout<<"The average score is "<<Student::GetAverage()<<endl;

system("pause");

}

以上就是关于准确率(Precision)、召回率(Recall)、F值(F-Measure)全部的内容,包括:准确率(Precision)、召回率(Recall)、F值(F-Measure)、f-meansure和f-score 两个不一样吗、c语言数组排序问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10206109.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存