Advertisement
Guest User

lab1_2

a guest
Feb 19th, 2020
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.06 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7.  
  8. double f1_mera(vector<vector<int>>& matrix, int element_number, int k)
  9. {
  10.     int tp = matrix[element_number][element_number];
  11.     if (tp == 0) return 0.0;
  12.     else {
  13.         double f1 = 0.0;
  14.         double prec = 0.0, recall = 0.0;
  15.  
  16.         // recall
  17.         double p = 0.0;
  18.         for (int i = 0; i < k; i++) {
  19.             p += (double)matrix[i][element_number];
  20.         }
  21.         recall = (double)tp / p;
  22.  
  23.         cout << p << endl;
  24.  
  25.         // prec
  26.         double fp_plus_tp = 0.0;
  27.         for (int i = 0; i < k; i++) {
  28.             fp_plus_tp += (double)matrix[element_number][i];
  29.         }
  30.         prec = (double)tp / fp_plus_tp;
  31.  
  32.         // f1
  33.         f1 = 2 * (prec * recall) / (prec + recall);
  34.  
  35.         return f1;
  36.     }
  37. }
  38.  
  39. int main() {
  40.     ifstream fin("input.in");
  41.     ofstream fout("output.out");
  42.  
  43.     int k;
  44.     fin >> k;
  45.     vector<vector<int>> matrix(k, vector<int>(0));
  46.  
  47.     for (int i = 0; i < k; i++) {
  48.         for (int j = 0; j < k; j++) {
  49.             int input_element;
  50.             fin >> input_element;
  51.             matrix[i].push_back(input_element);
  52.         }
  53.     }
  54.  
  55.     // f micro -------------------------------------------------------------
  56.     // тут считаем c, p, all
  57.     vector<double> c(k), p(k);
  58.     double all = 0.0;
  59.     for (int i = 0; i < k; i++) {
  60.         for (int j = 0; j < k; j++) {
  61.             c[i] += (double)matrix[i][j];
  62.             p[i] += (double)matrix[j][i];
  63.             all += (double)matrix[i][j];
  64.         }
  65.     }
  66.  
  67.     for (int i = 0; i < k; i++) {
  68.         cout << c[i] << " " << p[i] << endl;
  69.     }
  70.  
  71.     double f_micro = 0.0;
  72.     for (int i = 0; i < k; i++) {
  73.         double f_mera_test = f1_mera(matrix, i, k);
  74.         f_micro += (c[i] * f_mera_test / all);
  75.     }
  76.  
  77.     // f macro -------------------------------------------------------------
  78.     double f_macro = 0.0;
  79.     double precW = 0.0;
  80.     int recallW = 0;
  81.  
  82.     for (int i = 0; i < k; i++) {
  83.         precW += (matrix[i][i] * c[i] / p[i]);
  84.         recallW += matrix[i][i];
  85.     }
  86.    
  87.     if (recallW == 0) f_macro = 0;
  88.     else {
  89.         precW /= all;
  90.         double recallW_d = (double)precW / (double)all;
  91.         f_macro = 2 * (precW * recallW_d) / (precW + recallW_d);
  92.     }
  93.  
  94.     cout << f_macro << endl;
  95.     cout << f_micro << endl;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement