RTrees APIが異なるバージョン間で変更されているようです。 RTrees 2.4.1 documentationには、回帰と分類の両方がサポートされていると言われていますが、どうすればそれが可能かわかりません。バイナリ分類にOpenCV RTreesを使用するには?
OpenCV 3.1ではRTreesをバイナリクラシファイアとして使用したいと考えていますが、ドキュメンテーションでは何も言わず、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);
EDIT:OpenCVのソースコードを調べました。 RTrees
DTreesImpl
クラスを拡張するDTReesImplForRTrees
オブジェクトの隠れた実装を作成します。このクラスは_isClassifier
メンバ変数を管理し、train()
に与えられたTrainDataの応答タイプに従ってそれを設定します。
OpenCVのソースコード
_isClassifier = data->getResponseType() == VAR_CATEGORICAL;
でtree.cppから瞬間に、私はこれを返すためにTrainDataオブジェクトを構成する任意の方法が表示されません。おそらくそれは私のトレーニングクラスが整数の代わりに浮動小数点として格納されているからでしょうか?私が正しく覚えていれば、データ型はCV_32Fである必要がありましたが、おそらくどこかでエラーが発生しました。