Random forest gives incorrect prediction.
sandeepganage opened this issue · 1 comments
sandeepganage commented
I have trained a random forest model in opencv. Following is my code
cv::Ptr<cv::ml::RTrees> dtree = cv::ml::RTrees::create();
dtree->setMaxDepth(18);
int numTrees = 50;
dtree->setTermCriteria(TermCriteria(TermCriteria::COUNT, numTrees, 1e-6));
cv::Ptr<cv::ml::TrainData> train_data_set = cv::ml::TrainData::loadFromCSV(
"Train_Data.csv", 1, 0, 1);
dtree->train(train_data_set);
dtree->save("E:/RFModel.xml");
Train_Data.csv contains 28 columns (features/attributes) in integer format. After training I saved the model as RFModel.xml.
Now, I want to perform prediction. I have my features saved in vector data structure.
Following is my code for performing prediction:
// I will extract my attribute values and push in `mRFParams`
vector<int> mRFParams;
/*
Feature extraction and push in mRFParams vector happens here
*/
// Load the model
cv::Ptr<cv::ml::RTrees> model = cv::ml::RTrees::load("E:/RFModel.xml");
auto numParams = mRFParams.size();
cv::Mat RFParamMat(1, numParams, CV_32FC1);
memcpy(RFParamMat.data, &mRFParams, numParams);
cv::Mat predict_labels;
auto prediction = model->predict(RFParamMat);
std::cout<<"Prediction : ", prediction);
This gives me totally incorrect output. Am I correctly calling prediction? Or am I doing something totally wrong?
Thanks in advance
sandeepganage commented
Correct Solution :
cv::Mat RFParamMat=cv::Mat(mRFParams);
auto prediction = model->predict(RFParamMat);
Also, mRFParams should be a float vector