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つのパラメーターを取ります。Classifier
Instances
私がclojureから得たのは、IllegalArgumentException No matching method found: evaluateModel for class weka.classifiers.Evaluation clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:53)
-これc-model
は実際にはタイプであるためだと思いますが、それは-であるNaiveBayes
必要があります。Classifier
instance?
私は無駄にキャストしcast
てみましたが、私が理解していることから、これは実際のclojureのキャストというよりもタイプアサーションです(もちろん問題なく通過します)。Java相互運用メソッド呼び出しでキャストするタイプをclojureに明示的に指示する別の方法はありますか?(上記でリンクした元のガイドでも、からNaiveBayes
への明示的なキャストが使用されていることに注意してくださいClassifier
)
ここに完全なコード:/http://paste.lisp.org/display/129250