Weka печать редкого файла arff - PullRequest
3 голосов
/ 23 марта 2012

Я пробовал редкое представление файла arff, как показано здесь .В моей программе я могу напечатать метку класса "B", но по какой-то причине она не печатает "A".

    attVals = new FastVector();
    attVals.addElement("A");
    attVals.addElement("B");
    atts.addElement(new Attribute("class", attVals));

    vals[index] = attVals.indexOf("A");

Вывод для программы похож на -

 {0 6,2 8}      ---  I should get {0 6,2 8,3 A}

Но когда я делаю

vals[index] = attVals.indexOf("B");

, я получаю правильный вывод -

 {0 6,2 8,3 B}

По какой-то причине он не берет индекс 0. Может кто-нибудь сказать мне, почему это происходит?

1 Ответ

1 голос
/ 30 мая 2012

Это очень популярная проблема.Формат Sparse по определению не хранит 0 значений.

Weka Страница формата ARFF четко говорит, что:

Предупреждение: существует известная проблема сохранения объектов SparseInstanceиз наборов данных, которые имеют строковые атрибуты.В Weka строковые и номинальные значения данных хранятся в виде чисел;эти числа действуют как индексы в массиве возможных значений атрибута (это очень эффективно).Однако первому строковому значению присваивается индекс 0: это означает, что внутренне это значение сохраняется как 0. При записи SparseInstance строковые экземпляры с внутренним значением 0 не выводятся, поэтому их строковое значение теряется (и когдафайл arff читается снова, значение по умолчанию 0 - это индекс другого строкового значения, поэтому значение атрибута меняется).Чтобы обойти эту проблему, добавьте фиктивное строковое значение с индексом 0, которое никогда не используется всякий раз, когда вы объявляете строковые атрибуты, которые, вероятно, будут использоваться в объектах SparseInstance и сохраняются как файлы Sparse ARFF.

У вас естьпоставить фиктивный атрибут на первое место.Просто измените свой код на:

attVals = new FastVector();
attVals.addElement("dummy");
attVals.addElement("A");
attVals.addElement("B");

Дайте мне знать, если вам нужна дополнительная помощь.

...