2013-02-04 9 views
11

Ich habe den Code geschrieben, um das Modell zu erstellen und zu speichern. Es funktioniert gut. Mein Verständnis ist Daten, standardmäßig ist in 10 Falten aufgeteilt. Ich möchte, dass Daten beim Erstellen des Modells in zwei Sätze aufgeteilt werden (Training und Tests). Auf der Weka-Benutzeroberfläche kann ich dies tun, indem ich das Optionsfeld "Prozentsatz teilen" verwende. Ich möchte wissen, wie man es durch Code macht. Ich möchte, dass es in zwei Teile aufgeteilt wird, wobei 80% das Training und 20% das Testen sind. Hier ist mein Code.Java Weka: Wie spalte ich den Prozentsatz?

trainingsSet hier ist bereits ausgefüllt Instanzen Objekte. Kann mir jemand dabei helfen?

Vielen Dank im Voraus!

Antwort

19

In der UI-Klasse ClassifierPanel ‚s Methode startClassifier(), fand ich den folgenden Code:

// 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); 

so nach dem Dataset Randomisierung ...

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

... Ich schlage vor, Sie teilen Sie Ihre trainingSet auf die gleiche Weise:

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); 

dann 0 verwendenden Klassifikator mit 80% Ihrer Set-Instanzen zu trainieren:

model.buildClassifier(train); 

UPDATE: Dank @ ChengkunWu Antwort, fügte ich die Randomisierung obigen Schritt.

+1

Getestet und funktioniert wie erwartet. Vielen Dank! – rishi

+0

Die Antwort ist richtig. Aber in diesem Fall ist das Aufteilen in Zug und Testsatz nicht zufällig. Wie kann ich den Datensatz zufällig in Zug- und Test-Test aufteilen? Ich meine ... Nach dem Zufallsprinzip Daten aus dem Datensatz nehmen und den Zug und das Test-Set bilden. – Ronin

6

Sie könnten auch die Aufteilung zufällig wünschen.

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

@Jan Eglinger Dieser kurze aber SEHR wichtige Hinweis sollte der angenommenen Antwort hinzugefügt werden – KidCrippler

Verwandte Themen