Al tratar de usar weka de clojure, intento convertir this howto guide de la wiki de weka a clojure usando las funciones de interoperabilidad de java de clojure.Cómo lanzar explícitamente en clojure cuando interactúas con java
Esto ha funcionado bien hasta ahora, excepto en un caso, en que parece que no puede el mecanismo clojure reflexión para encontrar el método adecuado para invocar - Tengo:
(def c-model (doto (NaiveBayes.) (.buildClassifier is-training-set)))
Más tarde esto será invocado por el .evaluateModel
método de la clase Evaluation
:
(.evaluateModel e-test c-model is-testing-set)
donde e-test
es de tipo weka.classifiers.Evaluation
y, según their api documentation el método toma dos parámetros de tipos Classifier
y Instances
Lo que recibo de clojure aunque es IllegalArgumentException No matching method found: evaluateModel for class weka.classifiers.Evaluation clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:53)
- Supongo que esto se debe c-model
es en realidad el tipo de NaiveBayes
, aunque también debe ser un Classifier
- la cual es, según instance?
.
He intentado fundir con cast
en vano, y por lo que entiendo esto es más una afirmación de tipo (y pasa sin problemas, por supuesto) que un molde real en clojure. ¿Hay alguna otra manera de decirle explícitamente a Clojure a qué tipos enviar en las llamadas al método de interoperabilidad java? (Tenga en cuenta que la guía original, he vinculado anteriormente también utiliza una conversión explícita NaiveBayes
-Classifier
)
código completo aquí: /http://paste.lisp.org/display/129250
me preguntaba qué hacer con los varargs por un segundo, pero no encontré esa respuesta, ¡gracias! –