MATLAB

2014-11-11 4 views
5
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); 
  • इस गैर रेखीय वर्गीकरण समस्या को हल करने के लिए, मैं इस तरह के गाऊसी के रूप में कुछ गिरी कार्यों लिखा था (आरबीएफ), समरूप और गैर-समरूप बहुपद कर्नेल कार्यों।

    Gaussian Kernel

    का उपयोग करते हुए टाइलर सीरीज विस्तार, यह पैदावार:

    RBG with Tylor Expansion

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 क्रियान्वयन गलत है, लेकिन मैं 'डॉन टी पता है कि यह कैसे तय करने के लिए। कृपया मेरी मदद करो।

यहाँ मैं आउटपुट के रूप में मिल गया है:

Samples of ClassesMarking The Support Vectors of Classes

Adding Random Test DataClassification

जहां,

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 

और मैं आश्चर्यजनक रूप से अच्छा उत्पादन मिल गया:

quadratic kernel output 1quadratic kernel output 1

सारांश में, कार्यक्रम सही ढंग से समरूप बहुपद गिरी उपयोग करने के साथ काम कर रहा है लेकिन जब मैं RBF उपयोग करें, यह 'isn टी सही ढंग से काम, वहाँ कुछ RBF कार्यान्वयन के साथ गलत है।

आप RBF (गाऊसी कर्नेल) के बारे में पता है मुझे पता है कि मैं कैसे कर सकते हैं यह सही ..

संपादित करें तो कृपया: आप एक ही मुद्दा है, तो RBF सीधे का उपयोग करें कि ऊपर बताया गया है और फ़ाई द्वारा यह separe नहीं है।

+0

क्यों आप हार्ड मार्जिन प्रयोग करते हैं? जहां तक ​​मुझे पता है, हार्ड मार्जिन का उपयोग करना अक्सर एक वर्ग पर गलतियों को करने के लिए होता है। क्या आपने पैरामीटर को ट्यून किया है? – Jake0x32

+0

मुझे आपके जैसा अनुभव नहीं मिला है; लेकिन समस्या को स्थापित करने के कारण, मैंने त्रुटि के बिना अलग करने के लिए नमूना डेटा जेनरेट किया ताकि समर्थन वेक्टर मशीन कक्षाओं को किसी भी प्रकार की त्रुटि को परिभाषित किए बिना वर्गीकृत करने में सक्षम हो, इसलिए मैंने हार्ड मार्जिन का उपयोग किया। और, आरबीएफ कर्नेल (प्रोग्राम में "sigma2 = 2") का भिन्नता इस एप्लिकेशन के लिए बड़ा है, मुझे पता है, लेकिन मैं इस पैरामीटर को समायोजित नहीं कर सकता। मुझे लगता है कि समस्या मेरे gaussian कर्नेल() फ़ंक्शन के कारण है। मैंने इसे गलत तरीके से कार्यान्वित किया होगा, और मुझे यह नहीं पता कि इसे कैसे ठीक किया जाए .. – mehmet

+0

जहां तक ​​मुझे पता है, आरबीएफ कर्नेल का उपयोग करते समय हम सी और गामा दोनों पर तेजी से बढ़ते पैरामीटर की कोशिश करके ग्रिड खोज का प्रयास कर सकते हैं, जहां वहां एक 2-डी ग्रिड है जो सर्वोत्तम मॉडल खोजने के लिए उपयोग किया जाता है। जब तक यह एक अच्छा पैरामीटर है, तब तक मैं हमेशा गॉसियन कर्नेल की क्षमता से आश्वस्त हूं। – Jake0x32

उत्तर

1

आप गॉसियन कर्नेल के लिए फ़ी की गणना क्यों करना चाहते हैं? फाई अनंत आयामी वेक्टर होगा और आप अपनी टेलर श्रृंखला में शर्तों को 10 तक सीमित कर रहे हैं जब हम यह भी नहीं जानते कि 10 कर्नेल मूल्यों का अनुमान लगाने के लिए पर्याप्त है या नहीं! आमतौर पर, कर्नेल को फाई (और कंप्यूटिंग के) प्राप्त करने के बजाय सीधे गणना की जाती है। उदाहरण के लिए [1]।

क्या इसका मतलब है कि हमें गॉसियन के लिए कभी भी गणना नहीं करना चाहिए? वास्तव में नहीं, नहीं, लेकिन हमें इसके बारे में थोड़ा समझदार होना है। हाल ही में काम किए गए हैं [2,3] जो दिखाते हैं कि गॉसियन के लिए फाई की गणना कैसे करें ताकि आप केवल परिमित आयामी फाई के दौरान अनुमानित कर्नेल मैट्रिक्स की गणना कर सकें। यहां [4] मैं कागज से चाल का उपयोग कर अनुमानित कर्नेल उत्पन्न करने के लिए बहुत सरल कोड देता हूं। हालांकि, मेरे प्रयोगों में मुझे 100 से 10000 आयामी फाई से कहीं भी उत्पन्न करने की आवश्यकता होती है ताकि कर्नेल का अच्छा अनुमान प्राप्त हो सके (मूल इनपुट के साथ-साथ उस दर पर निर्भर करता है जिस पर इगनेवल मूल मैट्रिक्स tapers बंद)।

फिलहाल, गॉसियन कर्नेल उत्पन्न करने के लिए [1] के समान कोड का उपयोग करें और फिर SVM के परिणाम का निरीक्षण करें। इसके अलावा, गामा पैरामीटर के साथ खेलें, एक खराब गामा पैरामीटर वास्तव में खराब वर्गीकरण का परिणाम हो सकता है।

[1] https://github.com/ssamot/causality/blob/master/matlab-code/Code/mfunc/indep/HSIC/rbf_dot.m

[2] http://www.eecs.berkeley.edu/~brecht/papers/07.rah.rec.nips.pdf

[3] http://www.eecs.berkeley.edu/~brecht/papers/08.rah.rec.nips.pdf

[4] https://github.com/aruniyer/misc/blob/master/rks.m

1

चूंकि गॉसियन कर्नेल को अक्सर अनंत आयामों के लिए मैपिंग के रूप में जाना जाता है, इसलिए मुझे हमेशा इसकी क्षमता में विश्वास होता है। एसवीएम प्रशिक्षण के लिए हमेशा ग्रिड खोज को ध्यान में रखते हुए यहां खराब समस्या के कारण समस्या खराब है। इस प्रकार मैं प्रस्ताव करता हूं कि आप here पर एक नज़र डालें जहां आप पैरामीटर ट्यूनिंग के लिए कुछ युक्तियां पा सकते हैं। तेजी से बढ़ते क्रम आमतौर पर उम्मीदवारों के रूप में उपयोग किया जाता है।