Кодування категоричних ознак до чисел для машинного навчання


14

Багато алгоритмів машинного навчання, наприклад нейронні мережі, розраховують мати справу з числами. Отже, коли у вас є категоричні дані, вам потрібно їх перетворити. Під категоричністю я маю на увазі, наприклад:

Марки автомобілів: Audi, BMW, Chevrolet ... Ідентифікатори користувачів: 1, 25, 26, 28 ...

Незважаючи на те, що ідентифікаційні дані користувачів - це цифри, вони є лише мітками, і не означають будь-яких показників безперервності, наприклад, віку або грошової суми.

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

Ауді: 1, 0, 0 ... BMW: 0, 1, 0 ... Шевроле: 0, 0, 1 ...

Це нормально, коли мало категорій, але крім цього це виглядає дещо неефективно. Наприклад, коли у вас є 10 000 ідентифікаторів користувачів для кодування, це 10 000 функцій.

Питання в тому, чи є кращий спосіб? Можливо, одна, що передбачає ймовірності?


3
Чому ви хочете включити ідентифікатор користувача в модель прогнозування? Що стосується інших категоричних змінних з кардинальністю більшою, ніж ви хочете, коли ви використовуєте фіктивне кодування змінних, як ви описуєте, я спочатку запускаю їх через дерево рішень як єдиний предиктор - щоб звалити рівні. Також можна перевпорядкувати, згрупувавши "рідкісні" рівні тощо
B_Miner

Це звучить цікаво - як випадкові ефекти в статистичній моделі, де вас цікавлять ефекти, що стосуються конкретної людини. Я можу уявити ситуації, коли було б корисно, наприклад, якщо ви знову і знову бачите одних і тих же людей і хотіли б передбачити, що робитиме конкретна людина. Будь ласка, поділіться детальніше про свої плани, якщо можете. Крім того, ви можете поглянути на багаторівневе моделювання, хоча це традиційно застосовується в умовах зараження, а не в машинному навчанні.
Енн З.

Я пам'ятаю, як читав про конкурс ML, де деякі розумні дослідники виявили, що ідентифікатори користувачів у даних були дані під час створення облікового запису користувача. Звідси були виявлені часові позначки, які були пригноблені (позитивно впливають на прогнозування реакції). Окрім таких випадків і тих, які згадує Енн (системи рекомендацій), я не включав би ID користувача.
steffen

Енн - Чи насправді модель випадкових ефектів НЕ цікавить людей - таким чином вони вважаються вибіркою з популяції?
B_Miner

Я не розумію, якщо проблема навчання полягає в тому, щоб передбачити бінарну категорію заможний / не заможний, чому б не було сенсу мати особливість для марки автомобіля конкретного користувача. Ідентифікатори користувачів можуть бути використані, якщо відома соціальна мережа особи: наприклад, щоб продемонструвати, що друзі користувача X схильні до заможності. Чи щось не так у цьому напрямку думки?
Владтн

Відповіді:


6

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

Однак питання полягає в тому, чи має сенс ваша конкретна проблема розглядати ідентифікатори користувачів як функції? Чи не було б більше сенсу денормалізувати ваші стосунки та використовувати функції користувача (вік, місцеположення, ознаки онлайн-псевдоніма, історія транзакцій ...) замість своїх ідентифікаторів?

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


Гаразд, хоча це більш загальне питання, я бачу, що більшість із вас зосереджена на проблемі ідентифікаторів користувачів, тому ось чому я хотів би їх використовувати. Давайте подивимось на один із змагань Kaggle, про Grockit: kaggle.com/c/WhatDoYouKnow . Мета - передбачити, чи правильно відповість користувач на запитання. На мою думку, це проблема, подібна до систем, що рекомендують рекомендувати, ви просто отримуєте запитання замість фільмів і правильні / неправильні замість оцінок, а також деякі інші дані.
Часові позначки

1
У такому випадку ви можете зробити припущення, що користувач незалежний, і ви можете створити один класифікатор на кожного користувача, навченого лише за їх власною історією.
ogrisel

1

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


Це, мабуть, пов'язане з кодуванням вихідних значень, а не з категоріальним кодуванням вхідних значень, про що вимагає ОП.
Олексій
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.