-1
두 클래스 사이에서 텍스트를 분류하기위한 순진한 베이 분류를 만드는 중입니다. 모든 것이 GUI 탐색기에서 훌륭하게 작동하지만 코드에서 다시 만들려고 할 때 어떤 입력을 분류하려고해도 동일한 출력을 얻습니다.Weka - Classifier가 모든 입력에 대해 동일한 분포를 반환합니다.
코드 내에서 GUI에서 얻은 것과 동일한 평가 메트릭을 얻었지만 (81 % 정확도), 새 인스턴스를 작성하고 분류 할 때마다 어떤 입력에 관계없이 두 클래스 모두 동일한 분배를 얻습니다. 나는 사용한다. 다음은
내 코드입니다 - 그에서의 스칼라하지만, 매우 간단합니다 ://Building the classifier:
val instances = new Instances(new DataSource("/my/dataset.arff").getDataSet)
instances.setClassIndex(3)
val filter = new StringToWordVector
filter.setAttributeIndicesArray((0 to 2).toArray)
val classifier = new FilteredClassifier
classifier.setFilter(new StringToWordVector(1000000))
classifier.setClassifier(new NaiveBayesMultinomial)
classifier.buildClassifier(trainingSet)
//Evaluation (this prints about 80% accuracy)
val eval = new Evaluation(trainingSet)
eval.evaluateModel(classifier, trainingSet)
println(eval.toSummaryString)
//Attempting to use the classifier:
val atts = new util.ArrayList[Attribute]
atts.add(new Attribute("sentence", true))
atts.add(new Attribute("parts_of_speech", true))
atts.add(new Attribute("dependency_graph", true))
atts.add(new Attribute("the_shizzle_clazz", SentenceType.values().map(_.name()).toSeq.asJava))
val unlabeledInstances = new Instances("unlabeled", atts, 1)
unlabeledInstances.setClassIndex(3)
val instance = new DenseInstance(4)
unlabeledInstances.add(instance)
instance.setDataset(unlabeledInstances)
instance.setValue(0, parsed.sentence)
instance.setValue(1, parsed.posTagsStr)
instance.setValue(2, parsed.depsGraphStr)
val distrib = classifier.distributionForInstance(unlabeledInstance.firstInstance())
distrib.foreach(println)
가 아무리 줄 것을 입력 DISTRIB의 출력은 항상 없다 :
0.44556173367704455
0.5544382663229555
모든 아이디어를 내가 내가 잘못 했니? 어떤 도움을 주시면 감사하겠습니다. 그것은 마법의 라인처럼 보이는