Java, Weka: как предсказать числовой атрибут?

Я пытался использовать классификатор NaiveBayesUpdateable от Weka. Мои данные содержат как номинальные, так и числовые атрибуты:

  @relation cars
  @attribute country {FR, UK, ...}
  @attribute city {London, Paris, ...}
  @attribute car_make {Toyota, BMW, ...}
  @attribute price numeric   %% car price 
  @attribute sales numeric   %% number of cars sold

Мне нужно предсказать количество продаж (числовое!) на основе других атрибутов.

Я понимаю, что не могу использовать числовой атрибут для байесовской классификации в Weka. Один из способов состоит в том, чтобы разбить значение числового атрибута на N интервалов длины k и использовать вместо него номинальный атрибут, где n — имя класса, например: @attribute class {1,2,3,...N}.

Но числовой атрибут, который мне нужно предсказать, находится в диапазоне от 0 до 1 000 000. Создание 1 000 000 классов вообще не имеет смысла. Как предсказать числовой атрибут с помощью Weka или какие алгоритмы поискать, если у Weka нет инструментов для этой задачи?


person Anton Ashanin    schedule 25.04.2013    source источник
comment
Возможный дубликат Java, Weka: NaiveBayesUpdateable: не удается обработать числовой класс. Хотя может быть и наоборот, потому что это лучший вопрос.   -  person demongolem    schedule 11.12.2016


Ответы (3)


Вам нужно регрессия, а не классификация. Разница именно в том, что вы описываете/хотите:

  • Классификация имеет отдельные классы/метки, здесь в качестве класса можно использовать любой номинальный атрибут.
  • Регрессия имеет непрерывные метки, классы здесь неуместны.

Большинство методов, основанных на регрессии, можно преобразовать в бинарную классификацию путем определения порога, а класс определяется тем, находится ли прогнозируемое значение выше или ниже этого порога.

Я не знаю всех классификаторов WEKA, предлагающих регрессию, но вы можете начать с этих двух:

Возможно, вам придется использовать фильтр NominalToBinary для преобразования ваших номинальных атрибутов в числовые (двоичные).

person Sentry    schedule 28.04.2013

В наши дни, я считаю, что RandomForest, впервые представленный в Weka 3.7, будет работать именно так, как вы этого хотите. Функции могут быть как номинальными, так и числовыми, а предсказание также может быть числовым.

Недостаток (я бы предположил, что в вашем случае) заключается в том, что это не обновляемый класс, поскольку NaiveBayesUpdateable хорошо работает с большими объемами данных, которые могут не помещаться в памяти сразу.

person demongolem    schedule 11.12.2016
comment
не могли бы вы рассказать мне, как я могу использовать случайный лес для прогнозирования числовых значений? В weka, когда я предоставляю тестовый набор и выбираю числовые значения для прогнозирования, start отключается. - person Abu Shoeb; 15.11.2018
comment
@AbuShoeb С Weka 3.8.3 я этого не вижу. Я создал небольшой набор данных с 3 числовыми функциями и 1 числовым значением прогноза. Я выбираю RandomForest. Старт по-прежнему выделен для меня. Возможно, вы используете дополнительный шаг или используете другую версию Weka? Можете ли вы описать больше? При необходимости мы можем отправить его на chat.stackoverflow.com. - person demongolem; 15.11.2018

вы можете найти использование регрессии в классификаторах weka › функции › линейная регрессия. вот пример создания регрессионной модели в weka https://developer.ibm.com/articles/os-weka1/

person Bilal Dadanlar    schedule 20.05.2013