Coder Social home page Coder Social logo

ashokpant / accuracy-evaluation-cpp Goto Github PK

View Code? Open in Web Editor NEW
12.0 3.0 7.0 10 KB

A c++ implementation for calculating the accuracy metrics (Accuracy, Error Rate, Precision(micro/macro), Recall(micro/macro), Fscore(micro/macro)) for classification tasks based on the paper http://www.sciencedirect.com/science/article/pii/S0306457309000259 and MATLAB confusion implementation.

License: MIT License

CMake 1.23% C++ 98.77%

accuracy-evaluation-cpp's Introduction

Accuracy evaluation

A c++ implementation for calculating the accuracy metrics (Accuracy, Error Rate, Precision(micro/macro), Recall(micro/macro), Fscore(micro/macro)) for classification tasks based on the paper [A systematic analysis of performance measures for classification tasks] (http://www.sciencedirect.com/science/article/pii/S0306457309000259) and MATLAB confusion implementation.

Build

    cd accuracy-evaluation-cpp
    mkdir build
    cd build
    cmake ..
    make
    
    Demo
    ./accuracy_evaluation 

Uses

(labels and outputs are matrices (labels: classes x samples | outputs: classes x samples)

    int main(int argc, char** argv) {
    
       /* double targets[][] = {
        {1, 1, 0, 0, 0, 0},
         {0, 0, 1, 1, 0, 0},
          {0, 0, 0, 0, 1, 1}
          };
        double outputs[][] = {
        {0.1, 0.86, 0.2, 0.1, .02, 0.1},
         {0.4, 0.12, 0.768, 0.145, 0.1, 0.8},
          {0.454, 0.35, 0.21, 0.0, 0.89, 0.9999}
          };
        */
    
        vector<vector<double> > targets;
        vector<double> row;
        row.push_back(1);
        row.push_back(1);
        row.push_back(0);
        row.push_back(0);
        row.push_back(0);
        row.push_back(0);
        targets.push_back(row);
    
        row.clear();
        row.push_back(0);
        row.push_back(0);
        row.push_back(1);
        row.push_back(1);
        row.push_back(0);
        row.push_back(0);
        targets.push_back(row);
    
        row.clear();
        row.push_back(0);
        row.push_back(0);
        row.push_back(0);
        row.push_back(0);
        row.push_back(1);
        row.push_back(1);
        targets.push_back(row);
    
        vector<vector<double> > outputs;
        row.clear();
        row.push_back(0.1);
        row.push_back(0.86);
        row.push_back(0.2);
        row.push_back(0.1);
        row.push_back(0.02);
        row.push_back(0.1);
        outputs.push_back(row);
    
        row.clear();
        row.push_back(0.4);
        row.push_back(0.12);
        row.push_back(0.768);
        row.push_back(0.145);
        row.push_back(0.1);
        row.push_back(0.8);
        outputs.push_back(row);
    
        row.clear();
        row.push_back(0.454);
        row.push_back(0.35);
        row.push_back(0.21);
        row.push_back(0.0);
        row.push_back(0.89);
        row.push_back(0.99999);
        outputs.push_back(row);
    
        Confusion confusion = Confusion(targets, outputs);
        confusion.print();
    
        Evaluation evaluation = Evaluation(confusion);
        evaluation.print();
    
        return;
    }

OR (labels and outputs are actual class values)

    int main(int argc, char** argv) {
    
           vector<int> targets; //{0,0,1,1,2,2}
           vector<int> outputs; //{0,2,1,1,2,2}
           targets.push_back(0);
           targets.push_back(0);
           targets.push_back(1);
           targets.push_back(1);
           targets.push_back(2);
           targets.push_back(2);
       
           outputs.push_back(0);
           outputs.push_back(2);
           outputs.push_back(1);
           outputs.push_back(1);
           outputs.push_back(2);
           outputs.push_back(2);
       
           Confusion confusion = Confusion(targets, outputs);
           confusion.print();
       
           Evaluation evaluation = Evaluation(confusion);
           evaluation.print();
       
           return;
    }

Output

Confusion Results

Confusion value
	c = 0.17
Confusion Matrix
	1 0 1
	0 2 0
	0 0 2
Indices
	[1]		[]		[0]
	[]		[2,3]		[]
	[]		[]		[4,5]
Percentages
	0.2 0.0 1.0 0.8
	0.0 0.0 1.0 1.0
	0.0 0.33 0.67 1.0

Accuracy Evaluation Results

Average Accuracy(%)       : 91.11
Error(%)                  : 8.89
Precision (Micro)(%)      : 88.89
Recall (Micro)(%)         : 93.02
Fscore (Micro)(%)         : 90.91
Precision (Macro)(%)      : 88.89
Recall (Macro)(%)         : 94.44
Fscore (Macro)(%)         : 91.58

Note

For Java Implementation, visit accuracy-evaluation-java

For Scala Implementation, visit accuracy-evaluation-scala

For MATLAB Implementation, visit accuracy-evaluation-matlab

accuracy-evaluation-cpp's People

Contributors

ashokpant avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.