One-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 у наступному розділі.
123456import 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())
Щоб застосувати OneHotEncoder, ініціалізуйте об'єкт енкодера та передайте вибрані стовпці до методу .fit_transform(), аналогічно до інших трансформерів.
1234567891011import 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())
Метод .toarray() перетворює розріджену матрицю, отриману з OneHotEncoder, у щільний масив NumPy. Щільні масиви відображають усі значення явно, що спрощує візуалізацію та обробку закодованих даних у DataFrame. Розріджені матриці зберігають лише ненульові елементи, оптимізуючи використання пам'яті. Ви можете опустити цей метод, щоб побачити різницю у виведенні.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Can you explain what the output of the OneHotEncoder means?
How do I interpret the transformed data for the 'sex' and 'island' columns?
What should I do next after applying OneHotEncoder to these features?
Awesome!
Completion rate improved to 3.13
One-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 у наступному розділі.
123456import 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())
Щоб застосувати OneHotEncoder, ініціалізуйте об'єкт енкодера та передайте вибрані стовпці до методу .fit_transform(), аналогічно до інших трансформерів.
1234567891011import 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())
Метод .toarray() перетворює розріджену матрицю, отриману з OneHotEncoder, у щільний масив NumPy. Щільні масиви відображають усі значення явно, що спрощує візуалізацію та обробку закодованих даних у DataFrame. Розріджені матриці зберігають лише ненульові елементи, оптимізуючи використання пам'яті. Ви можете опустити цей метод, щоб побачити різницю у виведенні.
Дякуємо за ваш відгук!