zoukankan      html  css  js  c++  java
  • hihocoder 1522 : F1 Score

     
    时间限制:10000ms
    单点时限:1000ms
    内存限制:256MB

    描述

    小Hi和他的小伙伴们一起写了很多代码。时间一久有些代码究竟是不是自己写的,小Hi也分辨不出来了。

    于是他实现了一个分类算法,希望用机器学习实现自动分类。

    为了评价这个分类算法的优劣,他选出了N份有标记的代码作测试集,并决定用F1 Score作为评价标准。

    给出N份代码的实际作者是不是小Hi以及分类算法预测的结果,请你计算F1 Score。

    输入

    第一行包含一个整数N。(1 <= N <= 1000)    

    以下N行每行包含两个字符(+或-)。第一个字符代表这份代码的实际作者是不是小Hi(+代表是,-代表不是),第二个代表预测的作者是不是小Hi(+代表是,-代表不是)。  

    输出

    一个百分数,X%,代表答案,X保留两位小数。

    样例输入

    4  
    + +    
    + -  
    - +  
    - -

    样例输出

    50.00%

    用F1-Score来作为评价标准,而F1-Score的定义可见http://www.cnblogs.com/weedboy/p/7072010.html

    比较坑的是要注意分母为零的时候,precision和recall都为1,F1-Score的分母为0的时候,分母当成1来计算

    ac代码:

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<iostream>
    #include<vector>
    #include<iomanip>
    using namespace std;
    int main()
    {
        int n;
        double tp=0,fp=0,tn=0,fn=0;
        char ans, pre;
        cin >> n;
        for (int i = 0;i < n;i++)
        {
            cin >> ans >> pre;
            if (ans == '+'&&pre == '+') tp++;
            else if (ans == '+'&&pre == '-') fn++;
            else if (ans == '-'&&pre == '-') tn++;
            else if (ans == '-'&&pre == '+') fp++;
        }
        double p = (tp + fp)==0?1:tp / (tp + fp);
        double r = (tp + fn)==0?1:tp / (tp + fn);
        double res = (p + r)==0? 2*p*r :2*p*r /(p + r);
        printf("%.2lf%s
    ", res*100,"%");
        return 0;
    }
  • 相关阅读:
    JavaScript基础知识——异步和单线程
    JavaScript基础知识——作用域和闭包
    JavaScript基础知识——原型和原型链
    JavaScript基础知识——变量类型与计算
    JavaScript 学者必看“new”
    Javascript中颇受诟病的「this错乱」问题
    Python之路
    Python
    Python
    python所遇问题合集(持续更新)
  • 原文地址:https://www.cnblogs.com/weedboy/p/7072828.html
Copyright © 2011-2022 走看看