Clustering: बिना लेबल के ग्रुप ढूंढना
k-means मिलते-जुलते rows के ग्रुप ढूंढता है जब किसी ने उन्हें लेबल न किया हो। जानें कि यह कैसे काम करता है, ग्रुप्स की संख्या कैसे चुनें, और ग्रुप्स को समझने के लिए इंसान की ज़रूरत क्यों पड़ती है।
60 सेकंड में
Clustering: बिना लेबल के ग्रुप ढूंढना
k-means मिलते-जुलते rows के ग्रुप ढूंढता है जब किसी ने उन्हें लेबल न किया हो। जानें कि यह कैसे काम करता है, ग्रुप्स की संख्या कैसे चुनें, और ग्रुप्स को समझने के लिए इंसान की…
k-means कैसे काम करता है
- 1
k चुनें
तय करें कि आपको कितने ग्रुप चाहिए, उदाहरण के लिए 3। - 2
शुरुआत करें
k सेंटर पॉइंट्स रखें, अक्सर randomly चुने गए rows पर। - 3
असाइन करें
हर row को उसके सबसे नज़दीकी सेंटर को सौंपें। - 4
मूव करें
हर सेंटर को उससे जुड़े rows के औसत (average) पर खिसकाएं। - 5
दोहराएं
असाइन करें और दोबारा खिसकाएं, जब तक कि सेंटर का हिलना-डुलना लगभग बंद न हो जाए।
n_init सेटिंग कई बार शुरुआत चलाती है और सबसे अच्छे नतीजे को रखती है। random_state सेट करने से वही नतीजे दोबारा मिलते हैं।import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# Made-up customers of a small shop: visits per month, average spend (arbitrary units).
rng = np.random.default_rng(5)
a = rng.normal([2, 80], [1, 15], (40, 2)) # rare visits, bigger baskets
b = rng.normal([12, 25], [2, 8], (40, 2)) # frequent visits, small baskets
c = rng.normal([6, 50], [1.5, 10], (40, 2)) # in between
X = np.vstack([a, b, c])
km = KMeans(n_clusters=3, n_init=10, random_state=0).fit(X)
print("Centres (visits, spend):")
print(km.cluster_centers_.round(1))
print("Customers per group:", np.bincount(km.labels_))
plt.scatter(X[:, 0], X[:, 1], c=km.labels_)
plt.scatter(km.cluster_centers_[:, 0], km.cluster_centers_[:, 1], marker="x", s=200, color="red")
plt.xlabel("visits per month"); plt.ylabel("average spend")कितने ग्रुप? एल्बो मेथड
inertia_ रिपोर्ट करता है: हर row से उसके सेंटर की कुल squared दूरी। ज़्यादा ग्रुप हमेशा इसे कम कर देते हैं, इसलिए सबसे कम वैल्यू हासिल करना ही मकसद नहीं होता। k = 1, 2, 3 वगैरह के लिए inertia का ग्राफ बनाएं। "एल्बो" (कोहनी जैसा मोड़) ढूंढें, जहाँ एक और ग्रुप जोड़ने से ज़्यादा फ़ायदा होना बंद हो जाता है। यह बस एक अंदाज़ा है, कोई पक्का नियम नहीं; सही k इस बात पर भी निर्भर करता है कि आपके काम के लिए क्या उपयोगी है।ध्यान रखने वाली बातें
- पहले स्केल करें। nearest neighbours की तरह ही k-means भी दूरियों का इस्तेमाल करता है। बड़े नंबरों वाला feature हावी हो जाएगा।
- गोल, एक जैसे आकार के ग्रुप्स। k-means सबसे अच्छा तब काम करता है जब ग्रुप्स गोल-मटोल (blob-shaped) हों और उनका फैलाव एक जैसा हो। लंबे, मुड़े हुए या बहुत असमान ग्रुप्स के लिए दूसरे तरीकों की ज़रूरत होती है, जैसे
DBSCAN। - यह हमेशा k ग्रुप ढूंढ ही लेता है। भले ही डेटा में असल में कोई ग्रुप न हो, फिर भी k-means उसे k ढेरों में बांट देगा। जांचें कि क्या उन ग्रुप्स का कोई मतलब निकल रहा है।
- ग्रुप्स कोई परम सत्य नहीं होते। लोगों के ग्रुप्स को लेकर सावधान रहें। ग्राहकों के किसी क्लस्टर को "गरीब" या "जोखिम भरा" जैसा लेबल देना अनुचित और गलत हो सकता है। वही बताएं जो आंकड़े दिखाते हैं।
adjusted_rand_score एकदम सटीक मेल के लिए 1 और रैंडम ग्रुपिंग के लिए लगभग 0 देता है। असल clustering के कामों में आमतौर पर आपके पास लेबल्स नहीं होते, इसीलिए नतीजों को सही से समझना इतना ज़रूरी होता है।n_clusters=3 को बदलकर 5 करें। k-means इन अतिरिक्त ग्रुप्स के साथ क्या करता है?और देखें और पढ़ें
लैब
स्केल किए गए iris मापनों पर k-means के लिए एक एल्बो टेबल, एक 3-ग्रुप मॉडल, और इस बात की जांच कि इसके ग्रुप्स असली प्रजातियों से कितने अच्छे से मेल खाते हैं।
समस्या
मान लें कि आपको iris की प्रजातियों के बारे में नहीं पता है। आपके पास केवल चार नाप हैं।
- स्टार्टर चलाएं। यह features को
X_scaledमें स्केल करता है। - 1 से 8 तक k के लिए,
X_scaledपरKMeans(n_clusters=k, n_init=10, random_state=0)को फिट करें और इसकेinertia_कोinertias[k]में स्टोर करें। - 3 ग्रुप्स के साथ अंतिम
kmeansको फिट करें (समान सेटिंग्स)। - अब छिपे हुए प्रजाति लेबल्स का इस्तेमाल सिर्फ जांचने के लिए करें:
ariकोadjusted_rand_score(true_species, kmeans.labels_)पर सेट करें। - टेबल और स्कोर प्रिंट करें। एल्बो कहाँ है? ग्रुप्स किन प्रजातियों को आपस में मिला देते हैं?
प्रैक्टिस लैब
कोड में बदलाव करें और इसे रन करें। Python आपके ब्राउज़र में चलता है — हमारे सर्वर पर कुछ नहीं भेजा जाता।
कोई आउटपुट नहीं। वैल्यूज़ देखने के लिए print(...) जोड़ें।
आपका काम तब पूरा होगा जब
कठिन सवाल
उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।
Q1ऐसा लगता है कि एल्बो 2 पर हो सकता है या 3 पर। ऐसा क्यों है, और बिना लेबल्स के आप कैसे फैसला करेंगे?दिखाएं
तीन में से दो प्रजातियों के नाप एक जैसे हैं, इसलिए डेटा एक साफ ग्रुप और एक बड़े, मिले-जुले ग्रुप जैसा दिखता है। असली डेटा में एल्बो अक्सर साफ नहीं होता। बिना लेबल्स के, उपयोगिता के आधार पर फैसला करें: हर ग्रुप के सेंटर को देखें, पूछें कि क्या यह विभाजन आपके मकसद के लिए मायने रखता है, और जांचें कि क्या अलग-अलग रैंडम शुरुआतों में भी ग्रुप्स स्थिर रहते हैं।
Q2आम तौर पर clustering के लिए adjusted Rand score को "सटीकता" का पैमाना कहना सही क्यों नहीं है?दिखाएं
ज़्यादातर असली clustering में कोई असली लेबल्स नहीं होते, और मिले हुए ग्रुप्स सार्थक हो सकते हैं भले ही वे किसी मौजूदा लेबल से मेल न खाते हों। यहाँ हमारे पास प्रजातियों के लेबल्स सिर्फ इसलिए हैं क्योंकि यह सिखाने के लिए बनाया गया डेटासेट है। यह स्कोर आपको यह बताता है कि क्लस्टर्स किसी एक खास ग्रुपिंग से कितने अच्छे से मेल खाते हैं, यह नहीं कि क्लस्टर्स "सही" हैं या नहीं।
अक्सर पूछे जाने वाले सवाल
Clustering और classification में क्या अंतर है?
Classification लेबल वाले उदाहरणों से सीखता है और जाने-पहचाने ग्रुप्स का अनुमान लगाता है। Clustering में कोई लेबल नहीं होते और यह समानता के आधार पर नए ग्रुप बनाता है। हो सकता है कि उन ग्रुप्स का कोई मतलब निकले, या शायद न भी निकले।
क्या k-means टेक्स्ट कॉलम्स का इस्तेमाल कर सकता है?
सीधे तौर पर नहीं। k-means को ऐसे नंबरों की ज़रूरत होती है जहाँ दूरी का कोई मतलब निकलता हो। कैटेगरीज़ को सावधानी से नंबरों में बदलें, या फिर मिक्स्ड डेटा के लिए बने किसी तरीके का इस्तेमाल करें।
मुझे हर बार चलाने पर अलग नतीजा क्यों मिलता है?
क्योंकि रैंडम शुरुआत बदल जाती है। एक जैसे नतीजे पाने के लिए random_state सेट करें और n_init को 10 या उससे ज़्यादा रखें ताकि कई शुरुआतों में से सबसे बेहतरीन नतीजा चुना जा सके।
Clustering का इस्तेमाल और किसलिए किया जाता है?
मिलते-जुलते दस्तावेज़ों को एक ग्रुप में रखना, ऐसे असामान्य rows ढूंढना जो किसी ग्रुप में फिट न बैठें, किसी इमेज में रंगों को कंप्रेस करना, और सुपरवाइज़्ड मॉडल बनाने से पहले किसी नए डेटासेट को समझना।
पाठ का टेस्ट
5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।