Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте One-Hot Енкодер | Розділ
Основи машинного навчання

bookOne-Hot Енкодер

Коли мова йде про номінальні значення, їх обробка є дещо складнішою.

Для порядкових даних, таких як оцінки користувачів від 'Terrible' до 'Great', кодування їх числами від 0 до 4 є доцільним, оскільки модель може враховувати притаманний порядок.

Натомість для ознаки на кшталт 'city' з п’ятьма різними категоріями кодування їх числами від 0 до 4 помилково вказуватиме на існування порядку. У такому випадку кращим вибором є one-hot кодування, оскільки воно представляє категорії без натяку на ієрархію.

Для кодування номінальних даних використовується трансформер OneHotEncoder. Він створює стовпець для кожного унікального значення. Далі для кожного рядка встановлюється 1 у стовпці, що відповідає значенню цього рядка, а в інших — 0.

Те, що спочатку було 'NewYork', тепер має 1 у стовпці 'City_NewYork' і 0 в інших стовпцях з префіксом City_.

Застосування OneHotEncoder до датасету penguins. Номінативні ознаки: 'island' та 'sex'. Стовпець 'species' є цільовим і буде розглянутий окремо під час обговорення target encoding у наступному розділі.

123456
import pandas as pd df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_imputed.csv') print('island: ', df['island'].unique()) print('sex: ', df['sex'].unique())
copy

Щоб застосувати OneHotEncoder, ініціалізуйте об'єкт енкодера та передайте вибрані стовпці до методу .fit_transform(), аналогічно до інших трансформерів.

1234567891011
import pandas as pd from sklearn.preprocessing import OneHotEncoder df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_imputed.csv') # Assign X, y variables y = df['species'] X = df.drop('species', axis=1) # Initialize an OneHotEncoder object one_hot = OneHotEncoder() # Print transformed 'sex', 'island' columns print(one_hot.fit_transform(X[['sex', 'island']]).toarray())
copy
Note
Примітка

Метод .toarray() перетворює розріджену матрицю (sparse matrix), отриману від OneHotEncoder, у щільний масив NumPy. Щільні масиви явно відображають усі значення, що спрощує візуалізацію та обробку закодованих даних у DataFrame. Розріджені матриці зберігають лише ненульові елементи, оптимізуючи використання пам'яті. Ви можете опустити цей метод, щоб побачити різницю у виведенні.

question mark

OneHotEncoder створює нові стовпці. Це правильно?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 1. Розділ 11

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

bookOne-Hot Енкодер

Свайпніть щоб показати меню

Коли мова йде про номінальні значення, їх обробка є дещо складнішою.

Для порядкових даних, таких як оцінки користувачів від 'Terrible' до 'Great', кодування їх числами від 0 до 4 є доцільним, оскільки модель може враховувати притаманний порядок.

Натомість для ознаки на кшталт 'city' з п’ятьма різними категоріями кодування їх числами від 0 до 4 помилково вказуватиме на існування порядку. У такому випадку кращим вибором є one-hot кодування, оскільки воно представляє категорії без натяку на ієрархію.

Для кодування номінальних даних використовується трансформер OneHotEncoder. Він створює стовпець для кожного унікального значення. Далі для кожного рядка встановлюється 1 у стовпці, що відповідає значенню цього рядка, а в інших — 0.

Те, що спочатку було 'NewYork', тепер має 1 у стовпці 'City_NewYork' і 0 в інших стовпцях з префіксом City_.

Застосування OneHotEncoder до датасету penguins. Номінативні ознаки: 'island' та 'sex'. Стовпець 'species' є цільовим і буде розглянутий окремо під час обговорення target encoding у наступному розділі.

123456
import pandas as pd df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_imputed.csv') print('island: ', df['island'].unique()) print('sex: ', df['sex'].unique())
copy

Щоб застосувати OneHotEncoder, ініціалізуйте об'єкт енкодера та передайте вибрані стовпці до методу .fit_transform(), аналогічно до інших трансформерів.

1234567891011
import pandas as pd from sklearn.preprocessing import OneHotEncoder df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_imputed.csv') # Assign X, y variables y = df['species'] X = df.drop('species', axis=1) # Initialize an OneHotEncoder object one_hot = OneHotEncoder() # Print transformed 'sex', 'island' columns print(one_hot.fit_transform(X[['sex', 'island']]).toarray())
copy
Note
Примітка

Метод .toarray() перетворює розріджену матрицю (sparse matrix), отриману від OneHotEncoder, у щільний масив NumPy. Щільні масиви явно відображають усі значення, що спрощує візуалізацію та обробку закодованих даних у DataFrame. Розріджені матриці зберігають лише ненульові елементи, оптимізуючи використання пам'яті. Ви можете опустити цей метод, щоб побачити різницю у виведенні.

question mark

OneHotEncoder створює нові стовпці. Це правильно?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 1. Розділ 11
some-alt