Data kategorik: Kosakata dan encoding one-hot

Istilah dimensi adalah sinonim untuk jumlah elemen dalam vektor fitur. Beberapa fitur kategorik memiliki dimensi rendah. Contoh:

Nama fitur # kategori Kategori sampel
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 kemungkinan kategori yang sedikit, Anda dapat mengenkodenya sebagai kosakata. Dengan encoding kosakata, model memperlakukan setiap kemungkinan nilai kategoris sebagai fitur terpisah. Selama pelatihan, model mempelajari bobot yang berbeda untuk setiap kategori.

Misalnya, Anda membuat model untuk memprediksi harga mobil berdasarkan, sebagian, pada fitur kategoris bernama car_color. Mungkin mobil merah lebih berharga daripada mobil hijau. Karena produsen menawarkan sejumlah warna eksterior yang terbatas, car_color adalah fitur kategoris berdimensi rendah. Ilustrasi berikut menyarankan kosakata (kemungkinan nilai) untuk car_color:

Gambar 1. Setiap warna dalam palet ditampilkan sebagai
      fitur terpisah. Artinya, setiap warna adalah fitur terpisah dalam vektor fitur.
      Misalnya, 'Merah' adalah fitur, 'Oranye' adalah fitur terpisah,
      dan sebagainya.
Gambar 1. Fitur unik untuk setiap kategori.

Latihan: Periksa pemahaman Anda

Benar atau Salah: Model machine learning dapat dilatih secara langsung pada nilai string mentah, seperti "Merah" dan "Hitam", tanpa mengonversi nilai ini menjadi vektor numerik.
Benar
Selama pelatihan, model hanya dapat memanipulasi angka floating point. String "Red" bukan angka floating point. Anda harus mengonversi string seperti "Red" menjadi angka floating point.
Salah
Model machine learning hanya dapat dilatih pada fitur dengan nilai floating point, jadi Anda harus mengonversi string tersebut menjadi nilai floating point sebelum pelatihan.

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:

Gambar 2. Setiap warna dikaitkan dengan nilai bilangan bulat yang unik. Misalnya, 'Merah' dikaitkan dengan bilangan bulat 0, 'Oranye' dengan bilangan bulat 1, dan seterusnya.
Gambar 2. Fitur yang diindeks.

Setelah mengonversi string menjadi angka indeks unik, Anda perlu 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. Kemudian, model akan menganggap "ungu" enam kali lebih mungkin daripada "oranye".

Enkode one-hot

Langkah selanjutnya dalam membuat kosakata adalah mengonversi setiap nomor indeks ke enkode one-hot-nya. Dalam enkode one-hot:

  • Setiap kategori diwakili oleh vektor (array) N elemen, dengan N adalah jumlah kategori. Misalnya, jika car_color memiliki delapan kemungkinan kategori, maka vektor one-hot yang merepresentasikan 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 warna dalam 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

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:

Gambar 3. Diagram proses end-to-end untuk memetakan kategori ke
      vektor fitur. Dalam diagram, fitur inputnya adalah 'Kuning',
      'Oranye', 'Biru', dan 'Biru' untuk kedua kalinya.  Sistem menggunakan kosakata yang disimpan ('Merah' adalah 0, 'Oranye' adalah 1, 'Biru' adalah 2, 'Kuning' adalah 3, dan
      sebagainya) untuk memetakan nilai input ke ID. Dengan demikian, sistem memetakan 'Kuning',
      'Oranye', 'Biru', dan 'Biru' ke 3, 1, 2, 2. Kemudian, sistem mengonversi
      nilai tersebut menjadi vektor fitur one-hot. Misalnya, dengan sistem
      yang memiliki delapan kemungkinan warna, 3 menjadi 0, 0, 0, 1, 0, 0, 0, 0.
Gambar 3. Proses menyeluruh untuk memetakan kategori ke vektor fitur.

Representasi renggang

Fitur yang sebagian besar nilainya nol (atau kosong) disebut sebagai fitur jarang. Banyak fitur kategorik, seperti car_color, cenderung menjadi fitur jarang. Representasi renggang berarti menyimpan posisi 1,0 dalam vektor renggang. Misalnya, vektor one-hot untuk "Blue" adalah:

[0, 0, 1, 0, 0, 0, 0, 0]

Karena 1 berada di posisi 2 (saat memulai penghitungan pada 0), representasi jarang untuk vektor one-hot sebelumnya adalah:

2

Perhatikan bahwa representasi jarang menggunakan memori yang jauh lebih sedikit daripada vektor one-hot delapan elemen. Yang penting, model harus dilatih pada vektor one-hot, bukan representasi jarang.

Outlier dalam data kategorikal

Seperti data numerik, data kategoris juga berisi pencilan. Misalkan car_color tidak hanya berisi warna populer, tetapi juga beberapa warna pencilan yang jarang digunakan, seperti "Mauve" atau "Avocado". Daripada memberikan kategori terpisah untuk setiap warna pencilan ini, Anda dapat mengelompokkannya ke dalam satu kategori "catch-all" yang disebut out-of-vocabulary (OOV). Dengan kata lain, semua warna pencilan dikelompokkan ke dalam satu kelompok pencilan. Sistem mempelajari satu bobot untuk bucket pencilan tersebut.

Mengenkode fitur kategoris berdimensi tinggi

Beberapa fitur kategoris memiliki sejumlah besar dimensi, seperti yang ada dalam tabel berikut:

Nama fitur # kategori Kategori sampel
words_in_english ~500.000 "senang", "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 signifikan mengurangi jumlah dimensi, yang memberikan manfaat bagi model dalam dua hal penting:

  • Model biasanya dilatih lebih cepat.
  • Model yang dibuat biasanya menyimpulkan prediksi lebih cepat. Artinya, model memiliki latensi yang lebih rendah.

Hashing (juga disebut trik hashing) adalah cara yang kurang umum untuk mengurangi jumlah dimensi.