2013-02-04 16 views
11

मैंने मॉडल बनाने और इसे सहेजने के लिए कोड लिखा है। यह बढ़िया काम करता है। मेरी समझ डेटा है, डिफ़ॉल्ट रूप से, 10 गुना में विभाजित है। मैं मॉडल बनाते समय डेटा को दो सेट (प्रशिक्षण और परीक्षण) में विभाजित करना चाहता हूं। वीका यूआई पर, मैं इसे "प्रतिशत विभाजन" रेडियो बटन का उपयोग करके कर सकता हूं। मैं जानना चाहता हूं कि कोड के माध्यम से इसे कैसे किया जाए। मैं इसे दो हिस्सों में विभाजित करना चाहता हूं 80% प्रशिक्षण और 20% परीक्षण है। मेरा कोड यहाँ है।जावा वीका: विभाजित प्रतिशत कैसे निर्दिष्ट करें?

 FilteredClassifier model = new FilteredClassifier(); 
     model.setFilter(new StringToWordVector()); 
     model.setClassifier(new NaiveBayesMultinomial()); 
     try { 
      model.buildClassifier(trainingSet); 
     } catch (Exception e1) { // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 

     ObjectOutputStream oos = new ObjectOutputStream(
       new FileOutputStream(
         "/Users/me/models/MyModel.model")); 
     oos.writeObject(model); 
     oos.flush(); 
     oos.close(); 

प्रशिक्षणसेट यहां पहले से ही आबादी वाले ऑब्जेक्ट ऑब्जेक्ट है। क्या कोई इस में मेरी मदद कर सकता है?

अग्रिम धन्यवाद!

उत्तर

19

यूआई वर्ग ClassifierPanel की विधि startClassifier() में, मैं निम्नलिखित कोड मिला:

// Percent split 

int trainSize = (int) Math.round(inst.numInstances() * percent 
    /100); 
int testSize = inst.numInstances() - trainSize; 
Instances train = new Instances(inst, 0, trainSize); 
Instances test = new Instances(inst, trainSize, testSize); 

तो अपने डाटासेट randomizing के बाद ...

trainingSet.randomize(new java.util.Random(0)); 

... मैं सुझाव है कि आप अपने विभाजित trainingSet उसी तरह:

int trainSize = (int) Math.round(trainingSet.numInstances() * 0.8); 
int testSize = trainingSet.numInstances() - trainSize; 
Instances train = new Instances(trainingSet, 0, trainSize); 
Instances test = new Instances(trainingSet, trainSize, testSize); 

फिर 0 का उपयोग करेंअपने सेट उदाहरणों में से 80% के साथ वर्गीकारक प्रशिक्षित करने के लिए:

model.buildClassifier(train); 

अद्यतन: @ ChengkunWu के जवाब देने के लिए धन्यवाद, मैं randomizing कदम ऊपर गयी।

+1

परीक्षण और अपेक्षित के रूप में काम किया। धन्यवाद! – rishi

+0

उत्तर सही है। लेकिन उस स्थिति में, ट्रेन और परीक्षण सेट में विभाजन यादृच्छिक नहीं है। मैं डेटासेट को ट्रेन और परीक्षण परीक्षण में यादृच्छिक रूप से कैसे विभाजित कर सकता हूं? मेरा मतलब है ... यादृच्छिक रूप से डेटासेट से डेटा लेते हैं और ट्रेन और परीक्षण सेट बनाते हैं। – Ronin

6

आप भी विभाजन को यादृच्छिक बनाना चाहते हैं।

data.randomize(new java.util.Random(0)); 
+3

@ जेन एग्लिंगर यह छोटा लेकिन स्वीकार्य उत्तर में बहुत महत्वपूर्ण नोट जोड़ा जाना चाहिए – KidCrippler

संबंधित मुद्दे