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 источник


Ответы (2)


Это вообще не проблема классификации. Для этого следует использовать регрессионную модель, например LinearRegression.

person Fred Foo    schedule 25.04.2013
comment
В каких случаях можно использовать следующий прием: Разбить значение числового атрибута на N интервалов длины k и использовать вместо него номинальный атрибут, где n — имя класса, например: @attribute class {1,2,3,... Н}?. - person Anton Ashanin; 26.04.2013
comment
@AntonAshanin: это хорошая идея при передаче функций с реальными значениями классификатору NB. - person Fred Foo; 26.04.2013

Как упомянул @larsmans, это не классификация, а модель регрессии. Проблема в том, что регрессия работает только с числовыми данными. Стандартный подход к категориальным данным заключается в использовании так называемых фиктивных переменных<. /а>. Каждая фиктивная переменная представляет одно состояние категориальной переменной и может быть либо 1, либо 0. Таким образом, ваш список атрибутов может быть изменен примерно так:

@relation cars
@attribute country_FR
@attribute country_UK
...
@attribute city_London
@attribute city_Paris
...

Например, если городом является Лондон, то переменная city_London будет установлена ​​в 1, а все остальные переменные city_* будут установлены в 0.

person ffriend    schedule 25.04.2013
comment
В каких случаях можно использовать следующий прием: Разбить значение числового атрибута на N интервалов длины k и использовать вместо него номинальный атрибут, где n — имя класса, например: @attribute class {1,2,3,... Н}?. - person Anton Ashanin; 26.04.2013
comment
Разве Weka не справится с этим внутри компании? - person Fred Foo; 26.04.2013
comment
Weka использует это преобразование для внутренних целей, но таким образом вы не сможете получить такие вещи, как коэффициенты параметров. Чтобы иметь полный контроль над набором атрибутов, сначала используйте фильтр NominalToBinary. - person ffriend; 26.04.2013