Memahami One-Hot Encoding dalam Python
Misal kalian punya sebuah data 'warna' berupa text-kategorikal pada dataset kalian, katakanlah: merah, biru dan hijau. Kita sama-sama tau bahwa mesin tidak dapat mengolah data text secara langsung bukan? Maka diperlukan sebuah teknik untuk mengubah data 'warna' tersebut menjadi numerik, misalnya merah = 1, biru = 2, dan hijau = 3. Proses ini disebut sebagai encoding.
Tapi apa dasarnya coba? Kenapa merah harus sama dengan 1, biru sama dengan dua, dan hijau sama dengan 3? Encoding ini akan membuat kebingungan (bias) pada mesin dikemudian hari. Hal ini karena mesin akan menganggap bahwa merah lebih rendah daripada biru dan lebih rendah daripada hijau. Hal ini dikarenakan 1 < 2 < 3. Ya gak? Nah untuk menghindari bias intrepretasi ini, dibuatlah sebuah metode encoding baru yang kita sebut dengan One-Hot Encoder.
Apa Itu One-Hot Encoding?
One-hot encoding adalah teknik representasi data yang digunakan untuk mengubah data kategori menjadi bentuk numerik yang dapat digunakan oleh algoritma machine learning. One-hot encoding mengubah setiap kategori dalam kolom menjadi kolom biner (0 atau 1). Setiap kategori unik diwakili oleh vektor yang memiliki nilai 1 di posisi tertentu dan 0 di posisi lainnya.
Bingung? Oke jadi gini, misal kalian punya sebuah data 'warna' berupa text-kategorikal pada dataset kalian, katakanlah: merah, biru dan hijau. Alih-alih kita melakukan encoding dimana merah = 1, biru = 2, dan hijau = 3, kita bisa gunakan One-Hot Encoding seperti ini:
Warna | Merah | Biru | Hijau |
Merah | 1 | 0 | 0 |
Biru | 0 | 1 | - |
Hijau | 0 | 0 | 1 |
Dari tabel diatas, warna merah tidak akan dianggap lebih rendah daripada biru, dan juga tidak akan dianggap lebih rendah daripada hijau. Jadi merah akan diencoding sebagai [1, 0, 0], biru akan diencoding sebagai [0, 1, 0] dan hijau akan diencoding sebagai [0, 0, 1].
Dengan cara ini, tidak ada lagi bias akibat urutan ordinal. Inilah mengapa teknik one-hot encoding lebih baik digunakan pada data-data kaetorikal yang tidak menyatakan tingkat urutan tertentu (non-ordinal).
Mengapa One-Hot Encoding Penting?
Beberapa algoritma machine learning tidak dapat menangani data kategori secara langsung, sehingga memerlukan representasi numerik. One-hot encoding membantu:
- Menghindari asumsi hubungan ordinal antara kategori.
- Memastikan semua kategori memiliki bobot yang sama dalam analisis model.
Namun, metode ini dapat meningkatkan dimensi data secara signifikan jika kategori yang ada terlalu banyak, yang disebut sebagai masalah "curse of dimensionality".
Contoh Implementasi One-Hot Encoding Pada Python
Python menyediakan beberapa pustaka populer untuk melakukan one-hot encoding, seperti Pandas dan sklearn. Untuk melakukan One-Hot Encoding menggunakan Pandas, kita bisa gunakan cara berikut:
import pandas as pd
# Data contoh
data = {'Warna': ['Merah', 'Hijau', 'Biru', 'Merah']}
df = pd.DataFrame(data)
# One-hot encoding dengan pandas
df_encoded = pd.get_dummies(df, columns=['Warna'])
print(df_encoded)
Output:
Warna_Biru Warna_Hijau Warna_Merah 0 0 0 1 1 0 1 0 2 1 0 0 3 0 0 1
Untuk melakukan One-Hot Encoding menggunakan sklearn, kita bisa gunakan cara berikut:
from sklearn.preprocessing import OneHotEncoder
# Data contoh
data = [['Merah'], ['Hijau'], ['Biru'], ['Merah']]
# Inisialisasi encoder
encoder = OneHotEncoder(sparse_output=False)
data_encoded = encoder.fit_transform(data)
print(data_encoded)
Output:
[[0. 0. 1.] [0. 1. 0.] [1. 0. 0.] [0. 0. 1.]]
print(encoder.get_feature_names_out())
Output:
['x0_Biru' 'x0_Hijau' 'x0_Merah']
Tips dan Praktik Terbaik
- Tangani Data Kategori dengan Banyak Nilai Unik
Jika jumlah kategori sangat besar, pertimbangkan teknik lain seperti target encoding untuk mengurangi dimensi data. - Perhatikan Dummy Variable Trap
Dalam regresi linier, pastikan untuk menghindari "dummy variable trap" dengan menghapus salah satu kolom hasil one-hot encoding untuk menghindari multikolinearitas. - Gunakan Sparse Matrix untuk Efisiensi
Jika dataset sangat besar, gunakan representasi sparse matrix untuk menghemat memori.