ヒントはここから!Ruby から RJB 経由で weka の分類子ライブラリを利用しています。
Weka wiki で説明されているように、.arff ファイルから分類子を作成し、それを使用して 10 倍の交差検証を実行して混同行列を生成できるようにしたいと考えています。
以下は、関連する重要なコードです。
# creating the classifier
Rjb::load("./weka.jar", jvmargs=["-Xmx2000M"])
classifier = Rjb::import("weka.classifiers.bayes.NaiveBayes").new
# importing the data
data_src = Rjb::import("java.io.FileReader").new("./the_data.arff")
data = Rjb::import("weka.core.Instances").new(data_src)
evaluation = Rjb::import("weka.classifiers.Evaluation").new(data)
folds = Rjb::import('java.lang.Integer').new(10)
rand = Rjb::import("java.util.Random").new(1)
evaluation.crossValidateModel(classifier,
data,
folds,
rand )
print evaluation.toMatrixString()
上記のweka wikiリンクからわかることから、これは機能するはずです。しかし...
Fail: unknown method name `crossValidateModel' (RuntimeError)
私が理解していることは、通常、問題のメソッドに正しい引数が提供されていないことを意味しますが、これがどのように当てはまるかわかりません。
Evaluation.java_methodsの出力には以下が含まれますcrossValidateModel([Ljava.lang.String;Lweka.core.Instances;I[Ljava.lang.String;Ljava.util.Random;, Lweka.classifiers.Classifier;Lweka.core.Instances;ILjava.util.Random;[Ljava.lang.Object;])
どのように解釈すればよいかわかりません。
私が何をする必要があるか知っている人はいますか?
編集:ここで提起された問題を解決することはできませんでしたが、ここで説明されているようにJRubyでやり直すことで、私が望んでいたことを達成できたことがわかりました。ヒントをくれた michaeltwofish に感謝します :)