Чи правильно поєднувати категоричні та безперервні дані для SVM (Support Vector Machines)?


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
дякую, Кайл, ти можеш бути трохи більш конкретним? Що ви маєте на увазі "присвоїти свої розділені категоріальні ознаки конкретному місцю"?
Seamus Abshere

@SeamusAbshere Немає проблем! Я відредагував свою відповідь, щоб вирішити це!
Кайл.

Я відчуваю, що чув, що libsvm робить те, про що ти говориш, автоматично - будь-які думки?
Seamus Abshere

@SeamusAbshere я думаю, що ти маєш рацію, але не знаю точно. Тепер, коли я замислююся над цим, я не впевнений, як це могло б працювати інакше.
Кайл.

Охоплений відповіддю @ Кайла, я написав бібліотеку Ruby ( VectorEmbed ), яка робить це перетворення (вбудовування) автоматично, як категоричне (використовуючи хеши Murmur32), так і безперервні дані. Він виводить файли у форматі libsvm.
Seamus Abshere
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.