k-NN कम्प्यूटेशनल जटिलता


18

भोले खोज के दृष्टिकोण (कोई kd पेड़ या सिमिलर्स) के साथ k -NN एल्गोरिथ्म की समय जटिलता क्या है ?

मैं हाइपरपरमीटर k पर विचार करते हुए इसकी समय जटिलता में रुचि रखता हूं । मुझे विरोधाभासी उत्तर मिले हैं:

  1. O (nd + kn), जहां n प्रशिक्षण सेट की कार्डिनैलिटी है और प्रत्येक नमूने का आयाम d है। [1]

  2. हे (NDK), जहां फिर से n प्रशिक्षण सेट की प्रमुखता है और d प्रत्येक नमूने के आयाम। [2]

[१] http://www.csd.uwo.ca/courses/CS9840a/Lecture2_knn.pdf (पृष्ठ 18/20)

[२] http://www.cs.haifa.ac.il/~rita/ml_course/lectures/KNN.pdf (पृष्ठ 18/31)

जवाबों:


20

मान लिया जाए कि तय हो गया है (जैसा कि दोनों जुड़े हुए व्याख्यान करते हैं), तो आपके एल्गोरिदमिक विकल्प यह निर्धारित करेंगे कि क्या आपकी गणना O ( n d + k n ) रनटाइम या O ( n d k ) रनटाइम लेती है।kO(nd+kn)O(ndk)

पहले, आइए रनटाइम एल्गोरिदम पर विचार करें:O(nd+kn)

  • प्रारंभ सभी टिप्पणियों के लिए मैं प्रशिक्षण सेट मेंselectedi=0i
  • प्रत्येक प्रशिक्षण सेट अवलोकन के लिए , गणना मैं रों टी मैं , प्रशिक्षण सेट अवलोकन करने के लिए नए अवलोकन से दूरी मैंidistii
  • के लिए के लिए k लूप सभी प्रशिक्षण सेट टिप्पणियों के माध्यम से, सूचकांक का चयन: मैं छोटी से छोटी के साथ मैं रों टी मैं मूल्य और जिसके लिए रों j=1kidistiS e l e c t e d i = 1 सेट करके इस अवलोकन का चयन करें।selectedi=0selectedi=1
  • चयनित सूचकांकों को वापस करेंk

प्रत्येक दूरी की गणना के लिए रनटाइम की आवश्यकता होती है, इसलिए दूसरे चरण में O ( n d ) रनटाइम की आवश्यकता होती है। तीसरे चरण में प्रत्येक पुनरावृत्ति के लिए, हम प्रशिक्षण सेट टिप्पणियों के माध्यम से लूपिंग करके ( एन ) कार्य करते हैं, इसलिए समग्र रूप से ( एन के ) कार्य के लिए चरण की आवश्यकता होती है । पहले और चौथे चरण में केवल O ( n ) कार्य की आवश्यकता होती है , इसलिए हमें O ( n d + k n ) रनटाइम मिलता है।O(d)O(nd)O(n)O(nk)O(n)O(nd+kn)

अब, आइए एक रनटाइम एल्गोरिदम पर विचार करें:O(ndk)

  • प्रारंभ सभी टिप्पणियों के लिए मैं प्रशिक्षण सेट मेंselectedi=0i
  • के लिए के लिए k : लूप सभी प्रशिक्षण सेट टिप्पणियों के माध्यम से और गणना दूरी चयनित प्रशिक्षण सेट अवलोकन और नए अवलोकन के बीच। इंडेक्स I को सबसे छोटे d मान के साथ चुनें जिसके लिए s e l e c c t e d i = 0 हैS e l e c t e d i = 1 सेट करके इस अवलोकन का चयन करें ।j=1kdidselectedi=0selectedi=1
  • चयनित सूचकांकों को वापस करेंk

दूसरे चरण में प्रत्येक पुनरावृति के लिए, हम नए अवलोकन और प्रत्येक प्रशिक्षण सेट अवलोकन के बीच की दूरी की गणना करते हैं, इसमें पुनरावृत्ति के लिए कार्य की आवश्यकता होती है और इसलिए O ( n d k ) समग्र रूप से कार्य करते हैं।O(nd)O(ndk)

दो एल्गोरिदम के बीच का अंतर यह है कि पहला प्रीकम्प्यूट करता है और दूरस्थ ( अतिरिक्त मेमोरी की आवश्यकता होती है ) स्टोर करता है, जबकि दूसरा नहीं करता है। हालाँकि, यह देखते हुए कि हम पहले से ही पूरे प्रशिक्षण सेट को स्टोर करते हैं, जिसमें O ( n d ) मेमोरी की आवश्यकता होती है , साथ ही s e l l e c t e d वेक्टर, O ( n ) स्टोरेज की आवश्यकता होती है , दो एल्गोरिदम का संग्रहण असमान रूप से होता है। वही। परिणामस्वरूप, k > 1 के लिए बेहतर स्पर्शोन्मुख रनटाइम पहले एल्गोरिथ्म को अधिक आकर्षक बनाता है।O(n)O(nd)selectedO(n)k>1

यह ध्यान देने योग्य है कि एक एल्गोरिथम सुधार का उपयोग करके रनटाइम प्राप्त करना संभव है :O(nd)

  • प्रत्येक प्रशिक्षण सेट अवलोकन के लिए , गणना मैं रों टी मैं , प्रशिक्षण सेट अवलोकन करने के लिए नए अवलोकन से दूरी मैंidistii
  • ( n ) रनटाइम में k t h सबसे छोटी दूरी की गणना करने के लिए क्विकसेक एल्गोरिथम चलाएंkthO(n)
  • सभी सूचकांकों कोई गणना की तुलना में बड़ा लौटें छोटी से छोटी दूरीkth

यह दृष्टिकोण इस तथ्य का लाभ उठाता है कि एक अनियोजित सरणी में सबसे छोटे मान को खोजने के लिए कुशल दृष्टिकोण मौजूद है ।kth


1
महान जवाब और मैं विशेष रूप से के उपयोग के लिए सलाह पसंद है quickselect
us --r11852 का कहना है कि

एक और प्रश्न: तीसरे विकल्प के लिए मेरा मानना ​​है कि समय जटिलता ओ (nd + k) होनी चाहिए, क्योंकि आपको अभी भी एक भविष्यवाणी करने के लिए k- निकटतम पड़ोसियों के बीच सबसे आम लेबल की गणना करना है, है ना?
डैनियल लोपेज

@Daniel के बाद से , हे ( एन डी + कश्मीर ) के रूप में ही है हे ( एन डी )knO(nd+k)O(nd)
२२:०६ पर josliber

पिछली बार मैं आपको परेशान करता हूं: k -NN के संशोधित संस्करण की कम्प्यूटेशनल जटिलता को निर्धारित करने की कोशिश कर रहा हूं, जिस पर मैं काम कर रहा हूं, मुझे निम्नलिखित मिलते हैं: O (nd + nd / p) जहां परिभाषा n , d और p पूर्णांक से अधिक हैं शून्य। क्या मैं इसे O (nd) को सरल बना सकता हूं ?
डैनियल लोपेज़

@ डैनियल हां, उस स्थिति में काम करता है। O(nd)
josliber
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.