K- साधन क्लस्टरिंग एक अनुपयोगी शिक्षण एल्गोरिथम है जो प्रत्येक बिंदु यूक्लिडियन दूरी के आधार पर डेटा को एक केंद्रीय बिंदु पर समूहित करता है जिसे कहा जाता है केन्द्रक. सेंट्रोइड्स को उन सभी बिंदुओं के माध्यम से परिभाषित किया जाता है जो एक ही क्लस्टर में होते हैं। एल्गोरिथ्म पहले यादृच्छिक बिंदुओं को सेंट्रोइड्स के रूप में चुनता है और फिर पूर्ण अभिसरण तक उन्हें समायोजित करता है।
K- साधन का उपयोग करते समय याद रखने वाली एक महत्वपूर्ण बात यह है कि क्लस्टर की संख्या एक हाइपरपैरामीटर है, इसे मॉडल चलाने से पहले परिभाषित किया जाएगा।
K- साधन को कोड की केवल 3 पंक्तियों के साथ स्किकिट-लर्न का उपयोग करके कार्यान्वित किया जा सकता है। स्किकिट-लर्न में पहले से ही एक सेंट्रोइड ऑप्टिमाइज़ेशन विधि उपलब्ध है, केमीन्स++, जो मॉडल को तेजी से अभिसरण करने में मदद करता है।
K- साधन क्लस्टरिंग एल्गोरिथम लागू करने के लिए, आइए लोड करें पामर पेंगुइन डेटासेट, क्लस्टर किए जाने वाले कॉलम चुनें, और रंग कोडित क्लस्टर के साथ स्कैटरप्लॉट प्लॉट करने के लिए सीबॉर्न का उपयोग करें।
नोट: आप इससे डेटासेट डाउनलोड कर सकते हैं संपर्क.
आइए पुस्तकालयों को आयात करें और पेंगुइन डेटासेट को लोड करें, इसे चुने हुए कॉलम में ट्रिम करें और लापता डेटा वाली पंक्तियों को छोड़ दें (केवल 2 थे):
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
df = pd.read_csv('penguins.csv')
print(df.shape)
df = df[['bill_length_mm', 'flipper_length_mm']]
df = df.dropna(axis=0)
हम अपने डेटा के लिए क्लस्टर का संकेत देने के लिए एल्बो विधि का उपयोग कर सकते हैं। इसमें कोहनी के आकार के साथ एक लाइन प्लॉट की व्याख्या शामिल है। गुच्छों की संख्या कोहनी झुकी हुई थी। प्लॉट का x अक्ष क्लस्टरों की संख्या है और y अक्ष क्लस्टर की प्रत्येक संख्या के लिए वर्गों का योग (WCSS) के भीतर है:
wcss = []
for i in range(1, 11):
clustering = KMeans(n_clusters=i, init='k-means++', random_state=42)
clustering.fit(df)
wcss.append(clustering.inertia_)
ks = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sns.lineplot(x = ks, y = wcss);
एल्बो विधि इंगित करती है कि हमारे डेटा में 2 क्लस्टर हैं। आइए क्लस्टरिंग से पहले और बाद में डेटा प्लॉट करें:
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(15,5))
sns.scatterplot(ax=axes[0], data=df, x='bill_length_mm', y='flipper_length_mm').set_title('Without clustering')
sns.scatterplot(ax=axes[1], data=df, x='bill_length_mm', y='flipper_length_mm', hue=clustering.labels_).set_title('Using the elbow method');
यह उदाहरण दिखाता है कि कैसे कोहनी विधि केवल एक संदर्भ है जब क्लस्टर की संख्या चुनने के लिए उपयोग किया जाता है। हम पहले से ही जानते हैं कि डेटासेट में हमारे पास 3 प्रकार के पेंगुइन हैं, लेकिन अगर हम एल्बो विधि का उपयोग करके उनकी संख्या निर्धारित करते हैं, तो 2 क्लस्टर हमारा परिणाम होगा।
चूंकि K- साधन डेटा विचरण के प्रति संवेदनशील है, आइए उन स्तंभों के वर्णनात्मक आँकड़ों को देखें जिन्हें हम क्लस्टर कर रहे हैं:
df.describe().T
इसका परिणाम यह होगा:
count mean std min 25% 50% 75% max
bill_length_mm 342.0 43.921930 5.459584 32.1 39.225 44.45 48.5 59.6
flipper_length_mm 342.0 200.915205 14.061714 172.0 190.000 197.00 213.0 231.0
ध्यान दें कि माध्य मानक विचलन (एसटीडी) से बहुत दूर है, यह उच्च विचरण को इंगित करता है। आइए मानक स्केलर के साथ डेटा को स्केल करके इसे कम करने का प्रयास करें:
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
scaled = ss.fit_transform(df)
अब, स्केल किए गए डेटा के लिए एल्बो विधि प्रक्रिया को दोहराएं:
wcss_sc = []
for i in range(1, 11):
clustering_sc = KMeans(n_clusters=i, init='k-means++', random_state=42)
clustering_sc.fit(scaled)
wcss_sc.append(clustering_sc.inertia_)
ks = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sns.lineplot(x = ks, y = wcss_sc);
सर्वोत्तम प्रथाओं, उद्योग-स्वीकृत मानकों और शामिल चीट शीट के साथ, Git सीखने के लिए व्यावहारिक मार्गदर्शिका देखें। Googling Git कमांड को रोकें और वास्तव में सीखना यह!
इस बार, क्लस्टर की सुझाई गई संख्या 3 है। हम तुलना के लिए दो पूर्व प्लॉटों के साथ क्लस्टर लेबल के साथ डेटा को फिर से प्लॉट कर सकते हैं:
fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15,5))
sns.scatterplot(ax=axes[0], data=df, x='bill_length_mm', y='flipper_length_mm').set_title('Without cliustering')
sns.scatterplot(ax=axes[1], data=df, x='bill_length_mm', y='flipper_length_mm', hue=clustering.labels_).set_title('With the Elbow method')
sns.scatterplot(ax=axes[2], data=df, x='bill_length_mm', y='flipper_length_mm', hue=clustering_sc.labels_).set_title('With the Elbow method and scaled data');
K- साधन क्लस्टरिंग का उपयोग करते समय, आपको क्लस्टर की संख्या को पूर्व-निर्धारित करने की आवश्यकता होती है। जैसा कि हमने अपने को चुनने के लिए किसी विधि का उपयोग करते समय देखा है k समूहों की संख्या, परिणाम केवल एक सुझाव है और डेटा में भिन्नता की मात्रा से प्रभावित हो सकता है। गहन विश्लेषण करना और क्लस्टरिंग करते समय विभिन्न _k_s के साथ एक से अधिक मॉडल उत्पन्न करना महत्वपूर्ण है।
यदि डेटा में कितने क्लस्टर हैं, इसका कोई पूर्व संकेत नहीं है, तो इसकी कल्पना करें, इसका परीक्षण करें और यह देखने के लिए इसकी व्याख्या करें कि क्या क्लस्टरिंग परिणाम समझ में आता है। यदि नहीं, तो फिर से क्लस्टर करें। इसके अलावा, एक से अधिक मीट्रिक देखें और विभिन्न क्लस्टरिंग मॉडल को इंस्टेंट करें - के-साधनों के लिए, सिल्हूट स्कोर और शायद पदानुक्रमित क्लस्टरिंग देखें कि क्या परिणाम समान रहते हैं।