Istilah dimensi adalah sinonim untuk jumlah elemen dalam vektor fitur. Beberapa fitur kategorik memiliki dimensi rendah. Contoh:
Nama fitur | # of categories | Contoh kategori |
---|---|---|
snowed_today | 2 | Benar, Salah |
skill_level | 3 | Pemula, Praktisi, Pakar |
season | 4 | Musim Dingin, Musim Semi, Musim Panas, Musim Gugur |
day_of_week | 7 | Senin, Selasa, Rabu |
planet | 8 | Merkurius, Venus, Bumi |
Jika fitur kategorikal memiliki jumlah kategori yang rendah, Anda dapat mengenkodenya sebagai kosakata. Dengan encoding kosakata, model memperlakukan setiap nilai kategoris yang mungkin sebagai fitur terpisah. Selama pelatihan, model mempelajari bobot yang berbeda untuk setiap kategori.
Misalnya, Anda membuat model untuk memprediksi harga mobil,
sebagian, berdasarkan fitur kategoris bernama car_color
.
Mungkin mobil merah lebih berharga daripada mobil hijau.
Karena produsen menawarkan sejumlah kecil warna eksterior, car_color
adalah
fitur kategoris dimensi rendah.
Ilustrasi berikut menyarankan kosakata (kemungkinan nilai) untuk
car_color
:
Latihan: Periksa pemahaman Anda
Nomor indeks
Model machine learning hanya dapat memanipulasi angka floating point. Oleh karena itu, Anda harus mengonversi setiap string ke nomor indeks unik, seperti dalam ilustrasi berikut:
Setelah mengonversi string menjadi nomor indeks unik, Anda harus memproses data lebih lanjut untuk merepresentasikannya dengan cara yang membantu model mempelajari hubungan yang bermakna antara nilai. Jika data fitur kategoris dibiarkan sebagai bilangan bulat yang diindeks dan dimuat ke dalam model, model akan memperlakukan nilai yang diindeks sebagai bilangan floating point kontinu. Model kemudian akan mempertimbangkan "ungu" enam kali lebih mungkin daripada "oranye".
Enkode one-hot
Langkah berikutnya dalam membuat kosakata adalah mengonversi setiap nomor indeks ke enkode one-hot. Dalam enkode one-hot:
- Setiap kategori diwakili oleh vektor (array) dari elemen N, dengan N
adalah jumlah kategori. Misalnya, jika
car_color
memiliki delapan kemungkinan kategori, vektor one-hot yang mewakili akan memiliki delapan elemen. - Tepat satu elemen dalam vektor one-hot memiliki nilai 1,0; semua elemen yang tersisa memiliki nilai 0,0.
Misalnya, tabel berikut menunjukkan encoding one-hot untuk setiap
car_color
:
Fitur | Merah | Orange | Biru | Kuning | Hijau | Hitam | Ungu | Cokelat |
---|---|---|---|---|---|---|---|---|
"Merah" | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
"Orange" | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
"Biru" | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
"Kuning" | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
"Hijau" | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
"Hitam" | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
"Ungu" | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
"Cokelat" | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
Ini adalah vektor one-hot, bukan string atau nomor indeks, yang diteruskan ke vektor fitur. Model mempelajari bobot terpisah untuk setiap elemen vektor fitur.
Ilustrasi berikut menunjukkan berbagai transformasi dalam representasi kosakata:
Representasi renggang
Fitur yang sebagian besar nilainya nol (atau kosong) disebut sebagai
fitur jarang. Banyak
fitur kategoris, seperti car_color
, cenderung merupakan fitur yang jarang.
Representasi jarang
berarti menyimpan posisi 1,0
dalam vektor jarang. Misalnya, vektor one-hot untuk "Blue"
adalah:
[0, 0, 1, 0, 0, 0, 0, 0]
Karena 1
berada di posisi 2 (saat memulai penghitungan dari 0), representasi
yang jarang untuk vektor one-hot sebelumnya adalah:
2
Perhatikan bahwa representasi jarang menggunakan memori jauh lebih sedikit daripada vektor one-hot delapan elemen. Yang penting, model harus melatih pada vektor one-hot, bukan representasi jarang.
Outlier dalam data kategorik
Seperti data numerik, data kategoris juga berisi pencilan. Misalkan
car_color
tidak hanya berisi warna populer, tetapi juga beberapa warna ekstrem
yang jarang digunakan, seperti "Mauve"
atau "Avocado"
.
Daripada memberi setiap warna outlier ini kategori terpisah, Anda
dapat menggabungkannya ke dalam satu kategori "catch-all" yang disebut out-of-vocabulary
(OOV). Dengan kata lain, semua warna outlier dikelompokkan ke dalam satu
bucket outlier. Sistem mempelajari satu bobot untuk bucket outlier tersebut.
Mengenkode fitur kategoris berdimensi tinggi
Beberapa fitur kategoris memiliki banyak dimensi, seperti yang ada dalam tabel berikut:
Nama fitur | # of categories | Contoh kategori |
---|---|---|
words_in_english | ~500.000 | "bahagia", "berjalan" |
US_postal_codes | ~42.000 | "02114", "90301" |
last_names_in_Germany | ~850.000 | "Schmidt", "Schneider" |
Jika jumlah kategori tinggi, enkode one-hot biasanya merupakan pilihan yang buruk. Embedding, yang dijelaskan dalam modul Embedding terpisah, biasanya merupakan pilihan yang jauh lebih baik. Penyematan secara substansial mengurangi jumlah dimensi, yang menguntungkan model dengan dua cara penting:
- Model biasanya dilatih lebih cepat.
- Model yang dibuat biasanya menyimpulkan prediksi dengan lebih cepat. Artinya, model memiliki latensi yang lebih rendah.
Hashing (juga disebut trik hashing) adalah cara yang kurang umum untuk mengurangi jumlah dimensi.
Klik di sini untuk mempelajari hashing