2014-02-20 3 views
0

나는 Nak (Scala 용 기계 학습 패키지)를 시험 중이다. 그러나 NaiveBayes 또는 Maximum Entropy와 같은 기본 방법에는 쉽게 액세스 할 수 없습니다. 수동으로하고 싶지만 NaiveBayes 클래스의 인스턴스를 만들지 못했습니다.개체 내부의 클래스를 새로 만드는 방법은 무엇입니까?

object NaiveBayes { 
    class Trainer[L,T](wordSmoothing: Double=0.05, classSmoothing: Double= 0.01) extends Classifier.Trainer[L,Counter[T,Double]] { 
    type MyClassifier = NaiveBayes[L,T] 

    override def train(data: Iterable[Example[L,Counter[T,Double]]]) = { 
     new NaiveBayes(data,wordSmoothing,classSmoothing) 
    } 
    } 
} 

나는 Trainer 클래스에 액세스 할 수 없습니다 ... 그리고 그 이유를 모르는 그들의 NaiveBayes 코드의 일부는 다음과 같습니다. 전체 코드는 여기에서 찾을 수 있습니다 :

Trainer train = new Trainer() 또는 NaiveBayes.Trainer train = new ...

그냥 작동하지 않습니다 ...

답변

2

Trainer이 매개 변수를 입력합니다 :

https://github.com/scalanlp/nak/blob/master/src/main/scala/nak/classify/NaiveBayes.scala

내가 좋아하는 코드를 작성하려고 따라서 유추 할 수없는 경우 지정해야합니다.

val trainer = new NaiveBayes.Trainer[???,???]() 

물음표가 LT에 대한 형식 인수로 대체해야합니다 예를 들면 다음과 같습니다. Classifier.scala의 주석에 따르면 L이 레이블 유형이어야하며 T이 관측 유형이어야합니다.

+0

저에게 거의 천문학적입니다. 둘 다'문자열'이어야하지 않아야합니까? –

+0

정말 사용 사례에 달려 있습니다. 맞습니까? 예를 들어, 파이썬에서 레이블이 문자열 인 shift-reduce 파서의 오라클을 배우기 위해 분류자를 구현 한 것을 기억하지만, 알려진 유한의 연산 집합 중 하나를 표현 했으므로 문자열이 아닌 다른 형식을 사용하는 것이 좋습니다. 내 레이블 때문에 정적 유형 지정의 이점을 누릴 수 있습니다. 원하는 모든 것이 문자열 인 많은 상황이있을 것이라고 확신하지만'[String, String]'을 쓰거나 도우미 함수를 작성하는 것이 그리 어렵지 않습니다. –

관련 문제