Можно ли смешивать категориальные и непрерывные данные для SVM (Машины опорных векторов)?


14

У меня есть набор данных, как

+--------+------+-------------------+
| income | year |        use        |
+--------+------+-------------------+
|  46328 | 1989 | COMMERCIAL EXEMPT |
|  75469 | 1998 | CONDOMINIUM       |
|  49250 | 1950 | SINGLE FAMILY     |
|  82354 | 2001 | SINGLE FAMILY     |
|  88281 | 1985 | SHOP & HOUSE      |
+--------+------+-------------------+

Я встраиваю его в векторное пространство формата LIBSVM

+1 1:46328 2:1989 3:1
-1 1:75469 2:1998 4:1
+1 1:49250 2:1950 5:1
-1 1:82354 2:2001 5:1
+1 1:88281 2:1985 6:1

Индексы характеристик:

  • 1 "доход"
  • 2 "год"
  • 3 - «использовать / КОММЕРЧЕСКИЙ ЭКСПЕРТ»
  • 4 это «использовать / CONDOMINIUM»
  • 5 "использовать / одну семью"
  • 6 "использовать / магазин и дом"

Можно ли тренировать машину опорных векторов (SVM) с использованием таких непрерывных (год, доход) и категориальных (использование) данных, как это?


3
Вы должны произнести «SVM», по крайней мере, один раз.
Питер Флом - Восстановить Монику

1
Убедитесь, что вы масштабируете эти данные!
Патрик Колдон

Ответы:


7

Да! Но, возможно, не так, как вы имеете в виду. В своем исследовании я часто создаю категориальные функции из непрерывно значимых, используя алгоритм, такой как рекурсивное разбиение . Я обычно использую этот подход с реализацией SVMLight машин опорных векторов, но я также использовал его с LibSVM. Вам нужно быть уверенным, что вы назначите свои разделенные категориальные признаки определенному месту в векторе характеристик во время обучения и классификации, в противном случае ваша модель окажется в тупике.

Редактировать: То есть, когда я это сделал, я назначаю первые n элементов вектора двоичным значениям, связанным с выводом рекурсивного разбиения. В моделировании бинарных объектов у вас просто есть гигантский вектор из 0 и 1, так что все выглядит одинаково для модели, если вы явно не укажете, где находятся различные объекты. Это, вероятно, слишком специфично, так как я полагаю, что большинство реализаций SVM будут делать это самостоятельно, но, если вам нравится программировать самостоятельно, возможно, стоит подумать!


1
спасибо Кайл, ты можешь быть более конкретным? Что вы имеете в виду «назначить свои разделенные категориальные функции определенному месту»?
Симус Абшер

@ SeamusAbshere Нет проблем! Я отредактировал свой ответ, чтобы решить эту проблему!
Кайл.

Мне кажется, я слышал, что libsvm делает то, о чем вы говорите автоматически - есть мысли?
Симус Абшер

@SeamusAbshere я представляю, что вы правы, но я не знаю точно. Теперь, когда я думаю об этом, я не уверен, как это могло бы работать любым другим способом.
Кайл.

Воодушевленный ответом @ Kyle, я написал библиотеку Ruby ( VectorEmbed ), которая выполняет это преобразование (встраивание) автоматически, как для категориальных (с использованием хэшей Murmur32), так и для непрерывных данных. Он выводит файлы в формате libsvm.
Симус Абшер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.