ARFF без одного класса в экземплярах

#java #weka

#java #weka

Вопрос:

Итак, я использовал пример «TextCategorizationTest.java » из этого урока https://weka .wikispaces.com/Text категоризация с помощью WEKA.

У меня есть один каталог с двумя папками: «neg» и «pos». Эти две папки представляют классы, которые должны быть в моем ARRF. Проблема в том, что при попытке создать файл ARFF экземпляры не содержат класс атрибута для «pos», но они содержат для класса атрибута «neg».

Вот мой файл ARFF: http://pastebin.com/6nGWEyMq

Как вы можете видеть, экземпляры «pos» представлены в таком формате: @data {1 1,3 1,24 1,27 1,29 1,37 …} » экземпляры neg» представлены в этом формате: {0 neg,1 1,2 1,3 1,6 1 …}

Что я могу сделать, чтобы исправить этот ARFF? Я бы принял решения как из кода weka, так и из графического интерфейса weka.

Ответ №1:

Ваш файл ARFF в полном порядке, нет необходимости его изменять.

Ваш файл ARFF находится в формате sparse, что означает, что атрибуты со значением 0 будут опущены. Для сценариев, в которых вы ожидаете, что многие атрибуты будут равны 0, например, количество слов, этот формат намного компактнее.

Формат:

 {index value,index value,index value, ...}
 

Но, как я уже сказал, атрибуты со значением 0 будут опущены, поэтому здесь перечислены только индексы для атрибутов, которые не равны 0.

Номинальные атрибуты хранятся с использованием их индекса значений (не путать с индексом атрибута), а определение атрибута класса (первый атрибут с индексом 0) содержит их в порядке {pos,neg} , поэтому «pos» имеет индекс значения 0, а «neg» имеет индекс значения «1». Таким образом, все записи «pos» отсутствуют, потому что «pos» (с индексом 0) является значением по умолчанию.

Первые столбцы некоторых строк ваших данных представлены в разреженном формате (как вы его опубликовали):

 @data
{1 1,3 1,24 1,27 1, ...}
{1 1,4 1,5 1,8 1,17 1,24 1,26 1,29 1, ...}
...
{0 neg,17 1, ...}
 

Это эквивалентно следующему в плотном формате:

 @data
{0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0, ...}
{0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,1, ...}
...
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, ...}
 

Комментарии:

1. Сначала вы сказали, что «pos» имеет индекс 1, после этого вы сказали, что pos имеет индекс 0. Номинальные атрибуты хранятся с использованием их индекса, поэтому «neg» имеет индекс 0, а «pos» имеет индекс «1». Таким образом, все записи «pos» отсутствуют, потому что «pos» (с индексом 0) является значением по умолчанию.

2. Вы правы, я не был сосредоточен, когда писал это и перепутал. Я это исправил. pos = 0 и neg = 1. Я также только что понял, что использовал контекстно-зависимый «индекс». Надеюсь, я тоже мог бы это прояснить.