matlab - Appropriate zero variance handling for vectorised feature normalization? -


समस्या: जब ऑक्टेव में सामान्यता चालू है, शून्य-भिन्नता इनपुट div-zero त्रुटियों का कारण बनता है

प्रश्न: क्या vectorised डेटा के साथ काम करते समय div-zero को नियंत्रित करने के लिए एक अच्छा (आर) तरीका है?

उदाहरण: इनपुट एक मैट्रिक्स है जिसमें कॉलम में एकाधिक डेटासेट हैं:

  एक्स = [1 3.5 7.5 9; 1 4 8 9; 1 4.5 8.5 9]  

तो X में तीन श्रृंखलाएं हैं: x_1 = [1,1,1] , x_2 = [7.5, 8, 8.5] , और x_3 = [9 9, 9] । प्रत्येक सेट को सामान्य करने के लिए वेक्टरविज़ेशन का इस्तेमाल करते हुए निम्नलिखित दृष्टिकोण समझदार लगता है:

  mu = mean (x); सिग्मा = एसटीडी (एक्स); X_norm = (1 /। सिग्मा)। * (एक्स - म्यू);  

हालांकि, उपरोक्त दृष्टिकोण असफल हो जायेगा क्योंकि दोनों x_1 और x_3 के पास शून्य विचरण होता है और इसलिए विभाजन-दर-शून्य त्रुटियां उत्पन्न होती हैं ।

शून्य विचरण डेटा की मेरी पसंदीदा संभाल 1 से सिग्मा सेट करना है। वर्तमान में मैं निम्नलिखित कल्ग का उपयोग कर रहा हूं:

  डेटासेट_ आकार + लंबाई (सिग्मा); अनुक्रमणिका = 1 के लिए: डेटासेट_आकार यदि सिग्मा (इंडेक्स) == 0 सिग्मा (इंडेक्स) = 1; एंडीफ़ एंड  

नोट्स:

  • विभाजन और घटाव कार्यों में, दो बार यहां उपयोग किया जा रहा है
  • यह उदाहरण ओक्टेव में आधारित है , लेकिन सवाल समान रूप से MATLAB पर लागू हो सकता है।
  • यह उदाहरण उदाहरण के लिए सरल है - 'वास्तविक' उपयोग में अधिक, बड़ा डेटासेट होगा
  • यह उदाहरण होगा
  • प्रासंगिक लग रहा था, लेकिन (जैसा कि नाम सुझाता है) z-score की गणना करने के लिए बेहतर अनुकूल है ...
  • / Ul>

क्यों ऐसा नहीं है?

  mu = mean (x); सिग्मा = एसटीडी (एक्स); सिग्मा (सिग्मा == 0) = 1; % // zeros X_norm = (1 / sigma) को निकालने के लिए इस लाइन को जोड़ें। * (एक्स - म्यू);  

या, कुछ कार्यों को सहेजने के लिए:

  म्यू = मतलब (एक्स); सिग्मा = एसटीडी (एक्स); इंडस्ट्रीज़ = सिग्मा ~ = 0; % // शून्य मानों का पता लगाएं X_norm = X - mu; X_norm (:, इंड) = X_norm (:, इंडस्ट्रीज़) ./ सिग्मा (इंडस्ट्रीज़);  

सामान्य में, यह

  सिग्मा (सिग्मा और लेफ्टिनेंट; = tol) = 1 का उपयोग करने के लिए बेहतर हो सकता है;  

पहले दृष्टिकोण में, या

  इंडस्ट्रीज़ = सिग्मा> टोल; किसी भी सहिष्णुता  tol  (उदाहरण के लिए  tol = 1e-10 ) के लिए शून्य में करीब   

मानों का पता लगाएं। )। यह अनुप्रयोगों में एक बेहतर तरीका है, जहां परिमित-सटीक त्रुटियों को शून्य के बजाय 1e-15 जैसे मूल्य उत्पन्न कर सकते हैं।


Comments