कैसे 'समझदारी से' बिन सॉर्ट किए गए डेटा का एक संग्रह?


11

मैं समझदारी से बिन एक छांटे हुए संग्रह की कोशिश कर रहा हूं। मेरे पास डेटा के टुकड़ों का एक संग्रह है । लेकिन मुझे पता है कि यह डेटा मी असमान आकार के डिब्बे में फिट बैठता है। मुझे नहीं पता कि डेटा को ठीक से फिट करने के लिए समझदारी से कैसे एंडपॉइंट्स का चयन करना है। उदाहरण के लिए:nm

कहो कि मेरे संग्रह में 12 आइटम हैं, और मुझे पता है कि डेटा 3 डिब्बे में फिट होगा:

Index:  1 2 3 4 5 6 7 8 9 10 11 12
Value:  1 1 1 3 3 3 3 3 3 5  5  6

मैं कैसे समझदारी से के डिब्बे के लिए अपने ब्रेकप्वाइंट का चयन करता हूं ?i={13},{49},{1012}

वर्तमान कार्यान्वयन मैं डेटा को समान रूप से डिब्बे में तोड़ता है और फिर डिब्बे के अंत के लिए अनुक्रमित खोजने के लिए समापन बिंदु का औसत लेता है। तो यह इस तरह काम करता है:

Index:  1 2 3 4 5 6 7 8 9 10 11 12
Value:  1 1 1 3 3 3 3 3 3 5  5  6

first break evenly: i = 1-4, 5-8, 9-12
mean endpoints:  between 4 and 5: (3+3)/2 = 3
                 between 8 and 9: (3+3)/2 = 3

तो अब बिन 1 में 3 से नीचे कुछ भी फिट बैठता है, 3 से ऊपर कुछ भी, लेकिन 3 से नीचे बिन 2 में फिट बैठता है, और 3 में से कुछ भी बिन में फिट बैठता है। आप देख सकते हैं कि मेरी समस्या क्या है। यदि डेटा में असमान डिब्बे हैं तो मेरी विधि विफल हो जाती है।

एक मित्र ने k- निकटतम पड़ोसी एल्गोरिथ्म का उल्लेख किया, लेकिन मुझे यकीन नहीं है।


1
क्या आप बता सकते हैं कि "समझदारी" का क्या मतलब है? बिनिंग के साथ आप क्या करने की कोशिश कर रहे हैं? आप पहले स्थान पर क्यों बन रहे हैं?
whuber

<3bin13&<4bin24bin3

मेरा मतलब समझदारी से है जैसे कि भोलेपन में नहीं है जैसे मैंने माना कि डिब्बे समान रूप से थे। यदि डेटा का एक टुकड़ा एक विशिष्ट बिन में गिरता है जो मुझे डेटा के उस टुकड़े के बारे में बहुत महत्वपूर्ण बताता है। मैं बिन ब्रेक सूचकांकों को निर्धारित करने के लिए डेटा को सॉर्ट करता हूं और फिर तय करता हूं कि डेटा का प्रत्येक टुकड़ा व्यक्तिगत रूप से किस बिन पर गिरता है।
मैथ्यू केम्नेट

जब तक मैंने अपने औसत में कुछ गलत नहीं किया मुझे लगता है कि मेरे पास यह सही है। यहां तक ​​कि चुनने से; y मेरे सभी समापन बिंदु 3 के हैं। इसलिए मैं अपना डेटा ठीक से नहीं कर सकता। यही कारण है कि मेरा कार्यान्वयन भी बिना टूट जाता है;
मैथ्यू केम्नेट्ज़

यहाँ मैंने कुछ अलग सेटिंग में किया है।
मैक्रो

जवाबों:


9

मुझे लगता है कि आप जो करना चाहते हैं उसे क्लस्टरिंग कहते हैं। आप अपने "मान" को एक साथ समूहित करना चाहते हैं जैसे समान बिन में समान मान एकत्र किए जाते हैं और कुल डिब्बे की संख्या पूर्व निर्धारित होती है।

आप k- साधन क्लस्टरिंग एल्गोरिथ्म का उपयोग करके इस समस्या को हल कर सकते हैं । MATLAB में, आप यह कर सकते हैं:

bin_ids = kmeans(Values,3); 

उपरोक्त कॉल Valuesतीन समूहों में मानों को समूहित करेगा जैसे कि भीतर-समूह भिन्नता न्यूनतम है।


1
मुझे वह भी मिल गया। यह वही है जो मैंने लागू किया है और इसने शानदार काम किया है। मैं यहाँ अपने सवाल का जवाब देने आया था, लेकिन आपने मुझे हरा दिया! क्लस्टरिंग था जो मैं करने की कोशिश कर रहा था।
मैथ्यू केम्नेट्ज़

8

k- साधन एक विकल्प है, लेकिन यह 1 आयामी डेटा के लिए बहुत समझदार नहीं है। एक आयामी डेटा में, आपके पास एक बहुत बड़ा लाभ है: डेटा को पूरी तरह से सॉर्ट किया जा सकता है।

इसके बजाय प्राकृतिक विराम अनुकूलन पर एक नज़र डालें :
http://en.wikipedia.org/wiki/Jenks_natural_breaks_optimization


यह बेहद दिलचस्प है। क्या आप संभवतः इस बारे में अधिक विस्तार से जा सकते हैं कि यह k के साधनों से बेहतर क्यों हो सकता है?
मैथ्यू केम्नेट्ज़

मेरे द्वारा पूछे जाने का मुख्य कारण यह है कि मैं अपने एल्गोरिथ्म के लिए MATLAB का उपयोग कर रहा हूं और मुझे किसी भी टूलबॉक्स आदि में जेनेक्स के प्राकृतिक ब्रेक अनुकूलन का पता नहीं चल सका है, इसलिए मुझे अपने स्वयं के कार्यान्वयन की आवश्यकता होगी। मैं सिर्फ यह जानना चाहता था कि गियर्स स्विच करने और इसे लागू करने से पहले यह कितना बेहतर / तेज हो सकता है।
मैथ्यू केम्नेट्ज़

1
k- साधन बहुत बेवकूफ है। इसका मतलब है, और यह हमेशा दो साधनों के बीच में विभाजित होगा । इसलिए दिए गए उदाहरण के लिए 0 1 2 3 4 5 7 7 7, k- साधन 4 और 5 के बीच विभाजित करना पसंद करेंगे। कभी-कभी यह 3 और 4 के बीच भी विभाजित होगा
हैस क्विट - एनी-मूस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.