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.
machine-learning
neural-networks
categorical-data
svm
categorical-encoding
pengguna68589
sumber
sumber
Jawaban:
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.
Mungkin Anda dapat mentransfer ide itu ke pengaturan Anda.
sumber
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 .
sumber
Anda dapat menggunakan
dummyVars
dalam R, daricaret
paket. Secara otomatis akan membuat kolom yang berbeda berdasarkan jumlah level. Setelah itu, Anda dapat menggunakancbind
dan melampirkannya ke data asli Anda. Pilihan lain termasukmodel.matrix
dansparse.model.matrix
.sumber
Anda dapat mencoba pengkodean biner yang lebih ringkas dan terkadang mengungguli satu-panas. Anda dapat menerapkan penanaman kategorikal dalam Keras, misalnya.
sumber
"Entity Embeddings of Categorical Variables" oleh Cheng Guo, Felix Berkhahn
sumber