Linearly Non-Separable Binary Classification Problem
में कार्यान्वित मूल SVM आरबीएफ (gaussian कर्नेल()) के लिए सही ढंग से काम नहीं कर रहा है और मैं इसे ठीक करना चाहता हूं।MATLAB
यह हार्ड मार्जिन एप्लिकेशन के साथ 2 वर्ग वर्गीकृत करने के लिए एक गैर-रैखिक एसवीएम डेमो है।
समस्या लगभग 2 आयामी रेडियल यादृच्छिक distrubuted डेटा है।
मैं द्विघात प्रोग्रामिंग सॉल्वर इस्तेमाल किया गणना करने के लिए Lagrange मल्टीप्लायरों (alphas)
xn = input .* (output*[1 1]); % xiyi phi = gaussianKernel(xn, sigma2); % Radial Basis Function k = phi * phi'; % Symmetric Kernel Matrix For QP Solver gamma = 1; % Adjusting the upper bound of alphas f = -ones(2 * len, 1); % Coefficient of sum of alphas Aeq = output'; % yi beq = 0; % Sum(ai*yi) = 0 A = zeros(1, 2* len); % A * alpha <= b; There isn't like this term b = 0; % There isn't like this term lb = zeros(2 * len, 1); % Lower bound of alphas ub = gamma * ones(2 * len, 1); % Upper bound of alphas alphas = quadprog(k, f, A, b, Aeq, beq, lb, ub);
- इस गैर रेखीय वर्गीकरण समस्या को हल करने के लिए, मैं इस तरह के गाऊसी के रूप में कुछ गिरी कार्यों लिखा था (आरबीएफ), समरूप और गैर-समरूप बहुपद कर्नेल कार्यों।
का उपयोग करते हुए टाइलर सीरीज विस्तार, यह पैदावार:
RBF के लिए, मैं नीचे छवि में समारोह लागू किया
और, मैं इस तरह गाऊसी कर्नेल अलग:
कश्मीर (एक्स, एक्स ') = फ़ाई (x)' * फ़ाई (एक्स ')
इस विचार के कार्यान्वयन है:
function phi = gaussianKernel(x, Sigma2) gamma = 1/(2 * Sigma2); featDim = 10; % Length of Tylor Series; Gaussian Kernel Converge 0 so It doesn't have to Be Inf Dimension phi = []; % Kernel Output, The Dimension will be (#Sample) x (featDim*2) for k = 0 : (featDim - 1) % Gaussian Kernel Trick Using Tylor Series Expansion phi = [phi, exp(-gamma .* (x(:, 1)).^2) * sqrt(gamma^2 * 2^k/factorial(k)) .* x(:, 1).^k, ... exp(-gamma .* (x(:, 2)).^2) * sqrt(gamma^2 * 2^k/factorial(k)) .* x(:, 2).^k]; end end
*** मुझे लगता है कि मेरी RBF क्रियान्वयन गलत है, लेकिन मैं 'डॉन टी पता है कि यह कैसे तय करने के लिए। कृपया मेरी मदद करो।
यहाँ मैं आउटपुट के रूप में मिल गया है:
जहां,
1) पहली छवि: कक्षाके नमूने 2) दूसरी छवि: कक्षा
3) का समर्थन वेक्टर अंकन तीसरे छवि: रैंडम टेस्ट डाटा जोड़ना
4) चौथे छवि: वर्गीकरण
इसके अलावा, मैं कार्यान्वित समरूप Polinomial कर्नेल "कश्मीर (एक्स, एक्स ') =()^2 ", कोड है:
function phi = quadraticKernel(x) % 2-Order Homogenous Polynomial Kernel phi = [x(:, 1).^2, sqrt(2).*(x(:, 1).*x(:, 2)), x(:, 2).^2]; end
और मैं आश्चर्यजनक रूप से अच्छा उत्पादन मिल गया:
सारांश में, कार्यक्रम सही ढंग से समरूप बहुपद गिरी उपयोग करने के साथ काम कर रहा है लेकिन जब मैं RBF उपयोग करें, यह 'isn टी सही ढंग से काम, वहाँ कुछ RBF कार्यान्वयन के साथ गलत है।
आप RBF (गाऊसी कर्नेल) के बारे में पता है मुझे पता है कि मैं कैसे कर सकते हैं यह सही ..
संपादित करें तो कृपया: आप एक ही मुद्दा है, तो RBF सीधे का उपयोग करें कि ऊपर बताया गया है और फ़ाई द्वारा यह separe नहीं है।
क्यों आप हार्ड मार्जिन प्रयोग करते हैं? जहां तक मुझे पता है, हार्ड मार्जिन का उपयोग करना अक्सर एक वर्ग पर गलतियों को करने के लिए होता है। क्या आपने पैरामीटर को ट्यून किया है? – Jake0x32
मुझे आपके जैसा अनुभव नहीं मिला है; लेकिन समस्या को स्थापित करने के कारण, मैंने त्रुटि के बिना अलग करने के लिए नमूना डेटा जेनरेट किया ताकि समर्थन वेक्टर मशीन कक्षाओं को किसी भी प्रकार की त्रुटि को परिभाषित किए बिना वर्गीकृत करने में सक्षम हो, इसलिए मैंने हार्ड मार्जिन का उपयोग किया। और, आरबीएफ कर्नेल (प्रोग्राम में "sigma2 = 2") का भिन्नता इस एप्लिकेशन के लिए बड़ा है, मुझे पता है, लेकिन मैं इस पैरामीटर को समायोजित नहीं कर सकता। मुझे लगता है कि समस्या मेरे gaussian कर्नेल() फ़ंक्शन के कारण है। मैंने इसे गलत तरीके से कार्यान्वित किया होगा, और मुझे यह नहीं पता कि इसे कैसे ठीक किया जाए .. – mehmet
जहां तक मुझे पता है, आरबीएफ कर्नेल का उपयोग करते समय हम सी और गामा दोनों पर तेजी से बढ़ते पैरामीटर की कोशिश करके ग्रिड खोज का प्रयास कर सकते हैं, जहां वहां एक 2-डी ग्रिड है जो सर्वोत्तम मॉडल खोजने के लिए उपयोग किया जाता है। जब तक यह एक अच्छा पैरामीटर है, तब तक मैं हमेशा गॉसियन कर्नेल की क्षमता से आश्वस्त हूं। – Jake0x32