Як виконати одноразове кодування для багатокатегорійних змінних

Вихідний вузол: 841101

У цій статті ми дізнаємось про те, як ми можемо обробляти багатокатегорійні змінні за допомогою техніки розробки функцій One Hot Encoding.

Але перш ніж продовжити, давайте коротко обговоримо розробку функцій і One Hot Encoding.

Функціональна інженерія

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

Концепція прозорості для моделей машинного навчання є складною річчю, оскільки різні моделі часто вимагають різних підходів до різних типів даних. Як от:-

  • Безперервні дані
  • Категоріальні ознаки
  • Відсутні значення
  • Нормалізація
  • Дати і час

Але тут ми обговоримо лише категоричні ознаки. Категоричні ознаки – це ті функції, у яких тип даних є типом об’єкта. Значення точки даних у будь-якій категорійній ознакі не в числовій формі, а в об’єктній формі.

Існує багато методів обробки категоріальних змінних, деякі з них:

  • Кодування міток або порядкове кодування
  • Одне гаряче кодування
  • Фіктивне кодування
  • Кодування ефектів
  • Двійкове кодування
  • Базельське кодування
  • Хеш-кодування
  • Цільове кодування

Отже, тут ми обробляємо категоричні особливості за допомогою One Hot Encoding, тому в першу чергу ми обговоримо One Hot Encoding.

Одне гаряче кодування

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

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

наприклад дані про стать наводяться у формі «чоловічий» та «жінка».

Але якщо ми використовуємо одноразове кодування, тоді кодування та можливість моделі припускати природне впорядкування між категоріями може призвести до низької продуктивності або неочікуваних результатів.

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

Наприклад, ми кодуємо змінну кольорів,

Червоний_колір  Синій_колір
0 1
1 0
0 1

Зараз ми почнемо нашу подорож. На першому кроці ми беремо набір даних прогнозу цін на житло.

Набір даних

Тут ми будемо використовувати набір даних house_price, який використовується для прогнозування ціни будинку відповідно до розміру території.

Якщо ви хочете завантажити набір прогнозованих цін на житло, натисніть тут.

Імпорт модулів

Тепер ми маємо імпортувати важливі модулі з python, які використовуватимуться для одноразового кодування

# імпорт pandas import pandas як pd # імпорт numpy import numpy як np # імпорт OneHotEncoder із sklearn.preprocessing import OneHotEncoder()

Тут ми використовуємо pandas, які використовуються для аналізу даних, NumPyused для n-вимірних масивів, а від sklearn ми використаємо один важливий клас One Hot Encoder для категоріального кодування.

Тепер ми повинні прочитати ці дані за допомогою Python.

Читання набору даних

Зазвичай набір даних має форму CSV, і набір даних, який ми використовуємо, також має форму CSV. Для читання файлу CSV ми будемо використовувати функцію pandas read_csv(). Дивись нижче:

# читання набору даних df = pd.read_csv('house_price.csv') df.head()

вихід:-

Але ми маємо використовувати лише категоріальні змінні для одного гарячого кодера, і ми спробуємо пояснити лише категоріальні змінні для легкого розуміння.

для розділення категоріальних змінних із даних ми повинні перевірити, скільки ознак мають категоричні значення.

Перевірка категоріальних значень

Для перевірки значень ми використовуємо функцію pandas select_dtypes, яка використовується для вибору типів даних змінної.

# перевірка функцій cat = df.select_dtypes(include='O').keys() # відображення змінних cat

вихід:-

 

Тепер ми маємо видалити ці числові стовпці з набору даних, і ми будемо використовувати цю категоріальну змінну для нашого використання. Ми використовуємо лише 3-4 категоричні стовпці з набору даних для застосування одноразового кодування.

Створення нового DataFrame

Тепер для використання категоріальних змінних ми створимо новий фрейм даних із вибраних категоріальних стовпців.

# створення нового df # налаштування стовпців, які ми використовуємо new_df = pd.read_csv('house_price.csv',usecols=['Околиці','Зовнішній вигляд 1", "Зовнішній вигляд 2".']) new_df.head()

вихід:-

Тепер ми повинні з'ясувати, скільки унікальних категорій присутні в кожному категоричному стовпці.

Пошук унікальних цінностей

Для пошуку унікальних значень ми будемо використовувати функцію pandas unique().

# унікальні значення в кожному стовпці для x у new_df.columns: #printing унікальних значень print(x ,':', len(new_df[x].unique()))

вихід:-

Мікрорайон: 25
Зовнішній вигляд 1-й: 15
Зовнішній вигляд 2-й: 16

Тепер ми перейдемо до нашої техніки застосування одноразового кодування до багатокатегорійних змінних.

Техніка для багатокатегорійних змінних

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

Найбільш часті змінні

Тут ми виберемо 20 найчастіших змінних.

Припустимо, ми беремо одну категоріальну змінну сусідство.

# пошук перших 20 категорій new_df.Neighborhood.value_counts().sort_values(ascending=False).head(20)

вихід:

Коли ви побачите на цьому вихідному зображенні, ви помітите, що Імена мітка повторюється 225 разів у стовпцях Neighborhood, і ми йдемо вниз, це число зменшується.

Тож ми взяли 10 найкращих результатів із самого верху та перетворили ці 10 найкращих результатів у однооперативне кодування, а ліві мітки перетворилися на нуль.

вихід:-

 

Список найбільш частих категоріальних змінних

# створити список із першими 10 змінними top_10 = [x for x in new_df.Neighborhood.value_counts().sort_values(ascending=False).head(10).index] top_10

вихід:-

[«ІМЕНА»,
"CollgCr",
'Старе місто',
«Едвардс»,
"Somerst",
«Гілберт»,
«NridgHt»,
«Сойєр»,
«NWAmes»,
SawyerW]

У колонці «Сусідство» є 10 найкращих категорійних міток.

Зробіть двійковий файл

Тепер нам потрібно створити 10 двійкових змінних top_10 міток:

# створити двійковий код міток

для мітки в top_10:

new_df = np.where(new_df['Neighborhood']==label,1,0)

new_df[['Neighborhood']+top_10]


вихід:-

Імена CollgCr Старе місто Едвардс Сомерст Гілберт NridgHt пильщик NWAmes SawyerW
0 CollgCr 0 1 0 0 0 0 0 0 0 0
1 Veenker 0 0 0 0 0 0 0 0 0 0
2 CollgCr 0 1 0 0 0 0 0 0 0 0
3 Crawfor 0 0 0 0 0 0 0 0 0 0
4 NoRidge 0 0 0 0 0 0 0 0 0 0
5 Мітчел 0 0 0 0 0 0 0 0 0 0
6 Сомерст 0 0 0 0 1 0 0 0 0 0
7 NWAmes 0 0 0 0 0 0 0 0 1 0
8 Старе місто 0 0 1 0 0 0 0 0 0 0
9 BrkSide 0 0 0 0 0 0 0 0 0 0
10 пильщик 0 0 0 0 0 0 0 1 0 0
11 NridgHt 0 0 0 0 0 0 1 0 0 0

Ви можете побачити, як top_10 міток тепер перетворено у двійковий формат.

Візьмемо приклад, див. у таблиці де 1 індекс Veenker яка не належала до нашої мітки top_10 категорій, тому це призведе до 0 всі колонки.

Тепер ми зробимо це для всіх категорійних змінних, які ми вибрали вище.

Усі вибрані змінні на OneHotEncoding

# для всіх категоріальних змінних ми вибрали def top_x(df2,variable,top_x_labels): для мітки в top_x_labels: df2[variable+'_'+label] = np.where(data[variable]==label,1,0) # read знову дані data = pd.read_csv('D://xdatasets/train.csv',usecols = ['Neighborhood','Exterior1st','Exterior2nd']) #encode Neighborhood у 10 найчастіших категорій top_x(data, 'Neighborhood',top_10) # відображення даних data.head()

Вихід:-

Тепер тут ми застосовуємо одноразове кодування до всіх багатокатегорійних змінних.

Тепер ми побачимо переваги та недоліки One Hot Encoding для кількох змінних.

Переваги

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

Недоліки

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

Кінець Примітки

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

Зв’яжіться зі мною на Linkedin: профіль

Читайте інші мої статті: https://www.analyticsvidhya.com/blog/author/mayurbadole2407/

Дякую😎

Носії, показані в цій статті, не належать Analytics Vidhya і використовуються на розсуд автора.

Ви також можете прочитати цю статтю на нашому мобільному додатку Отримати його на Google Play

Статті по темі

Джерело: https://www.analyticsvidhya.com/blog/2021/05/how-to-perform-one-hot-encoding-for-multi-categorical-variables/

Часова мітка:

Більше від Аналітика Vidhya