Jak uzyskać granice decyzji z liniowej SVM w R?

9

Potrzebuję pakietu, który może dać mi równanie dla liniowego modelu SVM. Obecnie używam e1071 tak:

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

Nie jestem jednak pewien, w jaki sposób e1071::svm()wybiera klasy dodatnie i ujemne, więc myślę, że może to popsuć różne zestawy danych. Czy ktoś może potwierdzić, w jaki sposób ta funkcja decyduje, która klasa jest dodatnia, a która ujemna?

Czy jest też lepszy pakiet?

reisner
źródło
1
Podałem kilka informacji na ten temat w powiązanym wątku: Obliczanie granicy decyzyjnej liniowego modelu SVM .
chl

Odpowiedzi:

1

Dla punktu danych maszyna SVM oblicza wartość decyzji w następujący sposób:xd

d <- sum(w * x) + b

Jeśli to etykieta wynosi , w przeciwnym razie . Możesz także uzyskać etykiety lub wartości decyzyjne dla matrycy danych, mówiącd>0x+11newdata

predict(m, newdata)

lub

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

Zachowaj ostrożność, używając SVM z pakietu e1071, zobacz Problem z e1071 libsvm? pytanie. Kilka innych pakietów SVM dla R to kernlab, klaR i svmpath, zobacz ten przegląd: Obsługa maszyn wektorowych w R przez A. Karatzoglou i D. Meyer.

Lew
źródło
2
Dzięki, ale moje pytanie dotyczy tego, jak uzyskać wartości w i b. Ponadto, jeśli chodzi o wartość decyzji, pytam, w jaki sposób e1071 decyduje, która dana etykieta jest pozytywna i negatywna dla danych treningowych po przejściu czynników.
ponownie
1
Nie znam e1071, ale znam SVM. To, czy klasa zostanie uznana za pozytywną czy negatywną, nie wpłynie na wynik. Możesz wziąć dowolny zestaw danych i zamienić etykiety klas i nadal powinieneś uzyskać ten sam wynik pod względem klasyfikacji punktów testowych (dla tych samych parametrów). Dodatnie i ujemne są używane do ustalenia, czy instancja przypada po prawej stronie granicy decyzji.
karenu