Apakah boleh mencampur data kategorikal dan berkelanjutan untuk SVM (Support Vector Machines)?

14

Saya punya dataset seperti

+--------+------+-------------------+
| income | year |        use        |
+--------+------+-------------------+
|  46328 | 1989 | COMMERCIAL EXEMPT |
|  75469 | 1998 | CONDOMINIUM       |
|  49250 | 1950 | SINGLE FAMILY     |
|  82354 | 2001 | SINGLE FAMILY     |
|  88281 | 1985 | SHOP & HOUSE      |
+--------+------+-------------------+

Saya menanamkannya ke dalam ruang vektor format LIBSVM

+1 1:46328 2:1989 3:1
-1 1:75469 2:1998 4:1
+1 1:49250 2:1950 5:1
-1 1:82354 2:2001 5:1
+1 1:88281 2:1985 6:1

Indeks fitur:

  • 1 adalah "penghasilan"
  • 2 adalah "tahun"
  • 3 adalah "use / EXEMPT KOMERSIAL"
  • 4 adalah "use / CONDOMINIUM"
  • 5 adalah "use / SINGLE FAMILY"
  • 6 adalah "use / SHOP & HOUSE"

Apakah boleh melatih mesin vektor dukungan (SVM) dengan campuran data berkelanjutan (tahun, pendapatan) dan kategorikal (gunakan) seperti ini?

Seamus Abshere
sumber
3
Anda harus mengeja "SVM", setidaknya sekali.
Peter Flom - Reinstate Monica
1
Pastikan Anda membuat skala data itu!
Patrick Caldon

Jawaban:

7

Iya! Tapi mungkin tidak dengan cara yang Anda maksud. Dalam penelitian saya, saya sering membuat fitur-fitur kategorikal dari yang bernilai terus-menerus menggunakan algoritme seperti partisi rekursif . Saya biasanya menggunakan pendekatan ini dengan implementasi SVMLight mesin dukungan vektor, tapi saya sudah menggunakannya dengan LibSVM juga. Anda harus memastikan bahwa Anda menetapkan fitur kategorikal yang dipartisi ke tempat tertentu dalam vektor fitur Anda selama pelatihan dan klasifikasi, jika tidak model Anda akan berakhir dengan tidak senang.

Sunting: Artinya, ketika saya sudah melakukan ini, saya menetapkan elemen n pertama dari vektor ke nilai-nilai biner yang terkait dengan output dari partisi rekursif. Dalam pemodelan fitur biner, Anda hanya memiliki vektor raksasa 0 dan 1, jadi semuanya terlihat sama dengan model, kecuali jika Anda secara eksplisit menunjukkan di mana fitur yang berbeda. Ini mungkin terlalu spesifik, seperti yang saya bayangkan sebagian besar implementasi SVM akan melakukan ini sendiri, tetapi, jika Anda ingin memprogram sendiri, itu mungkin sesuatu untuk dipikirkan!

Kyle.
sumber
1
terima kasih Kyle, dapatkah Anda sedikit lebih spesifik? Apa maksud Anda "tetapkan fitur kategorikal yang dipartisi ke tempat tertentu"?
Seamus Abshere
@ SeamusTidak Ada masalah! Saya mengedit jawaban saya untuk mengatasi ini!
Kyle.
Saya merasa seperti saya pernah mendengar bahwa libsvm melakukan apa yang Anda bicarakan secara otomatis - ada pemikiran?
Seamus Abshere
@ Seamus Di mana saya bayangkan Anda benar, tapi saya tidak tahu pasti. Sekarang saya berpikir tentang itu, saya tidak yakin bagaimana itu bisa bekerja dengan cara lain.
Kyle.
Didorong oleh jawaban @ Kyle, saya menulis sebuah pustaka Ruby ( VectorEmbed ) yang melakukan konversi ini (penyematan) secara otomatis, baik untuk kategorikal (menggunakan hash Murmur32) dan data kontinu. Ini menghasilkan file yang diformat libsvm.
Seamus Abshere