Вектор Stringtoword работает некорректно weka

Я использую фильтр строки в вектор, чтобы преобразовать мой arff в векторный формат.

Но это вызывает исключение

weka.core.WekaException: weka.classifiers.bayes.NaiveBayesMultinomialUpdateable: Not enough training instances with class labels (required: 1, provided: 0)!

Я попытался использовать то же самое на weka explorer, и он работал нормально.

Это мой код

  ArffLoader loader = new ArffLoader();
    loader.setFile(new File("valid file"));
    Instances structure = loader.getStructure();
    structure.setClassIndex(0);

    // train NaiveBayes
    NaiveBayesMultinomialUpdateable n = new NaiveBayesMultinomialUpdateable();
    FilteredClassifier f = new FilteredClassifier();
    StringToWordVector s = new StringToWordVector();

    f.setFilter(s);
    f.setClassifier(n);

    f.buildClassifier(structure);
    Instance current;
    while ((current = loader.getNextInstance(structure)) != null)
      n.updateClassifier(current);

    // output generated model
    System.out.println(n);

Я пробовал другой пример, но он все еще не работает

  ArffLoader loader = new ArffLoader();
    loader.setFile(new File("valid file"));

    Instances structure = loader.getStructure();


    // train NaiveBayes
    NaiveBayesMultinomialUpdateable n = new NaiveBayesMultinomialUpdateable();
    FilteredClassifier f = new FilteredClassifier();
    StringToWordVector s = new StringToWordVector();
    s.setInputFormat(structure);
    Instances struct = Filter.useFilter(structure, s);

    struct.setClassIndex(0);
    System.out.println(struct.numAttributes()); // only gives 2 or 1 attributes 




    n.buildClassifier(struct);
    Instance current;
    while ((current = loader.getNextInstance(struct)) != null)
      n.updateClassifier(current);

    // output generated model
    System.out.println(n);

Количество напечатанных атрибутов всегда равно 2 или 1.

Кажется, что строка в вектор слова работает не так, как ожидалось

Исходная папка: https://www.dropbox.com/sh/cma4hbe2r96ul1c/GL2wNdeVUz

Преобразовано в arff: https://www.dropbox.com/s/efle6ci4lb5riq7/test1.arff


person aceminer    schedule 29.03.2014    source источник
comment
Не могли бы вы выложить образец файла arff?   -  person 吴烜_中文编程    schedule 02.04.2014
comment
@FromWhereToWhere Привет, я обновил файл   -  person aceminer    schedule 02.04.2014


Ответы (1)


Согласно вашему arff, класс кажется вторым из двух атрибутов, поэтому проблема может быть здесь:

struct.setClassIndex(0);

пытаться

struct.setClassIndex(1);

ОБНОВЛЕНИЕ: я внес это изменение в первый пример, и он не вызывает исключений и распечатывает:

The independent probability of a class
--------------------------------------
oil spill   40.0
police  989.0

The probability of a word given the class
-----------------------------------------
        oil spill   police  
class   Infinity    Infinity    
person 吴烜_中文编程    schedule 02.04.2014
comment
Это все еще дает мне исключение java.lang.IllegalArgumentException: Invalid class index: 1 - person aceminer; 02.04.2014
comment
@aceminer Пожалуйста, проверьте обновленный ответ. Тестирую с данным test1.arff и Weka 3.6.10 - person 吴烜_中文编程; 03.04.2014
comment
Кажется, что weka 3.7.10 не работает нормально, но weka 3.6.10 работает нормально - person aceminer; 07.04.2014