2011-11-07 3 views
0

here에서 힌트를 얻으십시오! Ruby에서 RJB를 통해 weka의 분류 프로그램 라이브러리를 활용하고 있습니다.weika가 Ruby에서 분류 자의 유효성을 검사하는 방법

.arc 파일에서 분류자를 생성하고 십진 교차 유효성 검사를 실행하여 설명 된대로 혼성 행렬을 만들 수 있기를 원합니다. in the Weka wiki.

아래 필수 코드가 있습니다.

# 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) 

어느 제가 일반적으로 이해하는 것은 문제의 방법은 올바른 인수와 함께 제공되지 않은,하지만이 경우 것이 얼마나 볼 수 있다는 것을 의미에서.

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;])

이 포함되어 있습니다.

누구든지 내가해야 할 일을 알고 있습니까?


편집 : 나는 여기에 제기으로 문제를 해결할 수 아니었지만, 그것은 내가 here을 설명 JRuby를 넘어서 시작하여 원하는 것을 달성 할 수 있었던 것으로 나타났다. 덕분에 팁 :

+0

"분류 자"의 클래스를 인쇄 할 수 있습니까? print classifier.getClass()와 같습니다. 자바에 대한 과부하가 예상대로 작동하지 않는 것 같습니다. 답장을 보내 주셔서 감사합니다. –

+0

'p classifier.getClass() # => # ' 그 도움이 되나요? – Nat

+1

RJB를 사용해야하는 이유가 있는지 모르겠지만 JRuby의 Weka를 사용하여 큰 효과를 얻었습니다. – michaeltwofish

답변

1

대신 상기 R1b :: 수입 ('java.lang.Integer의')를 사용하는 michaeltwofish합니다. 새가 (10) 은 10

당신은 방법 crossValidateModel를 호출 일반 사용하려고 평가 클래스에서. 어떤 과부하가 있습니다. 아래를보십시오. 세 번째 매개 변수는 int입니다. 당신은 java.lang.Integer를 사용하고 있습니다. Java int와 Integer는 같은 것이 아닙니다. 관심이 있다면 자바에서 기본 유형과 래퍼 유형을 찾으십시오. 일반적으로 자바는 int와 Integer 사이에서 java 5부터 바꿀 수 있습니다.하지만 Rjb에서 호출하고 있습니다. Java Integer가 Ruby 목적을 위해 객체에 싸여 있으며 혼란 스럽습니다.

weka javadocs에서.

crossValidateModel(Classifier, Instances, int) 

는 인스턴스의 집합의 분류에 대한 (클래스 명목 경우 층화) 교차 유효성 검사를 수행합니다.

crossValidateModel(String, Instances, int, String[]) 

인스턴스 세트의 분류 기준에 대해 (클래스가 공칭 인 경우 계층화 된) 교차 유효성 검사를 수행합니다.

+0

그게 도움이되지 않는 것 같아요, 아니면 뭔가 잘못 됐을 수도 있습니다. 어쩌면 JRuby를 [here] (http://rubyforscientificresearch.blogspot.com/2009/08/accessing-weka-from-jruby.html)와 같이 사용해야합니다. – Nat

관련 문제