Подсказка от здесь ! Я использую библиотеку классификаторов weka из Ruby через RJB.
Я хочу иметь возможность создать классификатор из файла .arff и выполнить 10-кратную перекрестную проверку с ним, чтобы получить матрицу путаницы, как описано в вики Weka .
Ниже приведен необходимый код.
# 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 выше: это должно работать.
Но ...
Fail: unknown method name `crossValidateModel' (RuntimeError)
Что из того, что я понимаю, обычно означает, что рассматриваемый метод не был предоставлен с правильными аргументами, но я не могу понять, как это было бы.
Вывод valuation.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 за отзыв:)