Exemple #1
0
void K_fold_cross_validation(int k, DataManager &posData, DataManager &negData)
{
	time_t start;
	int Tp = 0, Fp = 0, Fn = 0, Tn = 0;
	vector<Mat> * posIIGs = posData.getIIGMats();
	vector<Mat> * negIIGs = negData.getIIGMats();
	vector<vector<Mat>> subPosIIGs(k);
	vector<vector<Mat>> subNegIIGs(k);
	for (int i = 0; i < posIIGs->size(); i++)
	{
		subPosIIGs[i % k].push_back((*posIIGs)[i]);
	}

	for (int i = 0; i < negIIGs->size(); i++)
	{
		subNegIIGs[i % k].push_back((*negIIGs)[i]);
	}

	posIIGs->clear();
	negIIGs->clear();
	for (int l = 0; l < k; l++)
	{
		std::cerr << "K = " << l << std::endl;
		std::cerr << "Training ... " << std::endl;
		start = clock();
		vector<Mat> trainPos;
		vector<Mat> trainNeg;
		for (int j = 0; j < k; j++)
		{
			if (l != j)
			{
				trainPos.insert(trainPos.end(), subPosIIGs[j].begin(), subPosIIGs[j].end());
				trainNeg.insert(trainNeg.end(), subNegIIGs[j].begin(), subNegIIGs[j].end());
			}
		}
		TrainingManager tm(trainPos, trainNeg);
		cerr << (clock() - start) / 1000.0 << "s" << endl;
		start = clock();
		//
		ADA<float> ada;
		std::cerr << "Boosting ... " << std::endl;
		ClassificationResults weights = ada.ada_boost(tm.getAllfeature()->size(), *(tm.getRM()), *(tm.getLabels()), 100);
		std::cerr << "Done " << std::endl;
		cerr << (clock() - start) / 1000.0 << "s" << endl;
		start = clock();
		std::cerr << "Construct model ... " << std::endl;
		saveStrongClassfier(*(tm.getAllfeature()), weights);
		cerr << (clock() - start) / 1000.0 << "s" << endl;
		start = clock();
		std::cerr << "Testing ... " << std::endl;
		//allfeature.clear();
		testing(subPosIIGs[l], subNegIIGs[l], Tp, Fp, Fn, Tn);
		cerr << (clock() - start) / 1000.0 << "s" << endl;
		cerr << endl;

	}
	cerr << "Final acc:" << (float)(Tp + Tn) / (Tp + Fn + Fp + Tn) << endl;
	cerr << "Final tpr:" << (float)Tp / (Tp + Fn) << endl;
	cerr << "Final fpr:" << (float)Fp / (Tn + Fp) << endl;
	cerr << endl;
}