Bagaimana cara mendapatkan batas keputusan dari linear SVM di R?

9

Saya membutuhkan paket yang dapat memberi saya persamaan untuk model SVM linier. Saat ini saya menggunakan e1071 seperti:

library(e1071)
m = svm(data, labels, type='C', kernel='linear', cost=cost, probability=FALSE, scale=scale)
w = t(m$coefs) %*% data[m$index,]  #Weight vector
b = -model$rho #Offset

Namun, saya tidak yakin bagaimana e1071::svm()memilih kelas positif dan negatif, jadi saya pikir ini mungkin mengacaukan dengan set data yang berbeda. Adakah yang bisa mengkonfirmasi bagaimana fungsi ini memutuskan kelas mana yang positif dan mana yang negatif?

Juga, apakah ada paket yang lebih baik untuk ini?

reisner
sumber
1
Saya memberikan beberapa informasi mengenai hal itu pada utas terkait: Menghitung batas keputusan model SVM linier .
chl

Jawaban:

1

Untuk titik data SVM Anda menghitung nilai keputusan dengan cara berikut:dxd

d <- sum(w * x) + b

Jika maka label adalah , selain itu . Anda juga bisa mendapatkan label atau nilai keputusan untuk matriks data dengan mengatakanx + 1 - 1d>0x+11newdata

predict(m, newdata)

atau

predict(m, newdata, decision.values = TRUE)

Berhati-hatilah saat menggunakan SVM dari paket e1071, lihat Masalah dengan e1071 libsvm? pertanyaan. Beberapa paket SVM lain untuk R adalah kernlab, klaR dan svmpath, lihat tinjauan umum ini: Support Vector Machines in R oleh A. Karatzoglou dan D. Meyer.

Leo
sumber
2
Terima kasih, tapi pertanyaan saya adalah bagaimana saya mendapatkan nilai w dan b. Juga, tentang nilai keputusan, saya bertanya bagaimana e1071 memutuskan label mana yang positif dan negatif untuk data pelatihan saat Anda memberikannya.
Reisner
1
Saya tidak terbiasa dengan e1071, tapi saya tahu SVM. Apakah suatu kelas dianggap positif atau negatif tidak akan mempengaruhi hasilnya. Anda bisa mengambil dataset apa saja dan menukar label kelas dan Anda masih harus mendapatkan hasil yang sama dalam hal mengklasifikasikan poin tes (untuk parameter yang sama). Positif dan negatif digunakan untuk menentukan apakah instance berada di sisi kanan batas keputusan.
karenu