コード例 #1
0
double fscore(vector<vector<vector<bool> > > sample, Corpus &corpus) {
	int tp = 0,
		fp = 0,
		tn = 0,
		fn = 0;

	for (int a = 0; a < sample.size(); a++) {
		for (int d = 0; d < sample[a].size(); d++) {
			if (corpus.isObscured(a, d)) {
				for (int r = 0; r < sample[a][d].size(); r++) {
					if (a != r) {
						int trueEdge = corpus.getEdge(a, d, r);
						if (sample[a][d][r]) {
							if (trueEdge) {
								tp++;
							} else {
								fp++;
							}
						} else {
							if (trueEdge) {
								fn++;
							} else {
								tn++;
							}
						}
					}
				}
			}
		}
	}

	double precision = (1.0 * tp) / (tp + fp);
	double recall = (1.0 * tp) / (tp + fn);

	cout << "tp: " << tp << ", fp: " << fp << ", tn: " << tn << ", fn: " << fn << "\n";
	cout << "Precision: " << precision << "; Recall: " << recall << "\n";

	return 2 * precision * recall / (precision + recall);
}