void RandomTree::findProximity(DataFrame & data, std::vector<unsigned int> & proximity) { std::vector<unsigned int> proxVec; unsigned int dSize = data.getNumDataVectors(); proxVec.resize(dSize); //Find out which node each vector is classified as for(unsigned int i = 0; i < dSize; i++) { std::string resultClass; unsigned int nodeId = classifyDataVector(data.getDataVector(i), resultClass); proxVec[i] = nodeId; } for(unsigned int j = 0; j < dSize; j++) { unsigned int tempId = proxVec[j]; for(unsigned int k = j; k < dSize;j++) { if(proxVec[k] == tempId) { proximity[j * dSize + k] += 1; } } } }
double RandomTree::computeErrorRate(DataFrame & data) { unsigned int correct = 0; unsigned int incorrect = 0; std::string result; for(unsigned int i = 0; i < _oobSet.size(); i++) { classifyDataVector(data.getDataVector(_oobSet[i]), result); if(result == data.getTrainingLabel(_oobSet[i])) { correct++; } else { incorrect++; } } return (double)incorrect / (double)(incorrect + correct); }