clojureからwekaを使用しようとすると、clojureのjava相互運用機能を使用して、このハウツーガイドをwekawikiからclojureに変換しようとしています。
これは、clojureリフレクションメカニズムが呼び出す適切なメソッドを見つけられないように見える1つのケースを除いて、これまでのところうまく機能しています-私は次のようにしています:
(def c-model (doto (NaiveBayes.) (.buildClassifier is-training-set)))
後でこれはクラスの.evaluateModelメソッドによって呼び出されます:Evaluation
(.evaluateModel e-test c-model is-testing-set)
ここe-testで、はタイプであり、 APIドキュメントweka.classifiers.Evaluationによると、メソッドはタイプの2つのパラメーターを取ります。ClassifierInstances
私がclojureから得たのは、IllegalArgumentException No matching method found: evaluateModel for class weka.classifiers.Evaluation clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:53)-これc-modelは実際にはタイプであるためだと思いますが、それは-であるNaiveBayes必要があります。Classifierinstance?
私は無駄にキャストしcastてみましたが、私が理解していることから、これは実際のclojureのキャストというよりもタイプアサーションです(もちろん問題なく通過します)。Java相互運用メソッド呼び出しでキャストするタイプをclojureに明示的に指示する別の方法はありますか?(上記でリンクした元のガイドでも、からNaiveBayesへの明示的なキャストが使用されていることに注意してくださいClassifier)
ここに完全なコード:/http://paste.lisp.org/display/129250