vector<vector<double>> kdTree::search(const vector<double>& v, int& k){ priority_queue<vector<double>,vector<vector<double>>,distFinder> kNN(kdTreeRoot->getValue()); if (!kdTreeRoot){ return vector<vector<double>>(); ; } else{ kdTreeRoot->search(v,k,kNN); } vector<vector<double>> nearestPts(kNN.size()); copy(&(kNN.top()), &(kNN.top()) + kNN.size(), &nearestPts[0]); return nearestPts; }
void KNNTest::run() { Scanner scanner("cpp/ml/test/TestKNNInput.txt"); Writer writer("cpp/ml/test/TestKNNOutput.txt"); KNN kNN(3); DatasetClassification dataset("cpp/ml/test/TestKNNData.txt"); CrossValidatorParameter parameter; while (scanner.hasNext()) { parameter.testingDataRatio = scanner.nextDouble(); CrossValidatorClassification validator(&kNN, &dataset, ¶meter); validator.validate(); double testingErr = validator.getTestingError(); writer.println(testingErr); } writer.close(); }