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:
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.
Gambar 2: Fitur yang diindeks.
Pemetaan semacam ini disebut sebagai kosakata.
Kosakata
Dalam kosakata, setiap nilai mewakili fitur unik.
Index Number | Category |
---|---|
0 | Red |
1 | Orange |
2 | Blue |
... | ... |
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.
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.
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.
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.
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.