Üst üste binen iki sınıflı bir veri setim var, her sınıfta yedi nokta, iki boyutlu uzayda noktalar var. R, ve ben bu sınıflar için ayrı bir köprü oluşturmak svmiçin e1071paketten çalışıyorum . Aşağıdaki komutu kullanıyorum:
svm(x, y, scale = FALSE, type = 'C-classification', kernel = 'linear', cost = 50000)
burada xveri noktalarımı ve yetiketlerini içeriyor. Komut, ayırma köprüsü (normal vektör) ve b (kesme) parametrelerini hesaplamak için kullandığım bir svm nesnesi döndürür .
Aşağıdaki şekil (a) noktalarımı ve svmkomut tarafından döndürülen hiper düzlemi göstermektedir (bu hiper düzlemi en uygun olanı diyelim). O sembollü mavi nokta alanın kökenini, noktalı çizgiler kenar boşluğunu gösterir, daire içine alınmış sıfır olmayan (gevşek değişkenler) olan noktalardır.
Şekil (b), optimalin 5'e paralel bir çevirisi olan başka bir hiper düzlemi göstermektedir (b_new = b_optimal - 5). Bu hiper düzlem için objektif fonksiyonun olduğunu görmek zor değil | | w | | 2 + c o s t ∑ ξ i (C-sınıflandırma svm tarafından en aza indirilir), şekil (a) 'da gösterilen optimal hiper düzlemden daha düşük bir değere sahip olacaktır. Öyleyse bu işlevle ilgili bir sorun var gibi görünüyor mu? Yoksa bir yerde hata mı yaptım?
svm

Aşağıda bu deneyde kullandığım R kodu var.
library(e1071)
get_obj_func_info <- function(w, b, c_par, x, y) {
xi <- rep(0, nrow(x))
for (i in 1:nrow(x)) {
xi[i] <- 1 - as.numeric(as.character(y[i]))*(sum(w*x[i,]) + b)
if (xi[i] < 0) xi[i] <- 0
}
return(list(obj_func_value = 0.5*sqrt(sum(w * w)) + c_par*sum(xi),
sum_xi = sum(xi), xi = xi))
}
x <- structure(c(41.8226593092589, 56.1773406907411, 63.3546813814822,
66.4912298720281, 72.1002963174962, 77.649309469458, 29.0963054665561,
38.6260575252066, 44.2351239706747, 53.7648760293253, 31.5087701279719,
24.3314294372308, 21.9189647758150, 68.9036945334439, 26.2543850639859,
43.7456149360141, 52.4912298720281, 20.6453186185178, 45.313889181287,
29.7830021158501, 33.0396571934088, 17.9008386892901, 42.5694092520593,
27.4305907479407, 49.3546813814822, 40.6090664454681, 24.2940422573947,
36.9603428065912), .Dim = c(14L, 2L))
y <- structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L,
1L), .Label = c("-1", "1"), class = "factor")
a <- svm(x, y, scale = FALSE, type = 'C-classification', kernel = 'linear', cost = 50000)
w <- t(a$coefs) %*% a$SV;
b <- -a$rho;
obj_func_str1 <- get_obj_func_info(w, b, 50000, x, y)
obj_func_str2 <- get_obj_func_info(w, b - 5, 50000, x, y)