2010-09-10 19 views
7

स्टॉम्पचिकन के सुधारों के साथ (मैंने एक डॉट उत्पाद को गलत तरीके से दबाया, उह!) जवाब हां प्रतीत होता है। मैंने तब से एक ही समस्या का परीक्षण किया है जो एक ही सही परिणाम के साथ प्रीकंप्यूटेड कर्नेल का उपयोग कर रहा है। यदि आप libsvm StompChickens स्पष्ट का उपयोग कर रहे हैं, व्यवस्थित गणना बहुत अच्छी जांच है।libsvm सटीक है?

मूल प्रश्न: मैं के बारे में libSVM में precomputed कर्नेल का उपयोग शुरू कर रहा हूँ। मैंने Vlad's answer पर एक प्रश्न के लिए देखा था और मैंने सोचा कि यह पुष्टि करना बुद्धिमान होगा कि libsvm ने सही उत्तर दिए हैं। मैंने गैर-प्रीकंप्यूटेड कर्नेल के साथ शुरू किया, केवल 3 सरल और अंतरिक्ष वाले तीन डेटा बिंदुओं के साथ एक साधारण रैखिक कर्नेल। मैं डेटा

इस्तेमाल किया
1 1:3 2:1 3:0 
2 1:3 2:3 3:1 
1 1:7 3:9 

जब मैं हाथ से समाधान नहीं है कि मैं क्या मिल गणना मॉडल svm-train -s 0 - t 0 के लिए एक कॉल द्वारा उत्पन्न फ़ाइल

svm_type c_svc 
kernel_type linear 
nr_class 2 
total_sv 3 
rho -1.53951 
label 1 2 
nr_sv 2 1 
SV 
0.4126650675419768 1:3 2:1 3:0 
0.03174528241667363 1:7 3:9 
-0.4444103499586504 1:3 2:3 3:1 

शामिल हालांकि। क्या किसी को पता है कि libsvm त्रुटियों से पीड़ित है या कोई भी नोट्स की तुलना कर सकता है और देख सकता है कि उन्हें libsvm एक ही चीज़ मिलती है या नहीं?

गुणांक a1, a2, a3 libsvm द्वारा लौटाए गए मानों प्रतिबंधों के साथ

a1 + a2 + a3 - 5*a1*a1 + 12*a1*a2 - 21*a1*a3 - 19*a2*a2/2 + 21*a2*a3 - 65*a3*a3 

के रूप में संभव के रूप में बड़े बनाने होना चाहिए कि a1 + a3 = a2 और a1 से प्रत्येक, a2, a3 के लिए आवश्यक है 0 और 1 के बीच झूठ (सी का डिफ़ॉल्ट मान)।

ऊपर मॉडल फ़ाइल का कहना है इस सवाल का जवाब

a1 = .412665... 
a2 = .444410... 
a3 = .031745... 

लेकिन एक बस बड़ा सूत्र में ऊपर a2 = a1 + a3 स्थानापन्न और इस बात की पुष्टि दोनों आंशिक डेरिवेटिव शून्य हैं देखने के लिए अगर यह समाधान सही (a1 के बाद से कोई भी है करने के लिए किया है , a2, a3 0 या 1 है) लेकिन वे शून्य नहीं हैं।

मैं कुछ गलत कर रहा हूँ, या libsvm बुरे परिणाम दे रहा है? (मुझे लगता है मैं कुछ गलत कर रहा हूँ उम्मीद कर रहा हूँ।)

उत्तर

9

LibSVM एक बहुत ही व्यापक रूप से इस्तेमाल पुस्तकालय है और मैं अत्यधिक शक कुछ भी कोड के साथ काफी गलत है। उस ने कहा, मुझे लगता है कि यह बहुत अच्छा है कि ऐसे लोग हैं जो वास्तव में शुद्धता के लिए जांचने के लिए पर्याप्त भयानक हैं - अच्छी तरह से किया गया!

समाधान नीचे दिए गए काम के अनुसार सही लगता है। मेरा मतलब यह है कि यह KKT conditions (15.2 9) को संतुष्ट करता है। यह भी सच है कि दोहरी के आंशिक डेरिवेटिव समाधान में गायब हो जाते हैं।

यहाँ मेरी काम कर रहा है ...

x1 = (3,1,0) x2 = (3,3,1) x3 = (7,0,9) 
y1 = -1  y2 = 1  y3 = -1 

K = [10 12 21] 
    [12 19 30] 
    [21 30 130] 

L_dual = a1 + a2 + a3 -5a1^2 + 12a1a2 - 21a1a3 - (19/2)a2^2 + 30a2a3 - 65a3^2) 

a1 = 0.412 a2 = 0.4444 a3 = 0.0317 

Checking KKT: 
y1.f(x1) = y1 * (y1*a1*K(x1,x1) + y2*a2*K(x1,x2) + y3*a3*k(x1,x3) - rho) 
     = rho + 10*a1 + 21*a3 - 12*a2 
     ~= 1 
(Similar for the x2 and x3) 

Substituting a2 = a1 + a3 into L_dual: 
L_dual = 2a1 + 2a3 - 2.5a1^2 + 2a1a3 - 44.5a3^2 
dL/da1 = 2 - 5a1 + 2a3 = 0 
dL/da3 = 2 + 2a1 - 89a3 = 0 
संबंधित मुद्दे