बिर्च एल्गोरिथ्म अपेक्षित रूप से क्लस्टर नहीं करता है


10

मैं 10 के सेट में एक छोटे से शहर में बिंदुओं के एक समूह को क्लस्टर करने के लिए स्काइप-लर्न पायथन पैकेज से बिर्च एल्गोरिथ्म का उपयोग कर रहा हूं।

मैं निम्नलिखित कोड का उपयोग करता हूं:

no = len(list_of_points)/10
brc = Birch(branching_factor=50, n_clusters=no, threshold=0.05,compute_labels=True)

मेरे विचार में, मैं हमेशा 10 अंकों के सेट के साथ समाप्त होता हूं। मेरे मामले में, मेरे पास क्लस्टर के लिए 650 अंक हैं, और n_clusters 65 है।

लेकिन, मेरी समस्या यह है कि बहुत कम थ्रेसहोल्ड के साथ मैं 1 एड्रेस एक क्लस्टर के साथ समाप्त करता हूं, बस एक छोटा बड़ा थ्रेशोल्ड - क्लस्टर प्रति 40 एड्रेस।

मुझसे यहां क्या गलत हो रहा है?


शायद यह सी.आर.एस. मुसीबत? यदि आपने डिग्री (डब्ल्यूजीएस 84 की तरह) के साथ कोशिश की है, तो मीट्रिक का प्रयास करें। निर्देशांक में बहुत बड़ा अंतर हैं और दोनों को अलग-अलग सीमा मूल्य की आवश्यकता हो सकती है। इसके अलावा, आप विभिन्न अजगर पुस्तकालय के साथ कोशिश कर सकते हैं, मैं दृढ़ता से शिकवा-सीख का उपयोग करने की सलाह देता हूं।
dmh126

.., मैं Google API से प्राप्त जीपीएस निर्देशांक के आधार पर क्लस्टरिंग कर रहा हूं, मुझे लगता है कि वे मानक-स्वरूपित हैं। नहीं?
काबूम

शायद यहाँ इन निर्देशांक को चिपकाएँ, मैं यह पता लगाने की कोशिश करूँगा।
dhh126

dmh126 सही हो सकता है: Goolge API WGS84 के साथ काम कर रहा है, यह एक (वर्ल्ड) जियोडेटिक सिस्टम है, मेट्रिक नहीं
एंड्रे

जवाबों:


10

मैंने कुछ शोध किया है। मैंने दो समन्वय प्रणालियों गैर मीट्रिक (WGS84) और मीट्रिक (पोलैंड 1992) में कुछ अंक लिए।

मैंने इस कोड का उपयोग किया है:

from scipy import loadtxt
from sklearn.cluster import Birch
import matplotlib.pyplot as plt

data84 = loadtxt("/home/damian/workspace/84.csv", delimiter=",")
data90 = loadtxt("/home/damian/workspace/90.csv", delimiter=",")

brc = Birch(threshold=0.5)

फिर मैंने मीट्रिक डेटा के साथ अपना मॉडल फिट किया:

brc.fit(data90)

और परिणामों की साजिश करें, जहां क्रॉस मेरे बिंदु थे और सर्कल मेरे उप-समूह थे:

c = brc.subcluster_centers_
plt.plot(data90[:,0], data90[:,1], '+')
plt.plot(c[:,0], c[:,1], 'o')
plt.show()

मेरे पास बस यही है: यहां छवि विवरण दर्ज करें

आप देख सकते हैं, कि सीमा मूल्य बहुत छोटा था, क्योंकि यह प्रत्येक बिंदु में सबक्लेस्टर पाया।

दहलीज की परिभाषा:

एक नए नमूने को विलय करके प्राप्त की गई सबक्लस्टर की त्रिज्या और निकटतम सबक्लेस्टर सीमा से कम होना चाहिए। अन्यथा एक नई उपवर्ग शुरू किया जाता है।

तो इस मामले में हमें इस मूल्य को बढ़ाने की आवश्यकता है।

के लिये:

brc = Birch(threshold=5000)

यह बहुत बेहतर था:

यहां छवि विवरण दर्ज करें

और थ्रेसहोल्ड 0.5 के लिए WGS84 अंक:

brc = Birch(threshold=0.5)
brc.fit(data84)

यहां छवि विवरण दर्ज करें

केवल एक उपवर्ग, अच्छा नहीं। लेकिन इस मामले में हमें थ्रेशोल्ड वैल्यू घटनी चाहिए, इसलिए 0.05 के लिए:

brc = Birch(threshold=0.05)
brc.fit(data84)

यहां छवि विवरण दर्ज करें

हमें अच्छे परिणाम मिले हैं।

निष्कर्ष:

सीआरएस मायने रखता है। आपको एक उचित सीमा मूल्य खोजने की आवश्यकता है, आपके डेटा समन्वय प्रणाली और अंकों के बीच की दूरी पर निर्भर करता है। यदि आपके पास गैर मीट्रिक सीआरएस है, तो थ्रेशोल्ड मीट्रिक प्रणाली की तुलना में अपेक्षाकृत छोटा होना चाहिए। आपको मीटर और डिग्री के बीच का अंतर जानना होगा, अगर दो बिंदुओं के बीच की दूरी 10000m के बराबर है, तो यह WGS84 में 1 डिग्री से कम होगा। अधिक सटीक मानों के लिए Google की जाँच करें।

इसके अलावा n_clusters मान से अधिक अंक हैं। यह ठीक है, समूहों के सेंट्रोइड्स नहीं हैं, लेकिन उप-समूह हैं। यदि आप किसी चीज़ की भविष्यवाणी करने की कोशिश करते हैं, या लेबल प्रिंट करते हैं, तो यह आपकी बात को n_clusters क्षेत्रों में से एक में वर्गीकृत करेगा (या 0,1,2 पर वर्गीकृत अंक प्रिंट, ..., n_clusters लेबल)।

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

http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html

यह थ्रेसहोल्ड आदि की परवाह किए बिना आपके डेटा के लिए एन क्लस्टर्स ढूंढना चाहिए।

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