2010-07-02 6 views
6

मैं ऐसे उत्तरों की तलाश कर रहा हूं जो स्केल करते हैं, लेकिन मेरे विशिष्ट उद्देश्य के लिए, मेरे पास 48 वां आयाम वेक्टर है। इसे 0 और 255 के बीच 48 पूर्णांक की सरणी के रूप में दर्शाया जा सकता है।किसी दिए गए वेक्टर में वेक्टर शब्दकोश के लिए फास्ट लुकअप। उच्च आयाम

मेरे पास इन वैक्टरों का एक बड़ा शब्दकोश है, उनमें से लगभग 25 हजार।

मुझे अपने वेक्टर लेने में सक्षम होना चाहिए जो मेरे डेटाबेस में हो सकता है या नहीं, और जल्दी से पता चलता है कि डेटाबेस से कौन सा वेक्टर निकटतम है। निकटतम से, मेरा मतलब पारंपरिक दूरी सूत्र के संदर्भ में है।

मेरा कोड पायथन में समाप्त होगा लेकिन यह एक सामान्य प्रश्न है।

ब्रूट फोर्स बहुत धीमी है। मुझे एक करीबी शब्दकोश स्पीड लुकअप चाहिए। किसी के पास कोई विचार है?

उत्तर

4

एक और तकनीक है कि उपयोगी साबित होगा इलाके संवेदनशील हैशिंग है। यदि आप एक वेक्टर लौटने से खुश हैं जो लगभग निकटतम पड़ोसी है, तो तेज समाधान हैं। यहां देखें (http://www.cs.umd.edu/~mount/ANN/)

+0

एलएसएच अब तक मेरे लिए सबसे अच्छा प्रतीत होता है। http://www.mit.edu/~andoni/LSH/ एक महान संसाधन रहा है। एल्गोरिदम पर 2006 का पेपर सबसे उपयोगी रहा है। –

8

मैं kd-tree को लागू करने का सुझाव दूंगा जिस पर आप Nearest neighbour search कर सकते हैं। के आयामों में एन बिंदुओं के लिए सबसे खराब मामला खोज समय O(k.N^(1-1/k)) है, इसलिए इसे एन

में समय-समय पर स्केल करना चाहिए यदि मेरे पास समय है तो मैं इस उत्तर पर वापस आऊंगा और विकिपीडिया के बारे में कम जानकारी प्रदान करूंगा।

चूंकि आप पाइथन में काम कर रहे हैं क्योंकि kdtrees पर इस सिसिकी कुकबुक प्रविष्टि में मदद करनी चाहिए। http://en.wikipedia.org/wiki/Locality_sensitive_hashing

इसके अपने प्रश्न से स्पष्ट नहीं है कि आप निकटतम पड़ोसियों -exact- की जरूरत है:

+0

प्रभावी रूप से काफी terse, लेकिन कम से कम सूचक पर जगह लगता है! इस बीटीडब्ल्यू के लिए –

+0

धन्यवाद। मैंने इसमें बहुत कुछ किया है और जबकि kdtrees बहुत अच्छे हैं और मैंने बहुत कुछ सीखा है, नीचे दी गई एलएसएच विधि मेरी समस्या की उच्च आयामीता के कारण सबसे अधिक लागू समाधान प्रतीत होती है। –

संबंधित मुद्दे