Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <vector>
- #include <algorithm>
- using namespace std;
- double f1_mera(vector<vector<int>>& matrix, int element_number, int k)
- {
- int tp = matrix[element_number][element_number];
- if (tp == 0) return 0.0;
- else {
- double f1 = 0.0;
- double prec = 0.0, recall = 0.0;
- // recall
- double p = 0.0;
- for (int i = 0; i < k; i++) {
- p += (double)matrix[i][element_number];
- }
- recall = (double)tp / p;
- cout << p << endl;
- // prec
- double fp_plus_tp = 0.0;
- for (int i = 0; i < k; i++) {
- fp_plus_tp += (double)matrix[element_number][i];
- }
- prec = (double)tp / fp_plus_tp;
- // f1
- f1 = 2 * (prec * recall) / (prec + recall);
- return f1;
- }
- }
- int main() {
- ifstream fin("input.in");
- ofstream fout("output.out");
- int k;
- fin >> k;
- vector<vector<int>> matrix(k, vector<int>(0));
- for (int i = 0; i < k; i++) {
- for (int j = 0; j < k; j++) {
- int input_element;
- fin >> input_element;
- matrix[i].push_back(input_element);
- }
- }
- // f micro -------------------------------------------------------------
- // тут считаем c, p, all
- vector<double> c(k), p(k);
- double all = 0.0;
- for (int i = 0; i < k; i++) {
- for (int j = 0; j < k; j++) {
- c[i] += (double)matrix[i][j];
- p[i] += (double)matrix[j][i];
- all += (double)matrix[i][j];
- }
- }
- for (int i = 0; i < k; i++) {
- cout << c[i] << " " << p[i] << endl;
- }
- double f_micro = 0.0;
- for (int i = 0; i < k; i++) {
- double f_mera_test = f1_mera(matrix, i, k);
- f_micro += (c[i] * f_mera_test / all);
- }
- // f macro -------------------------------------------------------------
- double f_macro = 0.0;
- double precW = 0.0;
- int recallW = 0;
- for (int i = 0; i < k; i++) {
- precW += (matrix[i][i] * c[i] / p[i]);
- recallW += matrix[i][i];
- }
- if (recallW == 0) f_macro = 0;
- else {
- precW /= all;
- double recallW_d = (double)precW / (double)all;
- f_macro = 2 * (precW * recallW_d) / (precW + recallW_d);
- }
- cout << f_macro << endl;
- cout << f_micro << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement