मेरे पास दो ओवरलैपिंग वर्गों के साथ एक डेटासेट है, प्रत्येक कक्षा में सात अंक, अंक दो-आयामी स्थान में हैं। आर में, और मैं इन वर्गों के लिए एक अलग हाइपरप्लेन बनाने के svm
लिए e1071
पैकेज से चल रहा हूं । मैं निम्नलिखित कमांड का उपयोग कर रहा हूं:
svm(x, y, scale = FALSE, type = 'C-classification', kernel = 'linear', cost = 50000)
जहां x
मेरे डेटा बिंदु y
शामिल हैं और उनके लेबल शामिल हैं। कमांड एक svm-object देता है, जिसका उपयोग मैं अलग-अलग हाइपरप्लेन के पैरामीटर (सामान्य वेक्टर) और (इंटरसेप्ट) की गणना के लिए करता हूं ।ब
नीचे दिया गया चित्र (ए) मेरी बातों को दिखाता है और हाइपरप्लेन svm
कमांड द्वारा वापस आ जाता है (चलो इस हाइपरप्लेन को सबसे इष्टतम कॉल करें)। प्रतीक O के साथ नीला बिंदु अंतरिक्ष की उत्पत्ति को दर्शाता है, बिंदीदार रेखाएं मार्जिन दिखाती हैं, परिक्रमा वे बिंदु होते हैं जिनमें गैर-शून्य (सुस्त चर) होते हैं।
चित्रा (बी) एक और हाइपरप्लेन दिखाता है, जो 5 (b_new = b_optimal - 5) द्वारा इष्टतम एक के समानांतर अनुवाद है। यह देखना मुश्किल नहीं है कि इस हाइपरप्लेन के लिए ऑब्जेक्टिव फंक्शन (जो कि C- क्लासिफिकेशन svm द्वारा कम किया गया है) में फिगर में दिखाए गए इष्टतम हाइपरप्लेन की तुलना में कम वैल्यू होगी ( ए)। तो क्या ऐसा लगता है कि इस फ़ंक्शन में कोई समस्या है ? या मैंने कहीं गलती की?
svm
नीचे R कोड है जो मैंने इस प्रयोग में उपयोग किया है।
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)