Почему weka вычисляет неправильную числовую функцию stringToWordVector на WEKA?

Я хочу вычислить stringToWordVector моего набора данных в приложении WEKA. Я обновляю параметр wordsToKeep на 50. Но он вычисляет 78 слов. Я хочу 50 слов, но он вычисляет 78 слов. Как исправить расчет?

Мой набор данных: http://www.dt.fee.unicamp.br/~tiago/smsspamcollection – ссылка 1


person Ozturk    schedule 25.12.2015    source источник
comment
пожалуйста, включите код, который вы используете, иначе трудно помочь   -  person lejlot    schedule 25.12.2015
comment
нет кода. WEKA — это приложение для интеллектуального анализа данных. weka.sourceforge.net/doc.dev/weka/ фильтры/неконтролируемые/   -  person Ozturk    schedule 25.12.2015
comment
Нет, WEKA — это библиотека, которую можно использовать как из кода, так и через WEKA-GUI. Если вы используете только графический интерфейс, вы должны указать точные действия, которые вы выполняете до возникновения ошибки, чтобы мы могли легко ее воспроизвести.   -  person lejlot    schedule 25.12.2015
comment
Я получаю вкладку предварительной обработки и загружаю файл своего набора данных в формате .arff. После этого я выбираю фильтр и выбираю StringToWordVector. Функция настроена, и я нажимаю сырое. Откроется редактор StringToWordVector. Выбор wordToKeep по умолчанию 1000. Я установил его 50. И я нажимаю кнопку «Применить». Панель атрибутов имеет 78 атрибутов. Но я поставил 50. Почему 78 атт?   -  person Ozturk    schedule 25.12.2015


Ответы (1)


Параметр -W ограничивает количество слов, сохраняемых для каждого класса, поэтому для 2-х классов параметр -W 50 дает вам ограничение в 100 слов.

из источника:

public String wordsToKeepTipText() {
    return "The number of words (per class if there is a class attribute "+
    "assigned) to attempt to keep.";
  }

Кроме того, исходя из источника, это не является строгим ограничением и влияет только на то, где следует обрезать отсортированный список вхождений, это можно изменить

// sort the array
sortArray(array);
if (array.length < m_WordsToKeep) {
// if there aren't enough words, set the threshold to
// minFreq
prune[z] = m_minTermFreq;
  } else {
// otherwise set it to be at least minFreq
prune[z] = Math.max(m_minTermFreq, 
    array[array.length - m_WordsToKeep]);
  }
person lejlot    schedule 25.12.2015