Cara mengkode ulang variabel kategori menjadi variabel numerik saat menggunakan SVM atau Neural Network

19

Untuk menggunakan SVM atau Neural Network perlu mengubah (menyandikan) variabel kategorikal menjadi variabel numerik, metode normal dalam hal ini adalah dengan menggunakan nilai biner 0-1 dengan nilai k-th kategori ditransformasikan menjadi (0,0, .. ., 1,0, ... 0) (1 ada di posisi k-th). Apakah ada metode lain untuk melakukan ini, terutama ketika ada sejumlah besar nilai kategorikal (eg10000) sehingga representasi 0-1 akan memperkenalkan sejumlah besar dimensi tambahan (unit input) di Jaringan Saraf Tiruan yang tampaknya tidak cukup diinginkan atau diharapkan ?

Saya bertanya tentang strategi umum.

pengguna68589
sumber
Apakah Anda bertanya tentang strategi umum atau tentang beberapa masalah khusus?
Denis Tarasov

Jawaban:

11

Di NLP, di mana kata-kata biasanya dikodekan sebagai 1-of-k, penggunaan kata embeddings telah muncul baru-baru ini. The halaman wikipedia dengan referensi adalah awal yang baik.

xsayaRnsayan

Mungkin Anda dapat mentransfer ide itu ke pengaturan Anda.

bayerj
sumber
10

Metode 'standar' adalah: pengodean satu-panas (yang Anda sebutkan dalam pertanyaan). Jika ada terlalu banyak kategori yang memungkinkan, tetapi Anda membutuhkan pengodean 0-1, Anda dapat menggunakan trik hashing .

Metode lain yang sering digunakan adalah rata-rata jawaban atas kategori: lihat gambar dari komentar di kaggle .

Alleo
sumber
1

Anda dapat menggunakan dummyVarsdalam R, dari caretpaket. Secara otomatis akan membuat kolom yang berbeda berdasarkan jumlah level. Setelah itu, Anda dapat menggunakan cbinddan melampirkannya ke data asli Anda. Pilihan lain termasuk model.matrixdan sparse.model.matrix.

Karan Gulati
sumber
0

Anda dapat mencoba pengkodean biner yang lebih ringkas dan terkadang mengungguli satu-panas. Anda dapat menerapkan penanaman kategorikal dalam Keras, misalnya.

eafpres
sumber
0

k-1

"Entity Embeddings of Categorical Variables" oleh Cheng Guo, Felix Berkhahn

Kami memetakan variabel kategori dalam masalah perkiraan fungsi ke dalam ruang Euclidean, yang merupakan entitas embeddings dari variabel kategori. Pemetaan dipelajari oleh jaringan saraf selama proses pelatihan standar diawasi. Penyisipan entitas tidak hanya mengurangi penggunaan memori dan mempercepat jaringan saraf dibandingkan dengan pengkodean satu-panas, tetapi lebih penting lagi dengan memetakan nilai-nilai serupa yang berdekatan satu sama lain dalam ruang penyisipan, ia mengungkapkan sifat intrinsik dari variabel kategori. Kami menerapkannya dengan sukses dalam kompetisi Kaggle baru-baru ini dan mampu mencapai posisi ketiga dengan fitur yang relatif sederhana. Kami lebih lanjut menunjukkan dalam makalah ini bahwa penanaman entitas membantu jaringan saraf untuk menggeneralisasi lebih baik ketika data jarang dan statistik tidak diketahui. Oleh karena itu sangat berguna untuk dataset dengan banyak fitur kardinalitas tinggi, di mana metode lain cenderung overfit. Kami juga menunjukkan bahwa embeddings yang diperoleh dari jaringan saraf terlatih meningkatkan kinerja semua metode pembelajaran mesin yang diuji secara signifikan ketika digunakan sebagai fitur input. Sebagai embedding entitas mendefinisikan ukuran jarak untuk variabel kategori itu dapat digunakan untuk memvisualisasikan data kategori dan untuk pengelompokan data.

Sycorax berkata Reinstate Monica
sumber