Nonlinear सीमाओं के साथ वर्गीकरण समस्याओं को एक सरल अवधारणात्मक द्वारा हल नहीं किया जा सकता है । निम्नलिखित आर कोड निदर्शी उद्देश्यों के लिए है और पायथन में इस उदाहरण पर आधारित है ):
nonlin <- function(x, deriv = F) {
if (deriv) x*(1-x)
else 1/(1+exp(-x))
}
X <- matrix(c(-3,1,
-2,1,
-1,1,
0,1,
1,1,
2,1,
3,1), ncol=2, byrow=T)
y <- c(0,0,1,1,1,0,0)
syn0 <- runif(2,-1,1)
for (iter in 1:100000) {
l1 <- nonlin(X %*% syn0)
l1_error <- y - l1
l1_delta <- l1_error * nonlin(l1,T)
syn0 <- syn0 + t(X) %*% l1_delta
}
print("Output After Training:")
## [1] "Output After Training:"
round(l1,3)
## [,1]
## [1,] 0.488
## [2,] 0.468
## [3,] 0.449
## [4,] 0.429
## [5,] 0.410
## [6,] 0.391
## [7,] 0.373
अब कर्नेल और तथाकथित कर्नेल ट्रिक का विचार इनपुट स्पेस को एक उच्च आयामी स्थान में प्रोजेक्ट करना है, जैसे कि ( पिक्स के स्रोत ):
मेरा प्रश्न
मैं कर्नेल ट्रिक का उपयोग कैसे करूं (जैसे एक साधारण द्विघात कर्नेल के साथ) ताकि मुझे एक कर्नेल परसेप्ट्रॉन मिले , जो दी गई वर्गीकरण समस्या को हल करने में सक्षम है? कृपया ध्यान दें: यह मुख्य रूप से एक वैचारिक प्रश्न है लेकिन यदि आप आवश्यक कोड संशोधन भी दे सकते हैं तो यह बहुत अच्छा होगा
मैंने
जो अभी तक कोशिश की, मैंने निम्नलिखित कोशिश की जो ठीक काम करता है लेकिन मुझे लगता है कि यह वास्तविक सौदा नहीं है क्योंकि यह अधिक जटिल समस्याओं के लिए कम्प्यूटेशनल रूप से बहुत महंगा हो जाता है ("कर्नेल ट्रिक" के पीछे "चाल" सिर्फ एक विचार नहीं है कर्नेल स्वयं लेकिन आपको सभी उदाहरणों के लिए प्रक्षेपण की गणना करने की आवश्यकता नहीं है):
X <- matrix(c(-3,9,1,
-2,4,1,
-1,1,1,
0,0,1,
1,1,1,
2,4,1,
3,9,1), ncol=3, byrow=T)
y <- c(0,0,1,1,1,0,0)
syn0 <- runif(3,-1,1)
पूर्ण प्रकटीकरण
मैंने एसओ पर एक सप्ताह पहले यह प्रश्न पोस्ट किया था लेकिन इस पर बहुत ध्यान नहीं गया। मुझे संदेह है कि यहां एक बेहतर जगह है क्योंकि यह एक प्रोग्रामिंग प्रश्न की तुलना में अधिक वैचारिक प्रश्न है।