Frage zu java.weka.core.Instances

HPL

Aktives Mitglied
Die folgende Frage ist sehr spezifisch und richtet sich lediglich an diejenigen, die Erfahrung mit Weka haben, ich hoffe, es ist nicht arg schlimm, wenn ich so spezifische Fragen stelle; ich beabsichtige nämlich, in meinen JAVA-Code die weka-API zu verwenden.

Dabei habe ich ein Problem mit weka.core.Instances:

Instances

Ich will ein Instances-Set erzeugen, aber ich weiß nicht wie (siehe Kommentare in meinem Code)...

Java:
//data ist eine HashMap<String, Double> mit attributen als Schluesseln und Instanzen als Werte. 
	   String[] dat = new String[data.keySet().size()];
        for(int q=0;q<data.keySet().size();q++) {dat[q] = data.keySet().toArray()[q].toString();}
        Arrays.sort(dat);


//for(int r=0;r<dat.length;r++){data.get(dat[r])}, so koennte ich jede Instanz ausgeben lassen. 
//Was ich will, ist aber, dass alle Instanzen in ein Instances-Set bekomme:         

        Instances tofilter = new Instances(???);
 
        String[] options = new String[2];
        options[0] = "-T";                                       
        options[1] = "-I";                                       
        StringToWordVector stwv = new StringToWordVector();       //instance of filter
        stwv.setOptions(options);                                
        stwv.setInputFormat(tofilter);                           
//informiere den filter ueber dataset nach option-setting
        Instances newdata = Filter.useFilter(tofilter, stwv);

Hat jemand einen Tipp?
 
was immer Instances sind, und ich glaube jetzt wird sich auch keiner mehr mit Fachwissen melden,
dem Link nach kann nur aus anderem Instances-Objekt kopiert (fällt aus) oder aus einem Reader gelesen werden,

letzeres ist für dich vielleicht zu schaffen falls du Kenntnisse hast wie etwa eine Text-Datei mit abgelegten Strukturen ausschaut,
erstelle aus deinen Daten selber vorher eine Datei oder schreibe innerhalb des Speichers alles in einen String/ StringBuilder und verwende StringReader
 
Man sollte wissen, dass weka schon ein paar Jahre alt ist.

Damals, lang lang ist es her, waren Collections und Generics entweder noch in der Mache oder noch nicht so verbreitet. Deshalb haben die Weka macher, da das ein oder andere selbst machen müssen, was dann eine für heutige Verhältnisse etwas eigene Api zur Folge hat. Es gibt z.B Instance und Instances. Das s bei letzterem steht wohl für "Set".

Was Slater vielleicht übersehen hat, ist, dass es noch einen Konstruktor gibt.

Und zwar diesen hier
Instances

Dieser nimmt einen FastVector attInfo entgegen. Und:
Creates an empty set of instances

Eine Instance sollte eigentlich problemlos erzeugt werden können um sie dann Instances per add hinzuzufügen.

Anbei noch zwei Interessante links zum sourcecode.

https://svn.scms.waikato.ac.nz/svn/weka/trunk/weka/src/main/java/weka/core/FastVector.java

FastVector erbt von ArrayList
FastVector is Deprecated => Simple extension of ArrayList. Exists for legacy reasons.

https://svn.scms.waikato.ac.nz/svn/weka/trunk/weka/src/main/java/weka/core/Instances.java

Hier begnügt sich der Konstruktor mit einer ArrayList.

Der Inhalt wird dann mit
m_Instances = new ArrayList<Instance>(capacity);
initialisiert.

Interessant ist auch der Konstruktor

public Instances(Instances dataset, int capacity)

Hier werden nicht wie vermutet die Instance-Objekte aus dataset übernommen, sondern lediglich die "Struktur" der Daten, wie sie beim anderen Konstruktor mit attInfo beschrieben wird.
 
übersehen habe ich ihn nicht, nur nahm ich an das HPL den auch kannte
und hielt ihn für nicht zielführend in der aktuellen Aufgabe, ein gefülltest Dingsbums zu erhalten,

aber wenn die Alternative Erstellung einer Textdarstellung lautet,
dann klingt dein Weg, leeres Set + Dingsbums2 zusammenbauen + add intelligenter,
richtig, das habe ich übersehen 😉
 

Zurück
Oben