Кодирование категориальных функций в числа для машинного обучения


14

Многие алгоритмы машинного обучения, например нейронные сети, предполагают работу с числами. Поэтому, когда у вас есть категорические данные, вам необходимо преобразовать их. Под категориальным я имею в виду, например:

Марки автомобилей: Audi, BMW, Chevrolet ... Идентификаторы пользователей: 1, 25, 26, 28 ...

Несмотря на то, что идентификаторы пользователей - это числа, они являются просто ярлыками и не означают ничего с точки зрения преемственности, например, возраста или суммы денег.

Итак, базовый подход, похоже, использует двоичные векторы для кодирования категорий:

Audi: 1, 0, 0 ... BMW: 0, 1, 0 ... Chevrolet: 0, 0, 1 ...

Это нормально, когда есть несколько категорий, но кроме этого это выглядит немного неэффективно. Например, если у вас есть 10 000 идентификаторов пользователей для кодирования, это 10 000 функций.

Вопрос в том, есть ли лучший способ? Может быть, один с вероятностями?


3
Почему вы хотите включить идентификатор пользователя в прогностическую модель? Что касается других категориальных переменных с количеством элементов, большим, чем вы хотите, когда вы используете фиктивное кодирование переменных, как вы описываете, я сначала провожу их через дерево решений в качестве единственного предиктора - чтобы свернуть уровни. Можно также повторно
скопировать,

Это звучит интересно - как случайные эффекты в статистической модели, где вас интересуют эффекты, специфичные для конкретного человека. Я могу представить себе ситуации, в которых было бы полезно, например, если вы снова и снова видите одних и тех же людей и хотели бы предсказать, что будет делать этот конкретный человек. Пожалуйста, поделитесь больше о своих планах, если можете. Кроме того, вы можете взглянуть на многоуровневое моделирование, хотя оно более традиционно используется в логических установках, а не в машинном обучении.
Анна З.

Я помню, как читал о конкурсе ML, где некоторые умные исследователи обнаружили, что идентификаторы пользователей в данных были указаны во время создания учетной записи пользователя. Следовательно, временные метки, которые были запутаны, были обнаружены (положительно влияя на предсказание ответа). Помимо таких случаев и упомянутых Анной (рекомендательные системы) я бы не стал включать ИД пользователя.
Штеффен

Энн - Разве модель случайных эффектов на самом деле НЕ заинтересована в людях - поэтому они считаются выборкой из популяции?
B_Miner

Я не понимаю, если задача обучения состоит в том, чтобы предсказать бинарную категорию богатых / не богатых, почему бы не иметь смысла иметь функцию для марки автомобиля конкретного пользователя. Идентификаторы пользователя могут использоваться, если известна социальная сеть человека: например, чтобы продемонстрировать, что друзья пользователя X более склонны к богатству. Что-то не так с этой мыслью?
Владтн

Ответы:


6

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

Однако вопрос заключается в следующем: имеет ли смысл в конкретной проблеме рассматривать идентификаторы пользователей как функции? Разве не имело бы смысла денормализовать данные о ваших отношениях и использовать пользовательские функции (возраст, местоположение, характеристики сетевого псевдонима, историю транзакций ...) вместо их идентификаторов?

Вы также можете выполнить кластеризацию ваших исходных пользовательских векторов и использовать идентификаторы N ближайших центров в качестве активированных функций вместо идентификаторов пользователей.


Хорошо, хотя это более общий вопрос, я вижу, что большинство из вас сконцентрировалось на проблеме идентификаторов пользователей, поэтому вот почему я хотел бы использовать их. Давайте посмотрим на один из конкурсов Kaggle о Grockit: kaggle.com/c/WhatDoYouKnow . Цель состоит в том, чтобы предсказать, правильно ли пользователь ответит на вопрос. Это проблема, похожая на мой взгляд на рекомендующие системы, вы просто получаете вопросы вместо фильмов и исправляете / ошибаетесь вместо оценок, плюс некоторые другие данные. Временные метки доступны :)
Nucular

1
В этом случае вы можете сделать предположение, что пользователь является независимым, и вы можете построить один классификатор на пользователя, обученного только по своей истории.
Огрисель

1

Равностороннее кодирование - это, вероятно, то, что вы ищете, когда пытаетесь закодировать классы в нейронную сеть. Он работает лучше, чем кодировка "1 из n", на которую ссылаются другие посты. Для справки могу ли я предложить: http://www.heatonresearch.com/wiki/Equiliate


Похоже, это связано с кодированием выходных значений, а не категориальным кодированием для входных значений, которое запрашивает OP.
Алекс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.