द्विघात प्रोग्रामिंग के साथ एक समर्थन वेक्टर मशीन का अनुकूलन


12

मैं एक रैखिक समर्थन वेक्टर मशीन के प्रशिक्षण के लिए प्रक्रिया को समझने की कोशिश कर रहा हूं । मुझे एहसास है कि SMV के गुण उन्हें द्विघात प्रोग्रामिंग सॉल्वर का उपयोग करने की तुलना में बहुत जल्दी अनुकूलित करने की अनुमति देते हैं, लेकिन सीखने के उद्देश्यों के लिए मैं यह देखना चाहता हूं कि यह कैसे काम करता है।

प्रशिक्षण जानकारी

set.seed(2015)
df <- data.frame(X1=c(rnorm(5), rnorm(5)+5), X2=c(rnorm(5), rnorm(5)+3), Y=c(rep(1,5), rep(-1, 5)))
df
           X1       X2  Y
1  -1.5454484  0.50127  1
2  -0.5283932 -0.80316  1
3  -1.0867588  0.63644  1
4  -0.0001115  1.14290  1
5   0.3889538  0.06119  1
6   5.5326313  3.68034 -1
7   3.1624283  2.71982 -1
8   5.6505985  3.18633 -1
9   4.3757546  1.78240 -1
10  5.8915550  1.66511 -1

library(ggplot2)
ggplot(df, aes(x=X1, y=X2, color=as.factor(Y)))+geom_point()

यहां छवि विवरण दर्ज करें

अधिकतम मार्जिन हाइपरप्लेन ढूँढना

एसवीएम पर इस विकिपीडिया लेख के अनुसार , अधिकतम मार्जिन हाइपरप्लेन खोजने के लिए मुझे हल करने की आवश्यकता है

argmin(w,b)12w2
विषय के लिए (किसी भी i = 1 के लिए, ..., n)
yi(wxib)1.

मैं अपने नमूना डेटा को R (उदाहरण के लिए quadprog ) में QP सॉल्वर में कैसे निर्धारित करूं?w


आपको दोहरी समस्या हल करनी होगी

2
@fcop क्या आप विस्तृत कर सकते हैं? इस मामले में क्या दोहरी बात है? मैं कैसे उपयोग कर हल करूं R? आदि
Ben

जवाबों:


6

सुझाव :

Quadprog निम्नलिखित हल करता है:

minxdTx+1/2xTDxsuch that ATxx0

पर विचार करें

x=(wb)and D=(I000)

जहां पहचान मैट्रिक्स ।I

यदि है और है :wp×1yn×1

x:(2p+1)×1D:(2p+1)×(2p+1)

इसी तरह की तर्ज पर:

x0=(11)n×1

अपनी असमानता बाधा का प्रतिनिधित्व करने के लिए ऊपर दिए गए संकेतों का उपयोग करके तैयार करें।A


1
मैं हार गया हूं। क्या है ? dT
बेन

1
आपके उद्देश्य फ़ंक्शन में का गुणांक क्या है ? नहीं लेकिन ? w||w||22w
अधिकार किया

1
मदद की सराहना करें। मुझे लगा कि मैंने यह पता लगा लिया है, लेकिन जब मैंने D = मैट्रिक्स सेट किया तो आपको quadprogत्रुटि "मैट्रिक्स D को द्विघात फ़ंक्शन में देता है जो सकारात्मक निश्चित नहीं है!"
बेन

3
हैक: उपद्रव का महत्व कहते जोड़कर विकर्ण परD1e6
rightskewed

7

अधिकार के संकेत के बाद ...

library(quadprog)

# min(−dvec^T b + 1/2 b^T Dmat b) with the constraints Amat^T b >= bvec)
Dmat       <- matrix(rep(0, 3*3), nrow=3, ncol=3)
diag(Dmat) <- 1
Dmat[nrow(Dmat), ncol(Dmat)] <- .0000001
dvec       <- rep(0, 3)
Amat       <- as.matrix(df[, c("X1", "X2")])
Amat <- cbind(Amat, b=rep(-1, 10))
Amat <- Amat * df$Y
bvec       <- rep(1, 10)
solve.QP(Dmat,dvec,t(Amat),bvec=bvec)

plotMargin <- function(w = 1*c(-1, 1), b = 1){
  x1 = seq(-20, 20, by = .01)
  x2 = (-w[1]*x1 + b)/w[2]
  l1 = (-w[1]*x1 + b + 1)/w[2]
  l2 = (-w[1]*x1 + b - 1)/w[2]
  dt <- data.table(X1=x1, X2=x2, L1=l1, L2=l2)
  ggplot(dt)+geom_line(aes(x=X1, y=X2))+geom_line(aes(x=X1, y=L1), color="blue")+geom_line(aes(x=X1, y=L2), color="green")+
    geom_hline(yintercept=0, color="red")+geom_vline(xintercept=0, color="red")+xlim(-5, 5)+ylim(-5, 5)+
    labs(title=paste0("w=(", w[1], ",", w[2], "), b=", b))
}

plotMargin(w=c(-0.5065, -0.2525), b=-1.2886)+geom_point(data=df, aes(x=X1, y=X2, color=as.factor(Y)))

यहां छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.