Bagaimana menggabungkan fitur input kategoris dan kontinu untuk pelatihan jaringan saraf

16

Misalkan kita memiliki dua jenis fitur input, kategorikal dan kontinu. Data kategorikal dapat direpresentasikan sebagai kode satu-panas A, sedangkan data kontinu hanyalah vektor B dalam ruang dimensi-N. Tampaknya hanya menggunakan concat (A, B) bukan pilihan yang baik karena A, B adalah jenis data yang sama sekali berbeda. Misalnya, tidak seperti B, tidak ada urutan numerik dalam A. Jadi pertanyaan saya adalah bagaimana menggabungkan dua jenis data atau apakah ada metode konvensional untuk menangani mereka.

Bahkan, saya mengusulkan struktur naif seperti yang disajikan dalam gambar

masukkan deskripsi gambar di sini

Seperti yang Anda lihat, beberapa layer pertama digunakan untuk mengubah (atau memetakan) data A ke beberapa output tengah dalam ruang kontinu dan kemudian disatukan dengan data B yang membentuk fitur input baru di ruang kontinu untuk lapisan selanjutnya. Saya bertanya-tanya apakah itu masuk akal atau hanya permainan "coba-coba". Terima kasih.

JunjieChen
sumber

Jawaban:

5

Ada tiga pendekatan utama untuk menyelesaikan ini:

  1. Membangun dua model secara terpisah dan kemudian melatih algoritma ensemble yang menerima output dari dua model sebagai input
  2. Menggabungkan semua data menjadi vektor tunggal / tensor sebagai langkah preprocessing dan kemudian melatih input NN tunggal yang sederhana
  3. Beberapa input arsitektur NN yang Anda usulkan

Pendekatan ensemble adalah opsi yang paling lurus ke depan dan akan menghasilkan hasil yang layak, namun, itu tidak akan berfungsi sebaik opsi yang Anda usulkan karena jaringan ensemble hanya menerima probabilitas kelas dari dua jaringan sebagai input dan akan dibandingkan dengan Anda pendekatan kehilangan hubungan yang lebih kompleks antara tipe data.

Pendekatan kedua secara teori tidak jauh berbeda dari pendekatan yang Anda usulkan, dengan perbedaan adalah bahwa ia mengasumsikan bahwa jaringan akan dengan sendirinya mengetahui bahwa input terdiri dari dua jenis data (karena keduanya berada dalam vektor / tensor yang sama ). Diperlukan banyak waktu pelatihan bagi jaringan untuk mempelajarinya dan Anda mungkin terjebak dalam minima lokal bahkan sebelum itu terjadi.

Berdasarkan pengalaman pribadi saya, jaringan yang Anda ajukan adalah pilihan terbaik dan kemungkinan memiliki waktu kereta api terpendek dan setelah Anda mendapatkan arsitektur yang tepat, Anda akan merasa sangat mudah untuk melatih dan memelihara (melatih kembali) jaringan dalam produksi serta Anda hanya perlu melatih satu model tunggal.

Tadej Magajna
sumber
0

Saya telah menggunakan struktur naif yang diusulkan oleh Anda untuk beberapa waktu sekarang. Dalam masalah yang dibingkai dengan baik dan dengan data yang cukup, jenis arsitektur ini bekerja dengan cukup baik. Namun di sini ada beberapa hal yang saya pelajari:

  1. Algoritma berbasis pohon (RF, XGB) umumnya berkinerja baik dengan kelas campuran kecuali jika Anda memiliki beberapa persyaratan output spesifik atau fungsi kerugian yang lebih mudah diimplementasikan melalui jaringan saraf.
  2. Jika menggunakan jaringan saraf diputuskan, maka arsitektur ini berkinerja lebih baik dibandingkan dengan jenis cara pengkodean string lainnya.
  3. Pendekatan ini juga bekerja dengan input data time-series campuran - jauh lebih baik daripada pendekatan time series klasik.

Desain kuncinya adalah lapisan gabungan dan di mana Anda ingin meletakkannya di arsitektur. Selain itu menggunakan lapisan penyematan memberi Anda manfaat tambahan menggunakan embeddings yang dipelajari dalam beberapa tugas / visualisasi lainnya.

Jenis arsitektur ini telah digunakan dalam kompetisi Kaggle [1] dan juga diajarkan dalam kursus Fast.ai oleh Prof. Jeremy Howard [2].

  1. https://yashuseth.blog/2018/07/22/pytorch-neural-network-for-tabular-data-with-categorical-embeddings/
  2. https://www.fast.ai/2019/01/24/course-v3/
Soumyajit
sumber