Mengubah Data Kategoris

Beberapa fitur Anda mungkin berupa nilai terpisah yang tidak ada dalam hubungan berurutan. Contohnya mencakup jenis, kata, atau kode pos. Fitur ini dikenal sebagai categorycal dan setiap nilainya disebut kategori. Anda dapat mewakili nilai kategoris sebagai string atau bahkan angka, tetapi Anda tidak akan dapat membandingkan angka ini atau menguranginya satu sama lain.

Sering kali, Anda harus merepresentasikan fitur yang berisi nilai bilangan bulat sebagai data kategorik, bukan sebagai data numerik. Misalnya, pertimbangkan fitur kode pos dengan nilai bilangan bulat. Jika Anda salah merepresentasikan fitur ini secara numerik, Anda meminta model untuk menemukan hubungan numerik antara kode pos yang berbeda; misalnya, Anda mengharapkan model untuk menentukan bahwa kode pos 20004 adalah dua kali (atau setengah) sinyal sebagai kode pos 10002. Dengan menampilkan kode pos sebagai data kategori, Anda memungkinkan model untuk menemukan sinyal terpisah untuk setiap kode pos.

Jika jumlah kategori kolom data kecil, seperti hari dalam seminggu atau palet warna terbatas, Anda dapat membuat fitur unik untuk setiap kategori. Contoh:

Setiap warna dalam palet direpresentasikan sebagai fitur terpisah.
Artinya, setiap warna adalah fitur terpisah dalam vektor fitur.
Misalnya, merah adalah fitur, oranye adalah fitur yang terpisah, dan sebagainya. Gambar 1: Fitur unik untuk setiap kategori.

 

Kemudian, model dapat mempelajari bobot terpisah untuk setiap warna. Misalnya, mungkin model dapat mengetahui bahwa mobil merah lebih mahal daripada mobil hijau.

Kemudian, fitur tersebut dapat diindeks.

Setiap warna dalam palet kini dimiliki oleh fitur yang sama. 
Artinya, warna sekarang hanya merupakan satu fitur dalam vektor fitur.
Setiap warna memiliki nilai unik. Misalnya, merah memiliki nilai 0, oranye memiliki nilai 1, dan seterusnya. Gambar 2: Fitur yang diindeks.

 

Pemetaan semacam ini disebut sebagai kosakata.

Kosakata

Dalam kosakata, setiap nilai mewakili fitur unik.

Index NumberCategory
0Red
1Orange
2Blue
......

Model mencari indeks dari string, yang menetapkan 1,0 ke slot yang sesuai dalam vektor fitur dan 0,0 pada semua slot lainnya dalam vektor fitur.

Diagram proses menyeluruh untuk memetakan kategori ke fitur vektor.
Dalam diagram, fitur input berwarna kuning, oranye,
biru, biru. Sistem menggunakan kosakata yang tersimpan (merah adalah 0,
oranye adalah 1, biru adalah 2, kuning adalah 3, dan seterusnya) untuk memetakan nilai masukan
ke ID. Dengan demikian, sistem memetakan kuning, oranye, biru, biru ke 3, 1, 2, 2. Selanjutnya, sistem akan mengonversi nilai tersebut menjadi vektor fitur sekali klik. Misalnya,
dengan sistem yang memiliki tujuh kemungkinan warna, 3 menjadi 0,0, 0,0, 0,0, 1,0, 0,0,
0,0, 0,0. Gambar 3: Proses menyeluruh untuk memetakan kategori ke vektor fitur.

Catatan tentang representasi renggang

Jika kategori Anda adalah hari, Anda mungkin, misalnya, berakhir mewakili hari Jumat dengan vektor fitur [0, 0, 0, 0, 1, 0, 0]. Namun, sebagian besar penerapan sistem ML akan mewakili vektor ini dalam memori dengan representasi yang jarang. Representasi umum adalah daftar nilai tidak kosong dan indeks yang sesuai—misalnya, 1.0 untuk nilai dan [4] untuk indeks. Hal ini memungkinkan Anda menghabiskan lebih sedikit memori untuk menyimpan sejumlah besar 0 dan memungkinkan perkalian matriks yang lebih efisien. Dalam hal matematika yang mendasarinya, [4] setara dengan [0, 0, 0, 0, 1, 0, 0].

Di luar Kosakata (OOV)

Seperti data numerik yang berisi pencilan, data kategoris juga demikian. Misalnya, pertimbangkan set data yang berisi deskripsi mobil. Salah satu fitur set data ini adalah warna mobil. Misalnya warna mobil yang umum (hitam, putih, abu-abu, dan sebagainya) direpresentasikan dengan baik dalam set data ini dan Anda membuat setiap warna menjadi kategori sehingga Anda dapat mempelajari bagaimana warna yang berbeda ini memengaruhi nilai. Namun, anggaplah set data ini berisi sejumlah kecil mobil dengan warna eksentrik (mauve, puce, alpukat). Daripada memberikan kategori terpisah pada setiap warna ini, Anda dapat memasukkannya ke kategori catch-all yang disebut Out of Vocab (OOV). Dengan menggunakan OOV, sistem tidak akan membuang waktu untuk melatih setiap warna yang langka tersebut.

Hashing

Opsi lainnya adalah melakukan hashing pada setiap string (kategori) ke dalam ruang indeks yang tersedia. Hashing sering menyebabkan konflik, tetapi Anda mengandalkan model untuk mempelajari beberapa representasi bersama dari kategori dalam indeks yang sama yang berfungsi dengan baik untuk masalah tertentu.

Untuk istilah yang penting, hashing dapat lebih buruk daripada memilih kosakata karena konflik. Di sisi lain, hashing tidak mengharuskan Anda membuat kosakata, yang berguna jika distribusi fitur berubah banyak dari waktu ke waktu.

Diagram yang menampilkan dua daftar kata. Satu daftar terdiri dari 10 kata. Daftar lainnya menampilkan 10 kata yang dibagi menjadi 8 bucket hash. Dengan demikian, 6 bucket hash berisi satu kata, sementara 2 bucket hash berisi 2 kata.  Setiap bucket hash diidentifikasi dengan angka 1 sampai 8, inklusif. Gambar 4: Memetakan item ke kosakata.

Hybrid dari Hashing dan Kosakata

Anda dapat menggunakan pendekatan hybrid dan menggabungkan hashing dengan kosakata. Gunakan kosakata untuk kategori yang paling penting dalam data Anda, tetapi ganti bucket OOV dengan beberapa bucket OOV, dan gunakan hashing untuk menetapkan kategori ke bucket.

Kategori di bucket hash harus memiliki indeks yang sama, dan model kemungkinan tidak akan membuat prediksi yang baik, tetapi kami telah mengalokasikan sejumlah memori untuk mencoba mempelajari kategori di luar kosakata kami.

Diagram yang menampilkan tiga daftar kata. Satu daftar terdiri dari 10 kata
untuk dikategorikan. Dua daftar lainnya memetakan 10 kata tersebut ke dalam bucket kosakata dan hash. Artinya, 5 kata dipetakan langsung ke
kosa kata, sedangkan 5 kata lainnya dipetakan ke dua bucket hash. Satu bucket hash berisi dua kata; bucket hash lainnya berisi tiga kata.  Kosakatanya
berisi kata-kata umum; bucket hash berisi kata-kata
yang lebih jarang. Gambar 5: Pendekatan hybrid yang menggabungkan kosakata dan hashing.

Catatan tentang Embeddings

Ingat kembali dari Kursus Crash Machine Learning bahwa penyematan adalah fitur kategoris yang direpresentasikan sebagai fitur dengan nilai berkelanjutan. Model dalam sering mengonversi indeks dari indeks menjadi sematan.

Diagram yang menunjukkan proses menyeluruh untuk memetakan kategori guna menampilkan vektor
melalui penyematan. Tabel penyematan terdiri dari kumpulan baris bernomor. Setiap baris terdiri dari kumpulan nilai floating point antara 0,0 dan 1,0. Untuk mengonversi
kategori, sistem akan menyalin baris yang sesuai dari tabel penyematan.
Misalnya, jika kategori input adalah 0, sistem akan menyalin baris pertama
dari tabel penyematan ke vektor fitur. Jika kategori input adalah 1,
sistem akan menyalin baris kedua dari tabel penyematan ke vektor
fitur. Gambar 6: Vektor fitur renggang melalui penyematan

Transformasi lain yang telah kita bahas dapat disimpan di disk, tetapi embedding-nya berbeda. Karena pelatihan dilatih, penyematan bukanlah transformasi data yang umum, melainkan bagian dari model. Jenis ini dilatih dengan bobot model lainnya, dan secara fungsional setara dengan lapisan bobot.

Bagaimana dengan sematan terlatih? Embedding terlatih biasanya masih dapat dimodifikasi selama pelatihan, sehingga secara konseptual masih merupakan bagian dari model.