Representasi: Rekayasa Fitur

Dalam pemrograman tradisional, fokusnya adalah pada kode. Dalam project machine learning, fokusnya bergeser ke representasi. Artinya, salah satu cara developer mengasah model adalah dengan menambah dan meningkatkan fitur-fiturnya.

Memetakan Data Mentah ke Fitur

Sisi kiri Gambar 1 mengilustrasikan data mentah dari sumber data input; sisi kanan mengilustrasikan vektor fitur, yang merupakan set nilai floating point yang terdiri dari contoh di set data Anda. Rekayasa fitur berarti mengubah data mentah menjadi vektor fitur. Kami berharap dapat menghabiskan waktu yang signifikan untuk melakukan rekayasa fitur.

Banyak model machine learning harus merepresentasikan fitur sebagai vektor dengan bilangan riil karena nilai fitur harus dikalikan dengan bobot model.

Data mentah dipetakan ke vektor fitur melalui proses yang disebut rekayasa fitur.

Gambar 1. Rekayasa fitur memetakan data mentah ke fitur ML.

Memetakan nilai numerik

Bilangan bulat dan data floating point tidak memerlukan encoding khusus karena dapat dikalikan dengan bobot numerik. Seperti yang disarankan pada Gambar 2, mengonversi nilai bilangan bulat mentah 6 ke nilai fitur 6.0 adalah hal yang mudah:

Contoh fitur yang dapat disalin langsung dari data mentah

Gambar 2. Memetakan nilai bilangan bulat ke nilai floating point.

Memetakan nilai kategoris

Fitur kategoris memiliki set kemungkinan nilai yang diskrit. Misalnya, mungkin ada fitur yang disebut street_name dengan opsi yang menyertakan:

{'Charleston Road', 'North Shoreline Boulevard', 'Shorebird Way', 'Rengstorff Avenue'}

Karena model tidak dapat mengalikan string dengan bobot yang dipelajari, kita menggunakan rekayasa fitur untuk mengonversi string menjadi nilai numerik.

Kita dapat melakukannya dengan mendefinisikan pemetaan dari nilai fitur, yang akan kita sebut sebagai kosakata dari nilai yang memungkinkan, ke bilangan bulat. Karena tidak semua jalan di dunia akan muncul di set data, kita dapat mengelompokkan semua jalan lainnya ke dalam kategori "lainnya", yang dikenal sebagai bucket OOV (di luar kosakata).

Menggunakan pendekatan ini, inilah cara kita dapat memetakan nama jalan ke angka:

  • petakan Charleston Road ke 0
  • petakan North Shoreline Boulevard ke 1
  • petakan Shorebird Way ke 2
  • petakan Rengstorff Avenue ke 3
  • petakan yang lainnya (OOV) ke 4

Namun, jika kita menyertakan angka indeks ini secara langsung ke dalam model, hal itu akan menerapkan beberapa batasan yang mungkin menjadi masalah:

  • Kita akan mempelajari satu bobot yang berlaku untuk semua jalan. Misalnya, jika kita mempelajari bobot sebesar 6 untuk street_name, kita akan mengalikannya dengan 0 untuk Charleston Road, dengan 1 untuk North Shoreline Boulevard, 2 untuk Shorebird Way, dan seterusnya. Pertimbangkan model yang memprediksi harga rumah menggunakan street_name sebagai fitur. Kecil kemungkinan ada penyesuaian harga yang linear berdasarkan nama jalan, dan lebih jauh lagi, ini akan menganggap Anda telah memesan jalan berdasarkan harga rumah rata-ratanya. Model kita memerlukan fleksibilitas untuk mempelajari bobot yang berbeda untuk setiap jalan yang akan ditambahkan ke perkiraan harga menggunakan fitur lainnya.

  • Kami tidak memperhitungkan kasus yang memungkinkan street_name memiliki beberapa nilai. Misalnya, banyak rumah terletak di sudut dua jalan, dan tidak ada cara untuk mengenkode informasi tersebut dalam nilai street_name jika berisi satu indeks.

Untuk menghapus kedua batasan ini, kita dapat membuat vektor biner untuk setiap fitur kategoris dalam model yang mewakili nilai sebagai berikut:

  • Untuk nilai yang berlaku pada contoh, setel elemen vektor yang sesuai ke 1.
  • Setel semua elemen lainnya ke 0.

Panjang vektor ini sama dengan jumlah elemen dalam kosakata. Representasi ini disebut enkode one-hot jika satu nilai adalah 1, dan enkode multi-hot jika beberapa nilai adalah 1.

Gambar 3 mengilustrasikan encoding one-hot untuk jalan tertentu: Shorebird Way. Elemen dalam vektor biner untuk Shorebird Way memiliki nilai 1, sedangkan elemen untuk semua jalan lainnya memiliki nilai 0.

Memetakan nilai string (

Gambar 3. Memetakan alamat melalui encoding one-hot.

Pendekatan ini secara efektif membuat variabel Boolean untuk setiap nilai fitur (misalnya, nama jalan). Di sini, jika sebuah rumah berada di Shorebird Way, nilai binernya hanya 1 untuk Shorebird Way. Dengan demikian, model hanya menggunakan bobot untuk Shorebird Way.

Demikian pula, jika sebuah rumah berada di sudut dua jalan, dua nilai biner akan disetel ke 1, dan model menggunakan kedua bobot masing-masing.

Representasi Renggang

Misalkan Anda memiliki 1.000.000 nama jalan yang berbeda dalam set data yang ingin Anda sertakan sebagai nilai untuk street_name. Membuat vektor biner dari 1.000.000 elemen secara eksplisit di mana hanya 1 atau 2 elemen yang benar adalah representasi yang sangat tidak efisien dalam hal waktu penyimpanan dan komputasi saat memproses vektor ini. Dalam situasi ini, pendekatan yang umum digunakan adalah menggunakan representasi renggang yang hanya menyimpan nilai bukan nol. Dalam representasi renggang, bobot model independen masih dipelajari untuk setiap nilai fitur, seperti yang dijelaskan di atas.