परिचय
K-Means सबसे लोकप्रिय क्लस्टरिंग एल्गोरिदम में से एक है। एक क्लस्टर में केंद्रीय बिंदु होने से, यह अन्य बिंदुओं को उस केंद्रीय बिंदु से उनकी दूरी के आधार पर समूहित करता है।
K-मीन्स का एक नकारात्मक पहलू यह है कि क्लस्टरों की संख्या चुननी पड़ती है, K, एल्गोरिथम चलाने से पहले जो समूह इंगित करता है।
यदि आप K-मीन्स क्लस्टरिंग के लिए एक गहन मार्गदर्शिका पढ़ना चाहते हैं, तो इस पर एक नज़र डालें "के-मीन्स क्लस्टरिंग विद स्किकिट-लर्न".
कोहनी विधि और सिल्हूट विश्लेषण
Ks की संख्या चुनने के लिए सबसे अधिक इस्तेमाल की जाने वाली तकनीकें हैं: कोहनी विधि और सिल्हूट विश्लेषण.
Ks के चुनाव को सुविधाजनक बनाने के लिए, पीली ईंट लाइब्रेरी कोड को लूप्स और एक प्लॉट के साथ लपेटती है जिसे हम आमतौर पर कोड की 4 पंक्तियों में लिखते हैं।
येलोब्रिक को सीधे ज्यूपिटर नोटबुक से स्थापित करने के लिए, चलाएँ:
! pip install yellowbrick
आइए देखें कि यह एक परिचित डेटासेट के लिए कैसे काम करता है जो पहले से ही स्किकिट-लर्न का हिस्सा है, परितारिका डाटासेट।
डेटासेट आयात करने के लिए पहला कदम है, KMeans
और yellowbrick
पुस्तकालयों, और डेटा लोड करें:
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
from yellowbrick.cluster import KElbowVisualizer, SilhouetteVisualizer
iris = load_iris()
यहां ध्यान दें, हम आयात करते हैं KElbowVisualizer
और SilhouetteVisualizer
से yellowbrick.cluster
, वे मॉड्यूल हैं जिनका उपयोग हम एल्बो और सिल्हूट परिणामों की कल्पना करने के लिए करेंगे!
डेटासेट लोड करने के बाद, में data
गुच्छा की कुंजी (एक डेटा प्रकार जो एक शब्दकोश का विस्तार है) उन बिंदुओं के मान हैं जिन्हें हम क्लस्टर करना चाहते हैं। यदि आप जानना चाहते हैं कि संख्याएँ क्या दर्शाती हैं, तो एक नज़र डालें iris['feature_names']
.
यह ज्ञात है कि आइरिस डेटासेट में तीन प्रकार के आईरिस होते हैं: 'वर्सीकलर', 'वर्जिनिका' और 'सेटोसा'। आप कक्षाओं का निरीक्षण भी कर सकते हैं iris['target_names']
जांचना।
तो, हमारे पास क्लस्टर करने के लिए 4 विशेषताएं हैं और उन्हें 3 अलग-अलग समूहों में विभाजित किया जाना चाहिए, जैसा कि हम पहले से जानते हैं। आइए देखें कि एल्बो मेथड और सिल्हूट विश्लेषण के साथ हमारे परिणाम इसकी पुष्टि करते हैं या नहीं।
सबसे पहले, हम फीचर मानों का चयन करेंगे:
print(iris['feature_names'])
print(iris['target_names'])
X = iris['data']
फिर, हम a . बना सकते हैं KMeans
मॉडल, ए KElbowVisualizer()
उदाहरण जो उस मॉडल को ks की संख्या के साथ प्राप्त करेगा जिसके लिए एक मीट्रिक की गणना की जाएगी, इस मामले में 2 से 11 तक के.एस.
उसके बाद, हम विज़ुअलाइज़र को डेटा का उपयोग करके फिट करते हैं fit()
और प्लॉट के साथ प्रदर्शित करें show()
. यदि कोई मीट्रिक निर्दिष्ट नहीं है, तो विज़ुअलाइज़र का उपयोग करता है विरूपण मीट्रिक, जो प्रत्येक बिंदु से उसके नियत केंद्र तक वर्ग दूरी के योग की गणना करता है:
model = KMeans(random_state=42)
elb_visualizer = KElbowVisualizer(model, k=(2,11))
elb_visualizer.fit(X)
elb_visualizer.show()
अब, हमारे पास पहले से ही है KMeans क्लस्टरिंग के लिए डिस्टॉर्शन स्कोर एल्बो एक लंबवत रेखा अंकन के साथ प्लॉट जो इस मामले में केएस की सबसे अच्छी संख्या होगी, 4
.
यदि हम क्लस्टर की वास्तविक संख्या नहीं जानते हैं, तो विरूपण मीट्रिक के साथ कोहनी विधि सबसे अच्छा विकल्प नहीं था। क्या सिल्हूट यह भी इंगित करेगा कि 4 क्लस्टर हैं? इसका उत्तर देने के लिए, हमें केवल 4 क्लस्टर और एक अलग विज़ुअलाइज़र ऑब्जेक्ट वाले मॉडल के साथ अंतिम कोड दोहराने की आवश्यकता है:
model_4clust = KMeans(n_clusters = 4, random_state=42)
sil_visualizer = SilhouetteVisualizer(model_4clust)
sil_visualizer.fit(X)
sil_visualizer.show()
कोड प्रदर्शित करता है a 150 केंद्रों में 4 नमूनों के लिए KMeans क्लस्टरिंग का सिल्हूट प्लॉट. इस क्लस्टर का विश्लेषण करने के लिए, हमें सिल्हूट गुणांक (या स्कोर) के मूल्य को देखने की जरूरत है, इसका सर्वोत्तम मूल्य 1 के करीब है। हमारे पास औसत मूल्य है 0.5
, लंबवत रेखा द्वारा चिह्नित, और इतना अच्छा नहीं।
हमें समूहों के बीच वितरण को भी देखने की जरूरत है - एक अच्छे भूखंड में समान आकार के गुच्छेदार क्षेत्र या अच्छी तरह से वितरित बिंदु होते हैं। इस ग्राफ़ में, 3 छोटे क्लस्टर (संख्या 3, 2, 1) और एक बड़ा क्लस्टर (नंबर 0) है, जो वह परिणाम नहीं है जिसकी हम अपेक्षा कर रहे थे।
सर्वोत्तम प्रथाओं, उद्योग-स्वीकृत मानकों और शामिल चीट शीट के साथ, Git सीखने के लिए व्यावहारिक मार्गदर्शिका देखें। Googling Git कमांड को रोकें और वास्तव में सीखना यह!
क्या होता है यह देखने के लिए आइए 3 समूहों के लिए एक ही प्लॉट दोहराएं:
model_3clust = KMeans(n_clusters = 3, random_state=42)
sil_visualizer = SilhouetteVisualizer(model_3clust)
sil_visualizer.fit(X)
sil_visualizer.show()
समूहों की संख्या को बदलने से, सिल्हूट स्कोर मिला 0.05
उच्च और क्लस्टर अधिक संतुलित हैं। यदि हम दोनों तकनीकों का प्रयोग और संयोजन करके समूहों की वास्तविक संख्या नहीं जानते हैं, तो हमने चुना होगा 3
के बजाय 2
K की संख्या के रूप में।
यह एक उदाहरण है कि कैसे विभिन्न मेट्रिक्स का संयोजन और तुलना करना, डेटा को विज़ुअलाइज़ करना और क्लस्टर के विभिन्न मूल्यों के साथ प्रयोग करना परिणाम को सही दिशा में ले जाने के लिए महत्वपूर्ण है। और यह भी, कि उस विश्लेषण को सुगम बनाने वाला पुस्तकालय उस प्रक्रिया में कैसे मदद कर सकता है!