6

के सेट की तुलना में मेरे पास डेटा के 2000 सेट हैं जिनमें प्रत्येक से 1000 से अधिक 2 डी चर शामिल हैं। मैं इसी तरह के आधार पर डेटा के इन सेटों को 20-100 क्लस्टर से कहीं भी क्लस्टर करना चाहता हूं। हालांकि, मुझे डेटा के सेट की तुलना करने की विश्वसनीय विधि के साथ आने में परेशानी हो रही है। मैंने कुछ (बल्कि आदिम) दृष्टिकोण और शोध के भारों की कोशिश की है, लेकिन मुझे ऐसा कुछ भी नहीं लगता है जो मुझे करने की ज़रूरत है।2 डी डेटा/स्कैटरप्लॉट्स

मैंने अपने डेटा प्लॉट किए गए 3 सेट के नीचे एक छवि पोस्ट की है। डेटा वाई अक्ष में 0-1 से घिरा हुआ है, और x अक्ष में ~ 0-0.10 रेंज के भीतर है (अभ्यास में, लेकिन सिद्धांत में 0.10 से अधिक हो सकता है)।

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

ग्रीन और लाल को बहुत अलग माना जाना चाहिए, लेकिन धक्का ढकने के लिए आता है, वे नीले और लाल से अधिक समान होना चाहिए।

http://img153.imageshack.us/img153/6730/screenshot20110204at004.png

मैं करने की कोशिश की:

  • समग्र overages और विचलन
  • समन्वय क्षेत्रों (में चर विभाजित के आधार पर तुलना यानी (0-0.10, 0-0.10), (0.10 -0.20, 0.10-0.20) ... (0.9-1.0, 0.9-1.0)) और क्षेत्र
  • के बीच साझा बिंदुओं के आधार पर समानता की तुलना करें मैंने डेटा सेट
  • के बीच निकटतम पड़ोसियों को औसत यूक्लिडियन दूरी को मापने का प्रयास किया है

इन सभी ने दोषपूर्ण परिणाम दिए हैं। मेरे शोध में मुझे सबसे नज़दीकी उत्तर मिल सकता था "Appropriate similarity metrics for multiple sets of 2D coordinates"। हालांकि, वहां दिए गए उत्तर से केंद्र के निकट पड़ोसियों के बीच औसत दूरी की तुलना करने का सुझाव मिलता है, जो मुझे नहीं लगता कि मेरे लिए दिशा के रूप में काम करेगा, मेरे उद्देश्यों की दूरी जितना महत्वपूर्ण होगा।

मैं जोड़ सकता हूं, कि इसका उपयोग किसी अन्य प्रोग्राम के इनपुट के लिए डेटा उत्पन्न करने के लिए किया जाएगा और केवल स्पोरैडिक रूप से उपयोग किया जाएगा (मुख्य रूप से क्लस्टर की विभिन्न संख्याओं के साथ डेटा के विभिन्न सेट उत्पन्न करने के लिए), इसलिए अर्द्ध समय लेने वाले एल्गोरिदम नहीं हैं सवाल से बाहर।

+0

जो ब्लो से सहमत हैं - आप हरे, नीले, लाल बिंदुओं के लिए 3 लाइन समीकरण प्राप्त करने और इन तीन समीकरणों के लिए ढलान और अवरोध की तुलना करने के लिए कम से कम वर्ग विधि के साथ एक रैखिक फिट करने का प्रयास कर सकते हैं। –

+0

इसके अलावा आप क्लस्टर के बीच हॉउसडॉफ़ दूरी की तुलना करने का प्रयास कर सकते हैं। –

+0

क्या सभी डेटासेट में संख्याओं की संख्या समान है? क्या अंक महत्वपूर्ण हैं (क्या बिंदु # 5 के सभी डेटासेट के लिए समान अर्थ है?) – tkerwin

उत्तर

1

दो में चरणों

1) प्रथम: ब्लूज़ अलग बताने के लिए।

कटऑफ तक, निकटतम पड़ोसी दूरी का अर्थ गणना करें। निम्न छवि में काले दूरी की तरह कटऑफ कुछ का चयन करें:

enter image description here

नीले विन्यास, के रूप में वे अधिक आप लाल और साग से अधिक परिणाम देगा बिखरे हुए हैं।

2) दूसरा: लाल अलग बताने और साग

उपेक्षा सभी बिंदुओं जिसका निकटतम पड़ोसी दूरी कुछ छोटे (उदाहरण के लिए पिछले दूरी का एक चौथाई) से अधिक है करने के लिए।निकटता के लिए Clusterize तो प्रपत्र के समूहों पाने के लिए:

enter image description here और enter image description here

कम से कम 10 अंक (या तो) के साथ समूहों त्यागें। प्रत्येक क्लस्टर के लिए एक रैखिक फिट चलाते हैं और कॉन्वर्सिस की गणना करते हैं। लाल रंग के लिए औसत कॉन्वर्सिस हरे रंग की तुलना में बहुत अधिक होगा क्योंकि इस पैमाने पर हिरण बहुत गठबंधन होते हैं।

वहां आप हैं।

एचटीएच!

+0

कम से कम, मुझे कल्पना है कि एक्स निकटतम पड़ोसियों की औसत दूरी की गणना निकटतम पड़ोसी के लिए मेरी औसत निकटतम दूरी से कहीं बेहतर होगी। मुझे अभी तक इसका प्रयोग करने का मौका नहीं मिला है, लेकिन मुझे संदेह है कि यह कुछ अन्य लोगों के साथ एक अच्छा मीट्रिक बनाएगा। मुझे दूसरे भाग के बारे में निश्चित नहीं है, लेकिन मैं इसे देख लूंगा। धन्यवाद। – mcnulty

+0

@mcnulty मैंने इस तरह की चीजें कई बार (एक भौतिक विज्ञानी के रूप में) की। आपको कटऑफ मानों के साथ प्रयोग करना होगा। यदि आपके सभी लाल, हिरण और ब्लूज़ पोस्ट किए गए समान हैं, तो आपको कई परेशानी नहीं मिलेंगी। बेशक बहुत सी सीपीयू समय आगे की उम्मीद है। –

1

हालांकि बेलिसारियस यह अच्छी तरह से उत्तर दिया है, यहाँ टिप्पणी के एक जोड़े हैं:

यदि आप 1000 अंक के प्रत्येक सेट को कम कर सकता कहने के लिए 32 अंक के 32 समूहों प्रत्येक (या 20 x 50 या ...) , तो आप 1000-स्पेस के बजाय 32-स्पेस में काम कर सकते हैं। इसके लिए K-means clustering आज़माएं; SO questions/tagged/k-means देखें।

एक तरह से सेट एक के बीच की दूरी, बी को मापने के लिए (अंक की, समूहों के) इस तरह निकटतम जोड़े रखना है:

def nearestpairsdistance(A, B): 
    """ large point sets A, B -> nearest b each a, nearest a each b """ 
     # using KDTree, http://docs.scipy.org/doc/scipy/reference/spatial.html 
    Atree = KDTree(A) 
    Btree = KDTree(B) 
    a_nearestb, ixab = Btree.query(A, k=1, p=p, eps=eps) # p=inf is fast 
    b_nearesta, ixba = Atree.query(B, k=1, p=p, eps=eps) 
    if verbose: 
     print "a_nearestb:", nu.quantiles5(a_nearestb) 
     print "b_nearesta:", nu.quantiles5(b_nearesta) 
    return (np.median(a_nearestb) + np.median(b_nearesta))/2 
     # means are sensitive to outliers; fast approx median ? 

आप तो 32-अंतरिक्ष में अपने 2000 अंक क्लस्टर सकता है 20 क्लस्टर केन्द्रों एक शॉट में : (। हमेशा की तरह इयूक्लिडियन दूरी यहाँ बिल्कुल काम नहीं होगा)

centres, labels = kmeans(points, k=20, iter=3, distance=nearestpairsdistance) 

कृपया फ़ॉलो करें — हमें बताएं कि अंत में क्या काम करता है, और क्या नहीं।