Особливості побудови та нормалізації в машинному навчанні


13

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

  • Вікова стать Професія Місце подобається (1) / Не подобається (0)
  • 23 M Програмне забезпечення США 1
  • 24 F Лікар Великобританії 0

і так далі .... Тепер моє запитання - як я повинен масштабувати та представляти свої особливості. Один із способів я подумав: поділіть вік на вікові групи, тому 18-25, 25-35, 35 вище, Стать як M, F, Місцезнаходження як США, Великобританія та інші. Тепер створіть бінарну функцію для всіх цих значень, отже, вік матиме 3 двійкові ознаки, кожна з яких відповідає віковій групі тощо. Так, 28 років із США представлено як 010 10 100 (010-> Вікова група 25-35, 10 -> Чоловік, 100 -> США)

Що може бути найкращим способом представити тут функції? Також я помітив у деяких e.gs. Висновок, що всі ознаки певним чином масштабовані / нормалізовані, наприклад, гендер представлений двома значеннями, 0,0045 та -,0,0045 для чоловіків і жінок. Я не маю підказки щодо того, як зробити масштабування / мормалізацію так?


Мені не зрозуміло, чому ви хочете масштабувати свої функції? Часто функції нормалізуються, щоб мати значення 0 середнього єдності std dev. Можливо, вам доведеться визначити проблему з точки зору того, які класи ви намагаєтеся класифікувати, логістична регресія корисна для двійкової класифікації.
BGreene

Ви, звичайно, не хочете категоризувати вікові категорії. Як вимірюється "рейтинг фільму"? Це шкала від 1 до 10, "подобається / не подобається" чи що?
Пітер Флом - Відновити Моніку

Для простоти припустимо, що існує лише два класи: Like і Dislike. Начебто 1 і Не подобається 0. Змінили заяву проблеми, щоб відобразити це.
snow_leopard

Відповіді:


15

Бінарний відмінок

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

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

  • 00001 для США
  • 00010 для Великобританії
  • 00100 для Азії
  • 01000 для Європи
  • 10000 для інших

Для кодування термометром функції реального / цілого числа потрібно вибрати довжину та пороги. Для вашого прикладу віку ви вирішили розділити вік відповідно до порогів 18,25 та 35. Кодування буде

  • 000 за 0-17
  • 001 за 18-25
  • 011 за 25-34
  • 111 для 35-вище

Збираючи обидва разом, ви отримуєте тут кодування розміром 5 + 3 = 8 біт. Для 30-річного жителя Великобританії у нас є

00010UK01130yo

Безперервна справа

Якщо ваша модель регресії дозволяє це, вам слід віддати перевагу збереженню реального значення для функції real / integer, яка містить більше інформації. Розглянемо ваш приклад. Цього разу ми просто відпустимо значення для віку як ціле число. Таким чином, кодування 30-річного жителя Великобританії є

00010UK3030yo

Як сказав BGreene, тоді слід нормалізувати це значення, щоб зберегти середнє значення 0 і стандартне відхилення 1, що забезпечує стабільність багатьох моделей регресії. Для цього просто віднімаємо емпіричне середнє і ділимо на емпіричне стандартне відхилення.

Y_normalized = ( Y - mean(Y) ) / std(Y)

Якщо середній вік усіх осіб у вашій базі даних становить 25, а його стандартне відхилення - 10, нормоване значення для 30 років. людина буде , що призводить до подання (3025)/10=0.5

00010UK0.530yo

Круто ... тож скажімо, у нас є приклад, наприклад: Країна: Великобританія, AgeGroup: 25-34. Це призведе до значень як Country: 2 , Agegroup: 4, якщо ми використовуємо одне гаряче кодування. Тепер, створюючи вектор функції, ми повинні їх нормалізувати. Тож скажімо, що вони дорівнюють 0,4 і 0,6, то наш векторний вхідний ознака для моделі по суті стає [0.4, 0.6], правильно?
snow_leopard

хм .. якщо я використовую "одне гаряче" кодування, чи слід перетворювати значення кодування в його ціле представлення як особливість, наприклад, 0010 стає 2. А чи слід розглядати це як набір із 4 функцій, з яких лише одна буде включена? У першому випадку чи не вводиться поняття, що 1000 - це далі 0001, а не 0100, що може бути не наміром, оскільки ми не хочемо, щоб значення функції США було ближче до значення функції Великобританії, ніж значення Азії чи щось інше?
snow_leopard

Я відредагував свою відповідь, щоб уточнити ці моменти. Вам не потрібно нормалізувати бінарні функції, і ви повинні трактувати їх як вектор, не перетворюйте їх у ціле число.
Еміль

Дійсно корисне і кришталево зрозуміле пояснення. Спасибі!
Джордж Лю
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.