RTrees API似乎在不同版本中發生了變化。 RTrees 2.4.1 documentation表示它支持迴歸和分類,但我不知道如何做到這一點。如何使用OpenCV RTrees進行二進制分類?
我想使用RTrees作爲OpenCV 3.1中的二進制分類器,儘管文檔沒有提及它,RTrees :: isClassifier()返回false。
m_pTrees->setMaxDepth(20);
m_pTrees->setMinSampleCount(10);
cv::TermCriteria criteria(cv::TermCriteria::EPS, 0, 0);
m_pTrees->setTermCriteria(criteria);
m_pTrees->setCalculateVarImportance(false);
m_pTrees->setRegressionAccuracy(0);
// I assumed setting categories makes it a classifier.
m_pTrees->setMaxCategories(2);
// Always returns a float (that looks like the average of votes).
// I expected a single 0 or 1 (since max categories is 2).
m_pTrees->predict(sample);
編輯:我已經做了一些更多的工作,並看着OpenCV的源代碼。 RTrees
創建了一個隱藏實現DTReesImplForRTrees
對象,它擴展了DTreesImpl
類。該班級管理_isClassifier
成員變量,並根據給定的train()
的TrainData響應類型進行設置。
從tree.cpp在OpenCV的源代碼
_isClassifier = data->getResponseType() == VAR_CATEGORICAL;
目前,我沒有看到配置TrainData對象返回此的任何方法。也許這是因爲我的訓練課程是作爲花車而不是整數存儲的?如果我沒有記錯,數據類型必須是CV_32F,但也許我在某處出錯了。