Я пытаюсь сделать текстовую классификацию наивных заливов weka libarary в моем java-коде, но я думаю, что результат классификации неверен, я не знаю, в чем проблема. Я использую файл arff для ввода.Простая классификация текста с использованием наивных заливов (weka) в java
это моя подготовка данных:
@relation hamspam
@attribute text string
@attribute class {spam,ham}
@data
'good',ham
'good',ham
'very good',ham
'bad',spam
'very bad',spam
'very bad, very bad',spam
'good good bad',ham
это мой testing_data:
@relation test
@attribute text string
@attribute class {spam,ham}
@data
'good bad very bad',?
'good bad very bad',?
'good',?
'good very good',?
'bad',?
'very good',?
'very very good',?
и это мой код:
public static void NaiveBayes(String training_file, String testing_file) throws FileNotFoundException, IOException, Exception{
//filter
StringToWordVector filter = new StringToWordVector();
Classifier naive = new NaiveBayes();
//training data
Instances train = new Instances(new BufferedReader(new FileReader(training_file)));
int lastIndex = train.numAttributes() - 1;
train.setClassIndex(lastIndex);
filter.setInputFormat(train);
train = Filter.useFilter(train, filter);
//testing data
Instances test = new Instances(new BufferedReader(new FileReader(testing_file)));
test.setClassIndex(lastIndex);
filter.setInputFormat(test);
Instances test2 = Filter.useFilter(test, filter);
naive.buildClassifier(train);
for(int i=0; i<test2.numInstances(); i++) {
System.out.println(test.instance(i));
double index = naive.classifyInstance(test2.instance(i));
String className = train.attribute(0).value((int)index);
System.out.println(className);
}
}
Результат показывает, что данные, которые должны были классифицированы в классный спам, классифицированный в классную ветчину, и данные, которые должны были быть классифицированы в cl осла, классифицированные в классный спам. в чем проблема ?, помогите мне пожалуйста.