Смешивать непрерывные и двоичные данные с линейным SVM?

15

Так что я играл с SVM, и мне интересно, хорошо ли это делать:

У меня есть набор непрерывных функций (от 0 до 1) и набор категориальных функций, которые я преобразовал в фиктивные переменные. В этом конкретном случае я кодирую дату измерения в фиктивной переменной:

У меня есть 3 периода, из которых у меня есть данные, и я зарезервировал для них 3 номера функций:

20: 21: 22:

Таким образом, в зависимости от того, из какого периода поступают данные, различным функциям присваивается 1; остальные получат 0.

Будет ли SVM работать должным образом с этим, или это плохая вещь?

Я использую SVMLight и линейное ядро.

user3010273
источник
Это отлично работает.
Марк Клазен
То, что вы сделали, достаточно хорошо. Я дал немного подробный ответ здесь - quora.com/Machine-Learning/…
TenaliRaman
@TenaliRaman, пожалуйста, не публикуйте ссылки на сайты, для которых требуется авторизация, прежде чем вы сможете что-либо прочитать.
Марк Клазен
@MarcClaesen Я повторил ответ ниже.
TenaliRaman

Ответы:

8

SVM будет обрабатывать как двоичные, так и непрерывные переменные, пока вы выполняете некоторую предварительную обработку: все функции должны быть масштабированы или нормализованы. После этого шага, с точки зрения алгоритмов, не имеет значения, являются ли объекты непрерывными или двоичными: для двоичных файлов он видит выборки, которые «далеко» или очень похожи; для непрерывного существуют также промежуточные значения. Ядро не имеет значения в отношении типа переменных.

iliasfl
источник
1
и что будет лучшим методом нормализации?
Шломи Шварц
23

Тиражирование моего ответа от http://www.quora.com/Machine-Learning/What-are-good-ways-to-handle-discrete-and-continuous-inputs-together/answer/Arun-Iyer-1

  • Масштабировать ограниченные непрерывные объекты: все непрерывные входные данные, которые ограничены, масштабировать их до через x = 2 x - max - min[1,1]x=2xmaxminmaxmin .
  • μσx=xμσ
  • Бинаризация категориальных / дискретных функций. Для всех категориальных функций представьте их как несколько логических функций. Например, вместо того, чтобы иметь одну функцию под названием wedding_status, имейте 3 логических функции - замужняя_стата_сингла, замужняя_стата_маррида, замужняя_стата_диворсинга и соответственно установите эти функции в 1 или -1. Как видите, для каждой категориальной функции вы добавляете k двоичной функции, где k - это число значений, которые принимает категориальная функция.

Rn и начать использовать готовые пакеты для классификации / регрессии и т. Д.

Rn

TenaliRaman
источник
Ну, эта статья довольно интересна относительно категориальных особенностей. Не сказано, что однозначное кодирование - лучший выбор для категориальных функций - вот что я получаю из этого.
displayname
1
это отличный ответ, я прочитал ссылку в комментарии @displayname и это полезное сравнение. Из статьи видно, что двоичное кодирование является лучшим (а не горячим, описанным в этом ответе), а также довольно простым). Из ссылки «Двоичные: сначала категории кодируются как порядковые, затем эти целые числа преобразуются в двоичные». код, а затем цифры из этой двоичной строки разбиваются на отдельные столбцы. Это кодирует данные в меньшем количестве измерений, чем один горячий, но с некоторым искажением расстояний. "
Шелбиперейра
Статья, предоставленная @displayname, является хорошей статьей, но ее не следует принимать за чистую монету. Первое, что нужно помнить, - это то, что почти все методы ML работают с подобием или расстоянием. Выбор метода кодирования напрямую влияет на то, как измеряются расстояния или сходства между двумя точками. Горячее кодирование 1 говорит о том, что объект одной категории похож только на себя или эквивалентно, он размещает все категории на одинаковом расстоянии друг от друга. Однако есть случаи, когда определенные категории ближе, чем другие. В этом случае может помочь другая кодировка.
TenaliRaman