You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
340 lines
45 KiB
340 lines
45 KiB
# क्लस्टरिंग का परिचय
|
|
|
|
क्लस्टरिंग एक प्रकार की [अनियंत्रित शिक्षा](https://wikipedia.org/wiki/Unsupervised_learning) है जो मानती है कि एक डेटासेट अनलेबल्ड है या उसके इनपुट पूर्वनिर्धारित आउटपुट के साथ मेल नहीं खाते। यह बिना लेबल वाले डेटा के माध्यम से छंटाई करने के लिए विभिन्न एल्गोरिदम का उपयोग करता है और डेटा में पहचाने गए पैटर्न के अनुसार समूह प्रदान करता है।
|
|
|
|
[](https://youtu.be/ty2advRiWJM "No One Like You by PSquare")
|
|
|
|
> 🎥 वीडियो के लिए ऊपर छवि पर क्लिक करें। जब आप क्लस्टरिंग के साथ मशीन लर्निंग का अध्ययन कर रहे हों, तो कुछ नाइजीरियाई डांस हॉल ट्रैक्स का आनंद लें - यह PSquare का 2014 का एक बहुत प्रशंसित गीत है।
|
|
|
|
## [प्री-लेक्चर क्विज़](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
### परिचय
|
|
|
|
[क्लस्टरिंग](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) डेटा अन्वेषण के लिए बहुत उपयोगी है। आइए देखें क्या यह नाइजीरियाई दर्शकों के संगीत उपभोग के तरीके में रुझान और पैटर्न खोजने में मदद कर सकता है।
|
|
|
|
✅ एक मिनट लें और क्लस्टरिंग के उपयोगों के बारे में सोचें। असली जीवन में, क्लस्टरिंग तब होती है जब आपके पास कपड़े धोने का एक ढेर होता है और आपको अपने परिवार के सदस्यों के कपड़ों को छांटना पड़ता है 🧦👕👖🩲। डेटा साइंस में, क्लस्टरिंग तब होती है जब उपयोगकर्ता की पसंद को विश्लेषित करने या किसी भी बिना लेबल वाले डेटासेट के गुणधर्म निर्धारित करने की कोशिश की जाती है। क्लस्टरिंग, एक तरह से, अराजकता को समझने में मदद करता है, जैसे मोज़े डालने वाली दराज।
|
|
|
|
[](https://youtu.be/esmzYhuFnds "Introduction to Clustering")
|
|
|
|
> 🎥 वीडियो के लिए ऊपर छवि पर क्लिक करें: MIT के John Guttag क्लस्टरिंग का परिचय देते हैं
|
|
|
|
पेशेवर सेटिंग में, क्लस्टरिंग का उपयोग बाजार विभाजन जैसी चीज़ों को निर्धारित करने के लिए किया जा सकता है, उदाहरण के लिए कौन से आयु वर्ग कौन से वस्त्र खरीदते हैं। एक और उपयोग अनियमितता खोज (अनोमली डिटेक्शन) हो सकता है, जैसे क्रेडिट कार्ड लेन-देन के डेटासेट से धोखाधड़ी का पता लगाना। या आप क्लस्टरिंग का उपयोग चिकित्सा स्कैन की एक बैच में ट्यूमर निर्धारित करने के लिए कर सकते हैं।
|
|
|
|
✅ एक मिनट सोचें कि आप क्लस्टरिंग से 'वास्तविक जीवन' में कैसे पाए होंगे, बैंकिंग, ई-कॉमर्स, या व्यवसाय सेटिंग में।
|
|
|
|
> 🎓 रोचक बात यह है कि क्लस्टर विश्लेषण की शुरुआत 1930 के दशक में मानवशास्त्र और मनोविज्ञान के क्षेत्रों में हुई थी। क्या आप कल्पना कर सकते हैं कि इसे कैसे उपयोग किया जाएगा?
|
|
|
|
वैकल्पिक रूप से, आप इसे खोज परिणामों के समूह बनाने के लिए उपयोग कर सकते हैं - जैसे खरीदारी लिंक, छवियाँ, या समीक्षाएँ। क्लस्टरिंग तब उपयोगी होती है जब आपके पास एक बड़ा डेटासेट होता है जिसे आप कम करना चाहते हैं और जिस पर आप अधिक सूक्ष्म विश्लेषण करना चाहते हैं, ताकि इस तकनीक का उपयोग अन्य मॉडलों के निर्माण से पहले डेटा को समझने के लिए किया जा सके।
|
|
|
|
✅ एक बार जब आपका डेटा क्लस्टरों में व्यवस्थित हो जाता है, तो आप उसे एक क्लस्टर आईडी आवंटित करते हैं, और यह तकनीक किसी डेटासेट की गोपनीयता बनाए रखने में उपयोगी हो सकती है; आप किसी डेटा पॉइंट को उसके अधिक प्रकट पहचान वाले डेटा के बजाय इसके क्लस्टर आईडी द्वारा संदर्भित कर सकते हैं। क्या आप अन्य कारण सोच सकते हैं कि क्यों आप क्लस्टर को पहचानने के लिए क्लस्टर आईडी का उपयोग करेंगे बजाय क्लस्टर के अन्य तत्वों के?
|
|
|
|
क्लस्टरिंग तकनीकों की गहरी समझ के लिए इस [Learn module](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott) को देखें।
|
|
|
|
## क्लस्टरिंग के साथ शुरूआत
|
|
|
|
[Scikit-learn](https://scikit-learn.org/stable/modules/clustering.html) क्लस्टरिंग करने के लिए कई प्रकार की विधियाँ प्रदान करता है। आप जो प्रकार चुनेंगे वह आपके उपयोग मामले पर निर्भर करेगा। दस्तावेज़ के अनुसार, प्रत्येक विधि के कई फायदे होते हैं। यहाँ Scikit-learn द्वारा समर्थित विधियों और उनके उपयुक्त उपयोग मामलों की एक सरलीकृत तालिका है:
|
|
|
|
| विधि का नाम | उपयोग का मामला |
|
|
| :--------------------------- | :-------------------------------------------------------------------------- |
|
|
| K-Means | सामान्य प्रयोजन, उत्पादक |
|
|
| Affinity propagation | कई, असमान क्लस्टर, उत्पादक |
|
|
| Mean-shift | कई, असमान क्लस्टर, उत्पादक |
|
|
| Spectral clustering | कुछ, समान क्लस्टर, ट्रांसडक्टिव |
|
|
| Ward hierarchical clustering | कई, प्रतिबंधित क्लस्टर, ट्रांसडक्टिव |
|
|
| Agglomerative clustering | कई, प्रतिबंधित, गैर-यूक्लिडियन दूरी, ट्रांसडक्टिव |
|
|
| DBSCAN | गैर-समतल ज्यामिति, असमान क्लस्टर, ट्रांसडक्टिव |
|
|
| OPTICS | गैर-समतल ज्यामिति, परिवर्तनीय घनत्व वाले असमान क्लस्टर, ट्रांसडक्टिव |
|
|
| Gaussian mixtures | समतल ज्यामिति, उत्पादक |
|
|
| BIRCH | आउट्लायर्स वाला बड़ा डेटासेट, उत्पादक |
|
|
|
|
> 🎓 हम क्लस्टर कैसे बनाते हैं इसका काफी संबंध इस बात से है कि हम डेटा पॉइंट्स को समूहों में कैसे इकट्ठा करते हैं। आइए कुछ शब्दावली समझें:
|
|
>
|
|
> 🎓 ['ट्रांसडक्टिव' बनाम 'इंडक्टिव'](https://wikipedia.org/wiki/Transduction_(machine_learning))
|
|
>
|
|
> ट्रांसडक्टिव अनुमान धीखे गए प्रशिक्षण मामलों से निकाला जाता है जो विशिष्ट परीक्षण मामलों से मेल खाते हैं। इंडक्टिव अनुमान प्रशिक्षण मामलों से निकाला जाता है जो सामान्य नियमों से मेल खाते हैं जिन्हें बाद में परीक्षण मामलों पर लागू किया जाता है।
|
|
>
|
|
> उदाहरण: मान लीजिए आपके पास एक डेटासेट है जो केवल आंशिक रूप से लेबल किया गया है। कुछ चीज़ें 'रिकॉर्ड्स' हैं, कुछ 'सीडीज़' हैं, और कुछ खाली हैं। आपका काम खाली स्थानों के लिए लेबल प्रदान करना है। यदि आप इंडक्टिव दृष्टिकोण चुनते हैं, तो आप 'रिकॉर्ड्स' और 'सीडीज़' के लिए एक मॉडल प्रशिक्षित करेंगे और उन लेबलों को अपने बिना लेबल डेटा पर लागू करेंगे। यह दृष्टिकोण उन्हीं वस्तुओं को सही वर्गीकृत करने में मुश्किल होगी जो वास्तव में 'कैसेट्स' हैं। दूसरी ओर, एक ट्रांसडक्टिव दृष्टिकोण इस अज्ञात डेटा को अधिक प्रभावी ढंग से संभालता है क्योंकि यह समान वस्तुओं को समूहित करता है और फिर समूह को एक लेबल देता है। इस मामले में, क्लस्टर 'गोल म्यूजिकल चीज़ें' और 'स्क्वायर म्यूजिकल चीज़ें' हो सकते हैं।
|
|
>
|
|
> 🎓 ['गैर-समतल' बनाम 'समतल' ज्यामिति](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering)
|
|
>
|
|
> गणितीय शब्दावली से व्युत्पन्न, गैर-समतल बनाम समतल ज्यामिति उन बिन्दुओं के बीच की दूरी को 'समतल' ([यूक्लिडियन](https://wikipedia.org/wiki/Euclidean_geometry)) या 'गैर-समतल' (गैर-यूक्लिडियन) ज्यामितीय विधियों द्वारा मापा जाता है।
|
|
>
|
|
> इस संदर्भ में 'समतल' का अर्थ यूक्लिडियन ज्यामिति है (जिसका हिस्सा 'समतल' ज्यामिति के रूप में पढ़ाया जाता है), और गैर-समतल का अर्थ गैर-यूक्लिडियन ज्यामिति है। ज्यामिति का मशीन लर्निंग से क्या लेना-देना? गणित में निहित दोनों क्षेत्रों के रूप में, क्लस्टरों के बीच दूरी मापने का एक सामान्य तरीका होना चाहिए, जो डेटा की प्रकृति पर निर्भर करता है वह 'समतल' या 'गैर-समतल' हो सकता है। [यूक्लिडियन दूरी](https://wikipedia.org/wiki/Euclidean_distance) दो बिंदुओं के बीच रेखा खंड की लंबाई के रूप में मापी जाती है। [गैर-यूक्लिडियन दूरी](https://wikipedia.org/wiki/Non-Euclidean_geometry) एक वक्र के along मापी जाती है। यदि आपका डेटा, प्रदर्शित होते हुए, ऐसा लग रहा है कि वह समतल पर मौजूद नहीं है, तो आपको इसे संभालने के लिए एक विशेष एल्गोरिदम का उपयोग करना पड़ सकता है।
|
|
>
|
|

|
|
> इन्फोग्राफिक: [दसानी मदिपल्ली](https://twitter.com/dasani_decoded)
|
|
>
|
|
> 🎓 ['दूरी'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf)
|
|
>
|
|
> क्लस्टर उनके दूरी मैट्रिक्स द्वारा परिभाषित होते हैं, यानी बिन्दुओं के बीच की दूरी से। इस दूरी को कुछ तरीकों से मापा जा सकता है। यूक्लिडियन क्लस्टर बिंदु मान का औसत द्वारा परिभाषित होते हैं, और इनमें एक 'सेंट्रोइड' या केंद्र बिंदु होता है। दूरी को उस सेंट्रोइड तक की दूरी से मापा जाता है। गैर-यूक्लिडियन दूरियां 'क्लस्ट्रॉइड्स' को संदर्भित करती हैं, जो अन्य बिंदुओं के सबसे निकटतम होते हैं। क्लस्ट्रॉइड्स को विभिन्न तरीकों से परिभाषित किया जा सकता है।
|
|
>
|
|
> 🎓 ['प्रतिबंधित'](https://wikipedia.org/wiki/Constrained_clustering)
|
|
>
|
|
> [प्रतिबंधित क्लस्टरिंग](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) इस अनियंत्रित विधि में 'अर्ध-नियंत्रित' सीखने को प्रस्तुत करती है। बिंदुओं के बीच संबंधों को 'कनेक्ट न करें' या 'जरुर लिंक करें' के रूप में चिह्नित किया जाता है ताकि डेटासेट पर कुछ नियम लागू किए जा सकें।
|
|
>
|
|
> उदाहरण: यदि किसी एल्गोरिदम को बिना लेबल या अर्ध-लेबल वाले डेटा पर स्वतंत्र रूप से छोड़ा जाता है, तो इसके द्वारा उत्पन्न क्लस्टर की गुणवत्ता खराब हो सकती है। उपरोक्त उदाहरण में, क्लस्टर 'गोल संगीत की चीज़ें', 'स्क्वायर संगीत की चीज़ें', 'त्रिभुजीय आकार की चीजें' और 'कुकीज़' के रूप में समूहित हो सकते हैं। यदि कुछ सीमाएँ या नियम दिए गए हों ("आइटम प्लास्टिक से बना होना चाहिए", "आइटम संगीत उत्पन्न करने में सक्षम होना चाहिए"), तो यह एल्गोरिदम को बेहतर विकल्प बनाने के लिए बाध्य कर सकता है।
|
|
>
|
|
> 🎓 'घनत्व'
|
|
>
|
|
> जो डेटा 'शोरयुक्त' है उसे 'घना' माना जाता है। उसमें प्रत्येक क्लस्टर के बिंदुओं के बीच की दूरी अधिक या कम घनी या 'भीड़ वाली' हो सकती है, और इसलिए इस डेटा का विश्लेषण उपयुक्त क्लस्टरिंग विधि के साथ किया जाना चाहिए। [यह लेख](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) एक शोरयुक्त डेटासेट के असमान क्लस्टर घनत्व का अन्वेषण करने के लिए K-Means क्लस्टरिंग बनाम HDBSCAN एल्गोरिदम के उपयोग का अंतर दर्शाता है।
|
|
|
|
## क्लस्टरिंग एल्गोरिदम
|
|
|
|
क्लस्टरिंग एल्गोरिदम की संख्या 100 से अधिक है, और इनके उपयोग डेटा की प्रकृति पर निर्भर करता है। चलिए कुछ मुख्य एल्गोरिदम पर चर्चा करते हैं:
|
|
|
|
- **हाइरार्किकल क्लस्टरिंग**। अगर एक वस्तु को उसके निकटतम वस्तु की निकटता के आधार पर वर्गीकृत किया जाता है, जो दूर की वस्तु से नहीं है, तो क्लस्टर उनके सदस्यों की दूरी के आधार पर बनाए जाते हैं। Scikit-learn का एग्लोमेरटिव क्लस्टरिंग हाइरार्किकल है।
|
|
|
|

|
|
> इन्फोग्राफिक: [दसानी मदिपल्ली](https://twitter.com/dasani_decoded)
|
|
|
|
- **सेंट्रोइड क्लस्टरिंग**। यह लोकप्रिय एल्गोरिदम 'k' या क्लस्टरों की संख्या चुनने की आवश्यकता होती है, जिसके बाद एल्गोरिदम क्लस्टर के केंद्र बिंदु को निर्धारित करता है और उस बिंदु के चारों ओर डेटा एकत्र करता है। [K-means क्लस्टरिंग](https://wikipedia.org/wiki/K-means_clustering) सेंट्रोइड क्लस्टरिंग का एक लोकप्रिय संस्करण है। केंद्र निकटतम औसत से निर्धारित होता है, इसी लिए इसका नाम है। क्लस्टर से वर्गीकृत दूरी को कम किया जाता है।
|
|
|
|

|
|
> इन्फोग्राफिक: [दसानी मदिपल्ली](https://twitter.com/dasani_decoded)
|
|
|
|
- **वितरण-आधारित क्लस्टरिंग**। सांख्यिकीय मॉडलिंग पर आधारित, वितरण-आधारित क्लस्टरिंग उस संभावना को निर्धारित करने पर केंद्रित है कि एक डेटा बिंदु किस क्लस्टर से संबंधित है, और उसे उसी अनुसार आवंटित करता है। गौसियन मिश्रण विधियाँ इस प्रकार की क्लस्टरिंग में आती हैं।
|
|
|
|
- **घनत्व-आधारित क्लस्टरिंग**। डेटा बिंदुओं को उनके घनत्व या एक-दूसरे के चारों ओर समूहबद्ध होने के आधार पर क्लस्टर दिये जाते हैं। समूह से दूर डेटा बिंदुओं को आउटलेट या शोर माना जाता है। DBSCAN, Mean-shift और OPTICS इस प्रकार की क्लस्टरिंग में आते हैं।
|
|
|
|
- **ग्रिड-आधारित क्लस्टरिंग**। बहुआयामी डेटासेट के लिए, एक ग्रिड बनाया जाता है और डेटा को ग्रिड की कोशिकाओं में विभाजित किया जाता है, जिससे क्लस्टर बनते हैं।
|
|
|
|
## अभ्यास - अपने डेटा को क्लस्टर करें
|
|
|
|
क्लस्टरिंग तकनीक के लिए उचित विज़ुअलाइज़ेशन बहुत जरूरी है, इसलिए आइए अपने संगीत डेटा का विज़ुअलाइज़ेशन करके शुरू करते हैं। यह अभ्यास हमें यह तय करने में मदद करेगा कि इस डेटा की प्रकृति के अनुसार हम कौन सी क्लस्टरिंग विधि का सबसे प्रभावी उपयोग कर सकते हैं।
|
|
|
|
1. इस फोल्डर में [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/notebook.ipynb) फ़ाइल खोलें।
|
|
|
|
1. अच्छे डेटा विज़ुअलाइज़ेशन के लिए `Seaborn` पैकेज इंपोर्ट करें।
|
|
|
|
```python
|
|
!pip install seaborn
|
|
```
|
|
|
|
1. [_nigerian-songs.csv_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/data/nigerian-songs.csv) से गीत डेटा जोड़ें। गीतों के बारे में कुछ डेटा के साथ एक डेटा फ्रेम लोड करें। लाइब्रेरीज़ इंपोर्ट करें और डेटा को बाहर निकाल कर इसे एक्सप्लोर करने के लिए तैयार हो जाइए:
|
|
|
|
```python
|
|
import matplotlib.pyplot as plt
|
|
import pandas as pd
|
|
|
|
df = pd.read_csv("../data/nigerian-songs.csv")
|
|
df.head()
|
|
```
|
|
|
|
डेटा की पहली कुछ पंक्तियाँ देखें:
|
|
|
|
| | नाम | एल्बम | कलाकार | कलाकार_शीर्ष_शैली | रिलीज़_तारीख | लंबाई | लोकप्रियता | नृत्ययोग्यता | ध्वनिकता | ऊर्जा | वाद्य | जीवंतता | ध्वनि स्तर | भाषणता | टेम्पो | समय_संकेतांक |
|
|
| --- | --------------------------- | ----------------------------- | ------------------- | ----------------- | ------------ | ------- | ----------- | ------------ | ------------ | -------- | --------- | --------- | --------- | -------- | --------------- |
|
|
| 0 | Sparky | Mandy & The Jungle | Cruel Santino | वैकल्पिक r&b | 2019 | 144000 | 48 | 0.666 | 0.851 | 0.42 | 0.534 | 0.11 | -6.699 | 0.0829 | 133.015 | 5 |
|
|
| 1 | shuga rush | EVERYTHING YOU HEARD IS TRUE | Odunsi (The Engine) | अफ्रोपॉप | 2020 | 89488 | 30 | 0.71 | 0.0822 | 0.683 | 0.000169 | 0.101 | -5.64 | 0.36 | 129.993 | 3 |
|
|
| 2 | LITT! | LITT! | AYLØ | indie r&b | 2018 | 207758 | 40 | 0.836 | 0.272 | 0.564 | 0.000537 | 0.11 | -7.127 | 0.0424 | 130.005 | 4 |
|
|
| 3 | Confident / Feeling Cool | Enjoy Your Life | Lady Donli | nigerian pop | 2019 | 175135 | 14 | 0.894 | 0.798 | 0.611 | 0.000187 | 0.0964 | -4.961 | 0.113 | 111.087 | 4 |
|
|
| 4 | wanted you | rare. | Odunsi (The Engine) | afropop | 2018 | 152049 | 25 | 0.702 | 0.116 | 0.833 | 0.91 | 0.348 | -6.044 | 0.0447 | 105.115 | 4 |
|
|
|
|
1. डेटा फ्रेम के बारे में कुछ जानकारी प्राप्त करें, `info()` कॉल करके:
|
|
|
|
```python
|
|
df.info()
|
|
```
|
|
|
|
आउटपुट इस प्रकार दिखता है:
|
|
|
|
```output
|
|
<class 'pandas.core.frame.DataFrame'>
|
|
RangeIndex: 530 entries, 0 to 529
|
|
Data columns (total 16 columns):
|
|
# Column Non-Null Count Dtype
|
|
--- ------ -------------- -----
|
|
0 name 530 non-null object
|
|
1 album 530 non-null object
|
|
2 artist 530 non-null object
|
|
3 artist_top_genre 530 non-null object
|
|
4 release_date 530 non-null int64
|
|
5 length 530 non-null int64
|
|
6 popularity 530 non-null int64
|
|
7 danceability 530 non-null float64
|
|
8 acousticness 530 non-null float64
|
|
9 energy 530 non-null float64
|
|
10 instrumentalness 530 non-null float64
|
|
11 liveness 530 non-null float64
|
|
12 loudness 530 non-null float64
|
|
13 speechiness 530 non-null float64
|
|
14 tempo 530 non-null float64
|
|
15 time_signature 530 non-null int64
|
|
dtypes: float64(8), int64(4), object(4)
|
|
memory usage: 66.4+ KB
|
|
```
|
|
|
|
1. शून्य मानों के लिए दोबारा जांच करें, `isnull()` कॉल करके और कुल योग 0 होने की पुष्टि करें:
|
|
|
|
```python
|
|
df.isnull().sum()
|
|
```
|
|
|
|
सब ठीक दिख रहा है:
|
|
|
|
```output
|
|
name 0
|
|
album 0
|
|
artist 0
|
|
artist_top_genre 0
|
|
release_date 0
|
|
length 0
|
|
popularity 0
|
|
danceability 0
|
|
acousticness 0
|
|
energy 0
|
|
instrumentalness 0
|
|
liveness 0
|
|
loudness 0
|
|
speechiness 0
|
|
tempo 0
|
|
time_signature 0
|
|
dtype: int64
|
|
```
|
|
|
|
1. डेटा का वर्णन करें:
|
|
|
|
```python
|
|
df.describe()
|
|
```
|
|
|
|
| | release_date | length | popularity | danceability | acousticness | energy | instrumentalness | liveness | loudness | speechiness | tempo | time_signature |
|
|
| ----- | ------------ | ----------- | ---------- | ------------ | ------------ | -------- | ---------------- | -------- | --------- | ----------- | ---------- | -------------- |
|
|
| count | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 |
|
|
| mean | 2015.390566 | 222298.1698 | 17.507547 | 0.741619 | 0.265412 | 0.760623 | 0.016305 | 0.147308 | -4.953011 | 0.130748 | 116.487864 | 3.986792 |
|
|
| std | 3.131688 | 39696.82226 | 18.992212 | 0.117522 | 0.208342 | 0.148533 | 0.090321 | 0.123588 | 2.464186 | 0.092939 | 23.518601 | 0.333701 |
|
|
| min | 1998 | 89488 | 0 | 0.255 | 0.000665 | 0.111 | 0 | 0.0283 | -19.362 | 0.0278 | 61.695 | 3 |
|
|
| 25% | 2014 | 199305 | 0 | 0.681 | 0.089525 | 0.669 | 0 | 0.07565 | -6.29875 | 0.0591 | 102.96125 | 4 |
|
|
| 50% | 2016 | 218509 | 13 | 0.761 | 0.2205 | 0.7845 | 0.000004 | 0.1035 | -4.5585 | 0.09795 | 112.7145 | 4 |
|
|
| 75% | 2017 | 242098.5 | 31 | 0.8295 | 0.403 | 0.87575 | 0.000234 | 0.164 | -3.331 | 0.177 | 125.03925 | 4 |
|
|
| max | 2020 | 511738 | 73 | 0.966 | 0.954 | 0.995 | 0.91 | 0.811 | 0.582 | 0.514 | 206.007 | 5 |
|
|
|
|
> 🤔 यदि हम क्लस्टरिंग के साथ काम कर रहे हैं, जो कि एक अनसुपर्वाइज़्ड विधि है और जिसे लेबल किए गए डेटा की आवश्यकता नहीं होती, तो हम यह डेटा लेबल के साथ क्यों दिखा रहे हैं? डेटा अन्वेषण चरण में, वे उपयोगी होते हैं, लेकिन क्लस्टरिंग एल्गोरिदम के काम करने के लिए जरूरी नहीं हैं। आप बस कॉलम हेडर हटा कर डेटा को कॉलम संख्या से संदर्भित कर सकते हैं।
|
|
|
|
डेटा के सामान्य मानों को देखें। ध्यान दें कि लोकप्रियता '0' हो सकती है, जो ऐसी गीतों को दिखाती है जिनकी कोई रैंकिंग नहीं है। आइए इन्हें थोड़ी देर में हटाएं।
|
|
|
|
1. सबसे लोकप्रिय शैलियों का पता लगाने के लिए बारप्लॉट का उपयोग करें:
|
|
|
|
```python
|
|
import seaborn as sns
|
|
|
|
top = df['artist_top_genre'].value_counts()
|
|
plt.figure(figsize=(10,7))
|
|
sns.barplot(x=top[:5].index,y=top[:5].values)
|
|
plt.xticks(rotation=45)
|
|
plt.title('Top genres',color = 'blue')
|
|
```
|
|
|
|

|
|
|
|
✅ यदि आप शीर्ष अधिक मान देखना चाहते हैं, तो शीर्ष `[:5]` को बड़ा मान कहें, या इसे हटा दें ताकि सभी देखें।
|
|
|
|
ध्यान दें, जब शीर्ष शैली 'Missing' के रूप में बताई जाती है, इसका मतलब है कि Spotify ने इसे वर्गीकृत नहीं किया है, तो इसे हटा देते हैं।
|
|
|
|
1. गुम डेटा को फिल्टर करके हटा दें
|
|
|
|
```python
|
|
df = df[df['artist_top_genre'] != 'Missing']
|
|
top = df['artist_top_genre'].value_counts()
|
|
plt.figure(figsize=(10,7))
|
|
sns.barplot(x=top.index,y=top.values)
|
|
plt.xticks(rotation=45)
|
|
plt.title('Top genres',color = 'blue')
|
|
```
|
|
|
|
अब शैलियों की पुनः जांच करें:
|
|
|
|

|
|
|
|
1. अब तक, शीर्ष तीन शैलियां इस डेटासेट पर हावी हैं। चलिए `afro dancehall`, `afropop`, और `nigerian pop` पर ध्यान केंद्रित करते हैं, साथ ही उस डेटासेट को फिल्टर करते हैं जिसमें लोकप्रियता मान 0 है (जिसका अर्थ है कि इसे लोकप्रियता के साथ वर्गीकृत नहीं किया गया है और इसे हमारे प्रयोजनों के लिए शोर माना जा सकता है):
|
|
|
|
```python
|
|
df = df[(df['artist_top_genre'] == 'afro dancehall') | (df['artist_top_genre'] == 'afropop') | (df['artist_top_genre'] == 'nigerian pop')]
|
|
df = df[(df['popularity'] > 0)]
|
|
top = df['artist_top_genre'].value_counts()
|
|
plt.figure(figsize=(10,7))
|
|
sns.barplot(x=top.index,y=top.values)
|
|
plt.xticks(rotation=45)
|
|
plt.title('Top genres',color = 'blue')
|
|
```
|
|
|
|
1. एक त्वरित परीक्षण करें यह देखने के लिए कि क्या डेटा किसी विशेष मजबूत तरीके से सहसंबंधित है:
|
|
|
|
```python
|
|
corrmat = df.corr(numeric_only=True)
|
|
f, ax = plt.subplots(figsize=(12, 9))
|
|
sns.heatmap(corrmat, vmax=.8, square=True)
|
|
```
|
|
|
|

|
|
|
|
केवल मजबूत सहसंबंध `energy` और `loudness` के बीच है, जो हैरानी की बात नहीं है, क्योंकि तेज संगीत आमतौर पर काफी ऊर्जा से भरा होता है। अन्यथा, सहसंबंध अपेक्षाकृत कमजोर हैं। यह देखना रोचक होगा कि क्लस्टरिंग एल्गोरिदम इस डेटा से क्या निष्कर्ष निकालता है।
|
|
|
|
> 🎓 ध्यान दें कि सहसंबंध कारणवाद का प्रमाण नहीं है! हमारे पास सहसंबंध का प्रमाण है लेकिन कारणवाद का नहीं। एक [मनोरंजक वेबसाइट](https://tylervigen.com/spurious-correlations) कुछ दृश्य प्रस्तुत करती है जो इस बात पर जोर देती है।
|
|
|
|
क्या इस डेटासेट में गीत की स्वीकृत लोकप्रियता और नृत्य क्षमता के इर्द-गिर्द कोई संगम है? एक FacetGrid दिखाता है कि एक genre की परवाह किए बिना केंद्रीय वृत्त बन गए हैं। क्या हो सकता है कि नाइजीरियाई स्वाद इस शैली के लिए एक निश्चित स्तर की नृत्य क्षमता पर संगम करते हों?
|
|
|
|
✅ विभिन्न डेटा बिंदुओं (energy, loudness, speechiness) और अधिक या विभिन्न संगीत शैलियों का प्रयास करें। आप क्या खोज सकते हैं? सामान्य डेटा बिंदुओं के प्रसार को देखने के लिए `df.describe()` तालिका देखें।
|
|
|
|
### व्यायाम - डेटा वितरण
|
|
|
|
क्या ये तीन शैलियाँ उनकी लोकप्रियता के आधार पर उनकी नृत्य क्षमता की धारणा में महत्वपूर्ण रूप से अलग हैं?
|
|
|
|
1. हमारी शीर्ष तीन शैलियों के डेटा वितरण की जाँच करें, लोकप्रियता और नृत्य क्षमता के अनुसार एक निर्दिष्ट x और y अक्ष पर।
|
|
|
|
```python
|
|
sns.set_theme(style="ticks")
|
|
|
|
g = sns.jointplot(
|
|
data=df,
|
|
x="popularity", y="danceability", hue="artist_top_genre",
|
|
kind="kde",
|
|
)
|
|
```
|
|
|
|
आप केंद्रीय संकेंद्रित वृत्त देख सकते हैं जो संगम के सामान्य बिंदु के इर्द-गिर्द फैलते हैं, जो बिंदुओं के वितरण को दर्शाते हैं।
|
|
|
|
> 🎓 ध्यान दें कि इस उदाहरण में KDE (Kernel Density Estimate) ग्राफ़ का उपयोग किया गया है जो डेटा को एक निरंतर संभाव्यता घनत्व वक्र के रूप में प्रतिनिधित्व करता है। यह हमें कई वितरणों के साथ काम करते समय डेटा की व्याख्या करने की अनुमति देता है।
|
|
|
|
आम तौर पर, तीनों शैलियां अपनी लोकप्रियता और नृत्य क्षमता के संदर्भ में ढीले तौर पर संरेखित होती हैं। इस ढीले संरेखित डेटा में क्लस्टर निर्धारित करना एक चुनौती होगी:
|
|
|
|

|
|
|
|
1. एक स्कैटर प्लॉट बनाएं:
|
|
|
|
```python
|
|
sns.FacetGrid(df, hue="artist_top_genre", height=5) \
|
|
.map(plt.scatter, "popularity", "danceability") \
|
|
.add_legend()
|
|
```
|
|
|
|
समान अक्षों का स्कैटरप्लॉट एक समान संगम पैटर्न दिखाता है
|
|
|
|

|
|
|
|
आमतौर पर, क्लस्टरिंग के लिए, आप डेटा के क्लस्टर दिखाने के लिए स्कैटरप्लॉट्स का उपयोग कर सकते हैं, इसलिए इस प्रकार के विज़ुअलाइज़ेशन में निपुण होना बहुत उपयोगी है। अगली कक्षा में, हम इस फ़िल्टर किए गए डेटा का उपयोग k-means क्लस्टरिंग करके इन डेटा समूहों की खोज करेंगे जो दिलचस्प तरीके से ओवरलैप लगते हैं।
|
|
|
|
---
|
|
|
|
## 🚀चुनौती
|
|
|
|
अगली कक्षा की तैयारी के लिए, उन विभिन्न क्लस्टरिंग एल्गोरिदम के बारे में एक चार्ट बनाएं जिन्हें आप उत्पादन वातावरण में खोज सकते हैं और उपयोग कर सकते हैं। क्लस्टरिंग किस प्रकार की समस्याओं को सुलझाने की कोशिश कर रही है?
|
|
|
|
## [पोस्ट-लेक्चर क्विज़](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
## समीक्षा और स्व-अध्ययन
|
|
|
|
क्लस्टरिंग एल्गोरिदम लागू करने से पहले, जैसा कि हमने सीखा है, अपने डेटासेट की प्रकृति को समझना अच्छा विचार है। इस विषय पर और पढ़ें [यहाँ](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html)
|
|
|
|
[यह सहायक लेख](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/) आपको विभिन्न क्लस्टरिंग एल्गोरिदम के व्यवहार के विभिन्न तरीकों से परिचित कराता है, जो विभिन्न डेटा आकृतियों में होते हैं।
|
|
|
|
## असाइनमेंट
|
|
|
|
[क्लस्टरिंग के लिए अन्य विज़ुअलाइज़ेशन शोधें](assignment.md)
|
|
|
|
---
|
|
|
|
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
|
**अस्वीकरण**:
|
|
इस दस्तावेज़ का अनुवाद AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में ही प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
|
|
<!-- CO-OP TRANSLATOR DISCLAIMER END --> |