Beim Versuchen, weka von clojure zu benutzen, versuche ich this howto guide vom weka Wiki zu konvertieren, um mit den Java-Interopeigenschaften von clojure zu clojure.Wie man explizit in clojure wirft, wenn es mit java verbindet
Das hat bisher gut gearbeitet, außer in einem Fall, in dem der clojure Reflexionsmechanismus nicht aufrufen kann scheinen die richtige Methode zu finden - ich habe:
(def c-model (doto (NaiveBayes.) (.buildClassifier is-training-set)))
diese werden später durch die aufgerufen werden, .evaluateModel
Verfahren der Evaluation
Klasse:
(.evaluateModel e-test c-model is-testing-set)
wo e-test
vom Typ weka.classifiers.Evaluation
und nach their api documentation das Verfahren hat zwei Parameter der Typenobwohlund Instances
Was ich von clojure bekommen ist IllegalArgumentException No matching method found: evaluateModel for class weka.classifiers.Evaluation clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:53)
- Ich denke, dass dies, weil c-model
tatsächlich vom Typ NaiveBayes
, obwohl es auch ein Classifier
sein sollte - was es ist, nach instance?
.
Ich versuchte Casting mit cast
ohne Erfolg, und von dem, was ich verstehe, ist dies eher eine Art Behauptung (und geht ohne Probleme natürlich) als eine echte Besetzung in clojure. Gibt es eine andere Möglichkeit, clojure explizit anzugeben, welche Typen in Java-Interop-Methodenaufrufen umgewandelt werden sollen? (Beachten Sie, dass die ursprüngliche Anleitung, die ich oben auch eine explizite Umwandlung NaiveBayes
-Classifier
verwendet verknüpft)
Voll Code hier: /http://paste.lisp.org/display/129250
Ich fragte mich, was ich mit den varargs machen sollte, aber diese Antwort ist mir nicht gekommen - danke! –