2011-09-30 16 views
17

क्या किसी के पास 2.3.1 एपीआई मैट के साथ यादृच्छिक वन का उपयोग करके कुछ उदाहरण है और सीवीएमट नहीं है?ओपनसीवी - यादृच्छिक वन उदाहरण

असल में मेरे पास एक मैट्रिक्स मैट डेटा है जिसमें 16x16x3 तत्वों के साथ 1000 पंक्तियां होती हैं और मैट्रिक्स मैट एक 1000x1 मैट्रिक्स का जवाब देता है जिसमें प्रत्येक पंक्ति का कौन सा वर्ग होता है। मैं इस पर यादृच्छिक वन एल्गोरिदम चलाने के लिए चाहता हूँ।

+1

http://breckon.eu/toby/teaching/ml/examples/c++/opticaldigits_ex/randomforest.cpp –

उत्तर

0

आपको पहले से ही सही प्रारूप में डेटा मिल गया है; जो कुछ भी बचा है वह एक सीवीआरटीआर ऑब्जेक्ट को चालू करना और अपनी भविष्यवाणी करना है।

रैंडम पेड़ v2.3 के लिए प्रलेखन here पाया जा सकता है। आप CvStatModel::train() दस्तावेज़ीकरण को भी देखना चाहेंगे, जिसमें वास्तव में CvRTree::train के लिए अधिकांश पैरामीटर का विवरण है। टॉम ने टिप्पणियों में एक अच्छा पूर्ण उदाहरण का संदर्भ दिया जिसका आपको उपयोग करना चाहिए।

आपके डेटा के साथ, आपको अपने प्रत्येक विशेषता के प्रकार को निर्दिष्ट करने के लिए एक मैट की आवश्यकता होगी। इस मैट में प्रत्येक इनपुट विशेषता के लिए एक पंक्ति है, और आउटपुट प्रकार के लिए एक अतिरिक्त पंक्ति (इसलिए आपके मामले में 16x16x3 + 1 पंक्तियां)।

वैकल्पिक रूप से, आप पेड़ की संख्या, अधिकतम गहराई इत्यादि जैसे पैरामीटर निर्दिष्ट करने के लिए एक सीवीआरटीपीएम्स ऑब्जेक्ट का उपयोग कर सकते हैं। मैं नीचे दिए गए उदाहरण में डिफ़ॉल्ट का उपयोग करता हूं।

यदि आप चाहें, तो आप valIdx और sampleIdx मैट्स में पास कर सकते हैं जो प्रशिक्षण के लिए उपयोग करने के लिए क्रमशः कौन सी विशेषताओं और डेटा पंक्तियों को निर्दिष्ट करते हैं। यह अलग-अलग मैट में लाने के लिए जिमनास्टिक के समूह के बिना चयन प्रशिक्षण/सत्यापन डेटा के लिए उपयोगी हो सकता है।

यहां एक त्वरित उदाहरण है:

#define ATTRIBUTES_PER_SAMPLE (16*16*3) 
// Assumes training data (1000, 16x16x3) are in training_data 
// Assumes training classifications (1000, 1) are in training_classifications 

// All inputs are numerical. You can change this to reflect your data 
Mat var_type = Mat(ATTRIBUTES_PER_SAMPLE + 1, 1, CV_8U); 
var_type.setTo(Scalar(CV_VAR_NUMERICAL)); // all inputs are numerical 

// Output is a category; this is classification, not regression 
var_type.at<uchar>(ATTRIBUTES_PER_SAMPLE, 0) = CV_VAR_CATEGORICAL; 

// Train the classifier 
CvRTrees* rtree = new CvRTrees; 
rtree->train(training_data, CV_ROW_SAMPLE, training_classifications, 
      Mat(), Mat(), var_type);