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.
ML-For-Beginners/translations/kn/5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb

493 lines
49 KiB

{
"cells": [
{
"cell_type": "markdown",
"source": [
"## **ನೈಜೀರಿಯನ್ ಸಂಗೀತವನ್ನು Spotify ನಿಂದ ಸ್ಕ್ರೇಪ್ ಮಾಡಲಾಗಿದೆ - ಒಂದು ವಿಶ್ಲೇಷಣೆ**\n",
"\n",
"ಕ್ಲಸ್ಟರಿಂಗ್ ಒಂದು ರೀತಿಯ [ಅನಿಯಂತ್ರಿತ ಕಲಿಕೆ](https://wikipedia.org/wiki/Unsupervised_learning) ಆಗಿದ್ದು, ಇದು ಡೇಟಾಸೆಟ್ ಲೇಬಲ್ ಮಾಡದಿರುವುದು ಅಥವಾ ಅದರ ಇನ್‌ಪುಟ್‌ಗಳು ಪೂರ್ವನಿರ್ಧರಿತ ಔಟ್‌ಪುಟ್‌ಗಳೊಂದಿಗೆ ಹೊಂದಾಣಿಕೆ ಮಾಡದಿರುವುದಾಗಿ ಊಹಿಸುತ್ತದೆ. ಇದು ಲೇಬಲ್ ಮಾಡದ ಡೇಟಾದ ಮೂಲಕ ವಿವಿಧ ಆಲ್ಗಾರಿಥಮ್‌ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಡೇಟಾದಲ್ಲಿನ ಮಾದರಿಗಳ ಪ್ರಕಾರ ಗುಂಪುಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ.\n",
"\n",
"[**ಪೂರ್ವ-ಪಾಠ ಪ್ರಶ್ನೋತ್ತರ**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/27/)\n",
"\n",
"### **ಪರಿಚಯ**\n",
"\n",
"[ಕ್ಲಸ್ಟರಿಂಗ್](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) ಡೇಟಾ ಅನ್ವೇಷಣೆಗೆ ಬಹಳ ಉಪಯುಕ್ತವಾಗಿದೆ. ನೈಜೀರಿಯನ್ ಪ್ರೇಕ್ಷಕರು ಸಂಗೀತವನ್ನು ಹೇಗೆ ಉಪಯೋಗಿಸುತ್ತಾರೆ ಎಂಬುದರಲ್ಲಿ ಟ್ರೆಂಡ್ಸ್ ಮತ್ತು ಮಾದರಿಗಳನ್ನು ಕಂಡುಹಿಡಿಯಲು ಇದು ಸಹಾಯ ಮಾಡಬಹುದೇ ಎಂದು ನೋಡೋಣ.\n",
"\n",
"> ✅ ಕ್ಲಸ್ಟರಿಂಗ್‌ನ ಉಪಯೋಗಗಳನ್ನು ಕುರಿತು ಒಂದು ನಿಮಿಷ ಯೋಚಿಸಿ. ನಿಜ ಜೀವನದಲ್ಲಿ, ನೀವು ಬಟ್ಟೆಗಳನ್ನು ಗುಂಪುಮಾಡಬೇಕಾದಾಗ ಕ್ಲಸ್ಟರಿಂಗ್ ಆಗುತ್ತದೆ 🧦👕👖🩲. ಡೇಟಾ ಸೈನ್ಸ್‌ನಲ್ಲಿ, ಬಳಕೆದಾರರ ಇಚ್ಛೆಗಳ ವಿಶ್ಲೇಷಣೆ ಮಾಡಲು ಅಥವಾ ಯಾವುದೇ ಲೇಬಲ್ ಮಾಡದ ಡೇಟಾಸೆಟ್‌ನ ಲಕ್ಷಣಗಳನ್ನು ನಿರ್ಧರಿಸಲು ಕ್ಲಸ್ಟರಿಂಗ್ ಆಗುತ್ತದೆ. ಕ್ಲಸ್ಟರಿಂಗ್ ಒಂದು ರೀತಿಯಲ್ಲಿ ಗೊಂದಲವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ, ಹೀಗಾಗಿ ಅದು ಒಂದು ಸಾಕ್ ಡ್ರಾಯರ್‌ನಂತೆ.\n",
"\n",
"ವೃತ್ತಿಪರ ಪರಿಸರದಲ್ಲಿ, ಕ್ಲಸ್ಟರಿಂಗ್ ಅನ್ನು ಮಾರುಕಟ್ಟೆ ವಿಭಾಗೀಕರಣ, ಯಾವ ವಯಸ್ಸಿನ ಗುಂಪು ಯಾವ ವಸ್ತುಗಳನ್ನು ಖರೀದಿಸುತ್ತಾರೆ ಎಂಬುದನ್ನು ನಿರ್ಧರಿಸಲು ಬಳಸಬಹುದು. ಮತ್ತೊಂದು ಉಪಯೋಗವು ಅನೋಮಲಿ ಪತ್ತೆಹಚ್ಚುವಿಕೆ, ಉದಾಹರಣೆಗೆ ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್ ವ್ಯವಹಾರಗಳ ಡೇಟಾಸೆಟ್‌ನಿಂದ ಮೋಸವನ್ನು ಪತ್ತೆಹಚ್ಚಲು. ಅಥವಾ ವೈದ್ಯಕೀಯ ಸ್ಕ್ಯಾನ್ಸ್‌ನ ಬ್ಯಾಚ್‌ನಲ್ಲಿ ಟ್ಯೂಮರ್‌ಗಳನ್ನು ಗುರುತಿಸಲು ಕ್ಲಸ್ಟರಿಂಗ್ ಬಳಸಬಹುದು.\n",
"\n",
"✅ ಬ್ಯಾಂಕಿಂಗ್, ಇ-ಕಾಮರ್ಸ್ ಅಥವಾ ವ್ಯವಹಾರ ಪರಿಸರದಲ್ಲಿ ನೀವು ಕ್ಲಸ್ಟರಿಂಗ್ ಅನ್ನು 'ವೈಲ್ಡ್' ನಲ್ಲಿ ಹೇಗೆ ಎದುರಿಸಿದ್ದೀರೋ ಎಂದು ಒಂದು ನಿಮಿಷ ಯೋಚಿಸಿ.\n",
"\n",
"> 🎓 ಆಸಕ್ತಿಕರವಾಗಿ, ಕ್ಲಸ್ಟರ್ ವಿಶ್ಲೇಷಣೆ 1930ರ ದಶಕದಲ್ಲಿ ಮಾನವಶಾಸ್ತ್ರ ಮತ್ತು ಮನೋವಿಜ್ಞಾನ ಕ್ಷೇತ್ರಗಳಲ್ಲಿ ಹುಟ್ಟಿಕೊಂಡಿತು. ನೀವು ಅದನ್ನು ಹೇಗೆ ಬಳಸಲಾಗುತ್ತಿತ್ತು ಎಂದು ಊಹಿಸಬಹುದೇ?\n",
"\n",
"ಮತ್ತೊಂದು ಆಯ್ಕೆ, ಹುಡುಕಾಟ ಫಲಿತಾಂಶಗಳನ್ನು ಗುಂಪುಮಾಡಲು - ಖರೀದಿ ಲಿಂಕ್‌ಗಳು, ಚಿತ್ರಗಳು ಅಥವಾ ವಿಮರ್ಶೆಗಳ ಪ್ರಕಾರ. ದೊಡ್ಡ ಡೇಟಾಸೆಟ್ ಇದ್ದಾಗ ಮತ್ತು ಅದನ್ನು ಕಡಿಮೆ ಮಾಡಲು ಮತ್ತು ಹೆಚ್ಚಿನ ವಿಶ್ಲೇಷಣೆ ಮಾಡಲು ಕ್ಲಸ್ಟರಿಂಗ್ ಉಪಯುಕ್ತವಾಗಿದೆ, ಹೀಗಾಗಿ ಈ ತಂತ್ರವನ್ನು ಇತರ ಮಾದರಿಗಳನ್ನು ನಿರ್ಮಿಸುವ ಮೊದಲು ಡೇಟಾ ಬಗ್ಗೆ ತಿಳಿಯಲು ಬಳಸಬಹುದು.\n",
"\n",
"✅ ನಿಮ್ಮ ಡೇಟಾ ಕ್ಲಸ್ಟರ್‌ಗಳಲ್ಲಿ ಸಂಘಟಿತವಾದ ಮೇಲೆ, ನೀವು ಅದಕ್ಕೆ ಕ್ಲಸ್ಟರ್ ಐಡಿ ನೀಡುತ್ತೀರಿ, ಮತ್ತು ಈ ತಂತ್ರವು ಡೇಟಾಸೆಟ್‌ನ ಗೌಪ್ಯತೆಯನ್ನು ಕಾಪಾಡಲು ಸಹಾಯ ಮಾಡಬಹುದು; ನೀವು ಡೇಟಾ ಪಾಯಿಂಟ್ ಅನ್ನು ಅದರ ಕ್ಲಸ್ಟರ್ ಐಡಿ ಮೂಲಕ ಸೂಚಿಸಬಹುದು, ಹೆಚ್ಚು ಬಹಿರಂಗವಾಗುವ ಗುರುತಿಸುವ ಡೇಟಾ ಬದಲಾಗಿ. ನೀವು ಇನ್ನಾವುದೇ ಕಾರಣಗಳನ್ನು ಯೋಚಿಸಬಹುದೇ, ಏಕೆ ನೀವು ಕ್ಲಸ್ಟರ್ ಐಡಿಯನ್ನು ಬಳಸುತ್ತೀರಿ?\n",
"\n",
"### ಕ್ಲಸ್ಟರಿಂಗ್ ಪ್ರಾರಂಭಿಸುವುದು\n",
"\n",
"> 🎓 ನಾವು ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು ಹೇಗೆ ರಚಿಸುವುದು ಎಂಬುದು ಡೇಟಾ ಪಾಯಿಂಟ್‌ಗಳನ್ನು ಗುಂಪುಗಳಲ್ಲಿ ಹೇಗೆ ಸಂಗ್ರಹಿಸುವುದರ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆ. ಕೆಲವು ಪದಗಳನ್ನು ವಿವರಿಸೋಣ:\n",
">\n",
"> 🎓 ['ಟ್ರಾನ್ಸ್‌ಡಕ್ಟಿವ್' ವಿರುದ್ಧ 'ಇಂಡಕ್ಟಿವ್'](https://wikipedia.org/wiki/Transduction_(machine_learning))\n",
">\n",
"> ಟ್ರಾನ್ಸ್‌ಡಕ್ಟಿವ್ ನಿರ್ಣಯವು ನಿರೀಕ್ಷಿತ ತರಬೇತಿ ಪ್ರಕರಣಗಳಿಂದ ನಿರ್ಗಮಿಸುತ್ತದೆ, ಅವು ನಿರ್ದಿಷ್ಟ ಪರೀಕ್ಷಾ ಪ್ರಕರಣಗಳಿಗೆ ನಕ್ಷೆ ಮಾಡುತ್ತವೆ. ಇಂಡಕ್ಟಿವ್ ನಿರ್ಣಯವು ತರಬೇತಿ ಪ್ರಕರಣಗಳಿಂದ ಸಾಮಾನ್ಯ ನಿಯಮಗಳಿಗೆ ನಕ್ಷೆ ಮಾಡುತ್ತದೆ ಮತ್ತು ನಂತರ ಅವು ಪರೀಕ್ಷಾ ಪ್ರಕರಣಗಳಿಗೆ ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ.\n",
">\n",
"> ಉದಾಹರಣೆ: ನಿಮ್ಮ ಬಳಿ ಭಾಗಶಃ ಲೇಬಲ್ ಮಾಡಲಾದ ಡೇಟಾಸೆಟ್ ಇದ್ದರೆ, ಕೆಲವು 'ರೆಕಾರ್ಡ್‌ಗಳು', ಕೆಲವು 'ಸಿಡಿಗಳು', ಮತ್ತು ಕೆಲವು ಖಾಲಿ. ನಿಮ್ಮ ಕೆಲಸ ಖಾಲಿ ಭಾಗಗಳಿಗೆ ಲೇಬಲ್ ನೀಡುವುದು. ನೀವು ಇಂಡಕ್ಟಿವ್ ವಿಧಾನವನ್ನು ಆರಿಸಿದರೆ, ನೀವು 'ರೆಕಾರ್ಡ್‌ಗಳು' ಮತ್ತು 'ಸಿಡಿಗಳು' ಹುಡುಕುವ ಮಾದರಿಯನ್ನು ತರಬೇತಿಮಾಡಿ, ಆ ಲೇಬಲ್‌ಗಳನ್ನು ಲೇಬಲ್ ಮಾಡದ ಡೇಟಾಗೆ ಅನ್ವಯಿಸುತ್ತೀರಿ. ಈ ವಿಧಾನವು 'ಕ್ಯಾಸೆಟ್‌ಗಳು' ಎಂದು ನಿಜವಾಗಿರುವ ವಸ್ತುಗಳನ್ನು ವರ್ಗೀಕರಿಸಲು ಕಷ್ಟಪಡುತ್ತದೆ. ಟ್ರಾನ್ಸ್‌ಡಕ್ಟಿವ್ ವಿಧಾನವು ಈ ಅಜ್ಞಾತ ಡೇಟಾವನ್ನು ಹೆಚ್ಚು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ನಿರ್ವಹಿಸುತ್ತದೆ, ಏಕೆಂದರೆ ಇದು ಸಮಾನ ವಸ್ತುಗಳನ್ನು ಗುಂಪುಮಾಡಿ ನಂತರ ಗುಂಪಿಗೆ ಲೇಬಲ್ ಅನ್ವಯಿಸುತ್ತದೆ. ಈ ಸಂದರ್ಭದಲ್ಲಿ, ಕ್ಲಸ್ಟರ್‌ಗಳು 'ವೃತ್ತಾಕಾರದ ಸಂಗೀತ ವಸ್ತುಗಳು' ಮತ್ತು 'ಚೌಕಾಕಾರದ ಸಂಗೀತ ವಸ್ತುಗಳು' ಎಂದು ಪ್ರತಿಬಿಂಬಿಸಬಹುದು.\n",
">\n",
"> 🎓 ['ನಾನ್-ಫ್ಲಾಟ್' ವಿರುದ್ಧ 'ಫ್ಲಾಟ್' ಜ್ಯಾಮಿತಿ](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering)\n",
">\n",
"> ಗಣಿತೀಯ ಪದಬಳಕೆಯಿಂದ, ನಾನ್-ಫ್ಲಾಟ್ ಮತ್ತು ಫ್ಲಾಟ್ ಜ್ಯಾಮಿತಿ ಅಂದರೆ ಪಾಯಿಂಟ್‌ಗಳ ನಡುವಿನ ದೂರವನ್ನು 'ಫ್ಲಾಟ್' ([ಯೂಕ್ಲಿಡಿಯನ್](https://wikipedia.org/wiki/Euclidean_geometry)) ಅಥವಾ 'ನಾನ್-ಫ್ಲಾಟ್' (ನಾನ್-ಯೂಕ್ಲಿಡಿಯನ್) ಜ್ಯಾಮಿತೀಯ ವಿಧಾನಗಳಿಂದ ಅಳೆಯುವುದು.\n",
">\n",
"> ಈ ಸಂದರ್ಭದಲ್ಲಿ 'ಫ್ಲಾಟ್' ಅಂದರೆ ಯೂಕ್ಲಿಡಿಯನ್ ಜ್ಯಾಮಿತಿ (ಇದರಲ್ಲಿ ಕೆಲವು ಭಾಗಗಳನ್ನು 'ಪ್ಲೇನ್' ಜ್ಯಾಮಿತಿ ಎಂದು ಕಲಿಸಲಾಗುತ್ತದೆ), ಮತ್ತು ನಾನ್-ಫ್ಲಾಟ್ ಅಂದರೆ ನಾನ್-ಯೂಕ್ಲಿಡಿಯನ್ ಜ್ಯಾಮಿತಿ. ಜ್ಯಾಮಿತಿಗೆ ಯಂತ್ರ ಕಲಿಕೆಗೆ ಏನು ಸಂಬಂಧ? ಗಣಿತದಲ್ಲಿ ಆಧಾರಿತ ಎರಡು ಕ್ಷೇತ್ರಗಳಾಗಿ, ಕ್ಲಸ್ಟರ್‌ಗಳಲ್ಲಿನ ಪಾಯಿಂಟ್‌ಗಳ ನಡುವಿನ ದೂರವನ್ನು ಅಳೆಯಲು ಸಾಮಾನ್ಯ ವಿಧಾನ ಇರಬೇಕು, ಮತ್ತು ಅದು 'ಫ್ಲಾಟ್' ಅಥವಾ 'ನಾನ್-ಫ್ಲಾಟ್' ರೀತಿಯಲ್ಲಿ ಮಾಡಬಹುದು, ಡೇಟಾದ ಸ್ವಭಾವದ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆ. [ಯೂಕ್ಲಿಡಿಯನ್ ದೂರಗಳು](https://wikipedia.org/wiki/Euclidean_distance) ಎರಡು ಪಾಯಿಂಟ್‌ಗಳ ನಡುವಿನ ರೇಖೆಯ ಉದ್ದವಾಗಿ ಅಳೆಯಲ್ಪಡುತ್ತವೆ. [ನಾನ್-ಯೂಕ್ಲಿಡಿಯನ್ ದೂರಗಳು](https://wikipedia.org/wiki/Non-Euclidean_geometry) ವಕ್ರರೇಖೆಯ ಮೇಲೆ ಅಳೆಯಲ್ಪಡುತ್ತವೆ. ನಿಮ್ಮ ಡೇಟಾ, ದೃಶ್ಯೀಕರಿಸಿದಾಗ, ಸಮತಲದಲ್ಲಿ ಇಲ್ಲದಂತೆ ಕಾಣಿಸಿದರೆ, ಅದನ್ನು ನಿರ್ವಹಿಸಲು ವಿಶೇಷ ಆಲ್ಗಾರಿಥಮ್ ಬೇಕಾಗಬಹುದು.\n",
"\n",
"<p >\n",
" <img src=\"../../../../../../translated_images/kn/flat-nonflat.d1c8c6e2a96110c1.webp\"\n",
" width=\"600\"/>\n",
" <figcaption>ಇನ್ಫೋಗ್ರಾಫಿಕ್: ದಾಸನಿ ಮಡಿಪಳ್ಳಿ</figcaption>\n",
"\n",
"> 🎓 ['ದೂರಗಳು'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf)\n",
">\n",
"> ಕ್ಲಸ್ಟರ್‌ಗಳು ಅವುಗಳ ದೂರ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಮೂಲಕ ವ್ಯಾಖ್ಯಾನಿಸಲಾಗುತ್ತವೆ, ಉದಾ. ಪಾಯಿಂಟ್‌ಗಳ ನಡುವಿನ ದೂರಗಳು. ಈ ದೂರವನ್ನು ಕೆಲವು ವಿಧಾನಗಳಲ್ಲಿ ಅಳೆಯಬಹುದು. ಯೂಕ್ಲಿಡಿಯನ್ ಕ್ಲಸ್ಟರ್‌ಗಳು ಪಾಯಿಂಟ್ ಮೌಲ್ಯಗಳ ಸರಾಸರಿಯಿಂದ ವ್ಯಾಖ್ಯಾನಿಸಲಾಗುತ್ತವೆ ಮತ್ತು 'ಸೆಂಟ್ರಾಯ್ಡ್' ಅಥವಾ ಕೇಂದ್ರ ಬಿಂದುವನ್ನು ಹೊಂದಿರುತ್ತವೆ. ದೂರಗಳನ್ನು ಆ ಸೆಂಟ್ರಾಯ್ಡ್‌ಗೆ ಇರುವ ದೂರದಿಂದ ಅಳೆಯಲಾಗುತ್ತದೆ. ನಾನ್-ಯೂಕ್ಲಿಡಿಯನ್ ದೂರಗಳು 'ಕ್ಲಸ್ಟ್ರಾಯ್ಡ್‌ಗಳು'ಗೆ ಸಂಬಂಧಿಸಿದವು, ಇವು ಇತರ ಪಾಯಿಂಟ್‌ಗಳಿಗೆ ಅತ್ಯಂತ ಸಮೀಪದಲ್ಲಿರುವ ಪಾಯಿಂಟ್‌ಗಳು. ಕ್ಲಸ್ಟ್ರಾಯ್ಡ್‌ಗಳನ್ನು ವಿವಿಧ ರೀತಿಯಲ್ಲಿ ವ್ಯಾಖ್ಯಾನಿಸಬಹುದು.\n",
">\n",
"> 🎓 ['ನಿಬಂಧಿತ'](https://wikipedia.org/wiki/Constrained_clustering)\n",
">\n",
"> [ನಿಬಂಧಿತ ಕ್ಲಸ್ಟರಿಂಗ್](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) ಈ ಅನಿಯಂತ್ರಿತ ವಿಧಾನಕ್ಕೆ 'ಅರ್ಧ-ನಿಯಂತ್ರಿತ' ಕಲಿಕೆಯನ್ನು ಪರಿಚಯಿಸುತ್ತದೆ. ಪಾಯಿಂಟ್‌ಗಳ ನಡುವಿನ ಸಂಬಂಧಗಳನ್ನು 'ಕನೆಕ್ಟ್ ಆಗಬಾರದು' ಅಥವಾ 'ಕನೆಕ್ಟ್ ಆಗಬೇಕು' ಎಂದು ಗುರುತಿಸಲಾಗುತ್ತದೆ, ಹೀಗಾಗಿ ಕೆಲವು ನಿಯಮಗಳನ್ನು ಡೇಟಾಸೆಟ್ ಮೇಲೆ ಜಾರಿಗೊಳಿಸಲಾಗುತ್ತದೆ.\n",
">\n",
"> ಉದಾಹರಣೆ: ಒಂದು ಆಲ್ಗಾರಿಥಮ್ ಲೇಬಲ್ ಮಾಡದ ಅಥವಾ ಅರ್ಧ ಲೇಬಲ್ ಮಾಡಲಾದ ಡೇಟಾ ಬ್ಯಾಚ್ ಮೇಲೆ ಮುಕ್ತವಾಗಿದ್ದರೆ, ಅದು ಉತ್ಪಾದಿಸುವ ಕ್ಲಸ್ಟರ್‌ಗಳು ಕಡಿಮೆ ಗುಣಮಟ್ಟದಿರಬಹುದು. ಮೇಲಿನ ಉದಾಹರಣೆಯಲ್ಲಿ, ಕ್ಲಸ್ಟರ್‌ಗಳು 'ವೃತ್ತಾಕಾರದ ಸಂಗೀತ ವಸ್ತುಗಳು', 'ಚೌಕಾಕಾರದ ಸಂಗೀತ ವಸ್ತುಗಳು', 'ತ್ರಿಭುಜಾಕಾರದ ವಸ್ತುಗಳು' ಮತ್ತು 'ಕುಕೀಸ್' ಎಂದು ಗುಂಪುಮಾಡಬಹುದು. ಕೆಲವು ನಿಯಮಗಳು ಅಥವಾ ನಿಯಂತ್ರಣಗಳು (\"ವಸ್ತು ಪ್ಲಾಸ್ಟಿಕ್‌ನಿಂದ ಮಾಡಲ್ಪಟ್ಟಿರಬೇಕು\", \"ವಸ್ತು ಸಂಗೀತ ಉತ್ಪಾದಿಸಲು ಸಾಧ್ಯವಾಗಬೇಕು\") ನೀಡಿದರೆ, ಆಲ್ಗಾರಿಥಮ್ ಉತ್ತಮ ಆಯ್ಕೆಗಳನ್ನು ಮಾಡಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ.\n",
">\n",
"> 🎓 'ಸಾಂದ್ರತೆ'\n",
">\n",
"> 'ಶಬ್ದ' ಇರುವ ಡೇಟಾವನ್ನು 'ಸಾಂದ್ರ' ಎಂದು ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ. ಪ್ರತಿ ಕ್ಲಸ್ಟರ್‌ನಲ್ಲಿನ ಪಾಯಿಂಟ್‌ಗಳ ನಡುವಿನ ದೂರಗಳು ಪರಿಶೀಲನೆಯಾಗುವಾಗ ಹೆಚ್ಚು ಅಥವಾ ಕಡಿಮೆ ಸಾಂದ್ರವಾಗಿರಬಹುದು, ಅಥವಾ 'ಘನತೆ' ಅಥವಾ 'ಜನಸಂಖ್ಯೆ' ಇದ್ದಂತೆ ಕಾಣಬಹುದು, ಹೀಗಾಗಿ ಈ ಡೇಟಾವನ್ನು ಸೂಕ್ತ ಕ್ಲಸ್ಟರಿಂಗ್ ವಿಧಾನದಿಂದ ವಿಶ್ಲೇಷಿಸಬೇಕಾಗುತ್ತದೆ. [ಈ ಲೇಖನ](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) K-ಮೀನ್ಸ್ ಕ್ಲಸ್ಟರಿಂಗ್ ಮತ್ತು HDBSCAN ಆಲ್ಗಾರಿಥಮ್‌ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಅಸಮಾನ ಸಾಂದ್ರತೆ ಇರುವ ಶಬ್ದ ಡೇಟಾಸೆಟ್ ಅನ್ನು ಅನ್ವೇಷಿಸುವ ವ್ಯತ್ಯಾಸವನ್ನು ತೋರಿಸುತ್ತದೆ.\n",
"\n",
"ಈ [ಕಲಿಕೆ ಘಟಕದಲ್ಲಿ](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott) ಕ್ಲಸ್ಟರಿಂಗ್ ತಂತ್ರಗಳನ್ನು ಇನ್ನಷ್ಟು ಆಳವಾಗಿ ತಿಳಿದುಕೊಳ್ಳಿ\n",
"\n",
"### **ಕ್ಲಸ್ಟರಿಂಗ್ ಆಲ್ಗಾರಿಥಮ್‌ಗಳು**\n",
"\n",
"100ಕ್ಕೂ ಹೆಚ್ಚು ಕ್ಲಸ್ಟರಿಂಗ್ ಆಲ್ಗಾರಿಥಮ್‌ಗಳಿವೆ, ಮತ್ತು ಅವುಗಳ ಬಳಕೆ ಡೇಟಾದ ಸ್ವಭಾವದ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆ. ಕೆಲವು ಪ್ರಮುಖಗಳನ್ನು ಚರ್ಚಿಸೋಣ:\n",
"\n",
"- **ಹೈರಾರ್ಕಿಕಲ್ ಕ್ಲಸ್ಟರಿಂಗ್**. ಒಂದು ವಸ್ತುವನ್ನು ಸಮೀಪದ ವಸ್ತುವಿನ ಹತ್ತಿರತೆ ಆಧರಿಸಿ ವರ್ಗೀಕರಿಸಿದರೆ, ಕ್ಲಸ್ಟರ್‌ಗಳು ಸದಸ್ಯರ ದೂರದ ಆಧಾರದ ಮೇಲೆ ರಚಿಸಲಾಗುತ್ತವೆ. ಹೈರಾರ್ಕಿಕಲ್ ಕ್ಲಸ್ಟರಿಂಗ್ ಎರಡು ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು ಪುನರಾವರ್ತಿತವಾಗಿ ಸಂಯೋಜಿಸುವ ಮೂಲಕ ಗುರುತಿಸಲಾಗುತ್ತದೆ.\n",
"\n",
"<p >\n",
" <img src=\"../../../../../../translated_images/kn/hierarchical.bf59403aa43c8c47.webp\"\n",
" width=\"600\"/>\n",
" <figcaption>ಇನ್ಫೋಗ್ರಾಫಿಕ್: ದಾಸನಿ ಮಡಿಪಳ್ಳಿ</figcaption>\n",
"\n",
"- **ಸೆಂಟ್ರಾಯ್ಡ್ ಕ್ಲಸ್ಟರಿಂಗ್**. ಈ ಜನಪ್ರಿಯ ಆಲ್ಗಾರಿಥಮ್ 'k' ಅಥವಾ ರಚಿಸಬೇಕಾದ ಕ್ಲಸ್ಟರ್‌ಗಳ ಸಂಖ್ಯೆಯನ್ನು ಆಯ್ಕೆಮಾಡಬೇಕಾಗುತ್ತದೆ, ನಂತರ ಆಲ್ಗಾರಿಥಮ್ ಕ್ಲಸ್ಟರ್‌ನ ಕೇಂದ್ರ ಬಿಂದುವನ್ನು ನಿರ್ಧರಿಸಿ ಆ ಬಿಂದುವಿನ ಸುತ್ತಲೂ ಡೇಟಾವನ್ನು ಸಂಗ್ರಹಿಸುತ್ತದೆ. [ಕೆ-ಮೀನ್ಸ್ ಕ್ಲಸ್ಟರಿಂಗ್](https://wikipedia.org/wiki/K-means_clustering) ಸೆಂಟ್ರಾಯ್ಡ್ ಕ್ಲಸ್ಟರಿಂಗ್‌ನ ಜನಪ್ರಿಯ ಆವೃತ್ತಿಯಾಗಿದೆ, ಇದು ಡೇಟಾ ಸೆಟ್ ಅನ್ನು ಪೂರ್ವನಿರ್ಧರಿತ K ಗುಂಪುಗಳಾಗಿ ವಿಭಜಿಸುತ್ತದೆ. ಕೇಂದ್ರವನ್ನು ಸಮೀಪದ ಸರಾಸರಿ ಮೂಲಕ ನಿರ್ಧರಿಸಲಾಗುತ್ತದೆ, ಹೀಗಾಗಿ ಹೆಸರಾಗಿದೆ. ಕ್ಲಸ್ಟರ್‌ನಿಂದ ಚದರ ದೂರವನ್ನು ಕನಿಷ್ಠಗೊಳಿಸಲಾಗುತ್ತದೆ.\n",
"\n",
"<p >\n",
" <img src=\"../../../../../../translated_images/kn/centroid.097fde836cf6c918.webp\"\n",
" width=\"600\"/>\n",
" <figcaption>ಇನ್ಫೋಗ್ರಾಫಿಕ್: ದಾಸನಿ ಮಡಿಪಳ್ಳಿ</figcaption>\n",
"\n",
"- **ವಿತರಣಾ ಆಧಾರಿತ ಕ್ಲಸ್ಟರಿಂಗ್**. ಸಾಂಖ್ಯಿಕ ಮಾದರಿಗೊಳಿಸುವಿಕೆಯಲ್ಲಿ ಆಧಾರಿತ, ವಿತರಣಾ ಆಧಾರಿತ ಕ್ಲಸ್ಟರಿಂಗ್ ಡೇಟಾ ಪಾಯಿಂಟ್ ಒಂದು ಕ್ಲಸ್ಟರ್‌ಗೆ ಸೇರಿದ ಸಾಧ್ಯತೆಯನ್ನು ನಿರ್ಧರಿಸಿ ಅದಕ್ಕೆ ಅನುಗುಣವಾಗಿ ನಿಯೋಜಿಸುತ್ತದೆ. ಗಾಸಿಯನ್ ಮಿಶ್ರಣ ವಿಧಾನಗಳು ಈ ಪ್ರಕಾರಕ್ಕೆ ಸೇರಿವೆ.\n",
"\n",
"- **ಸಾಂದ್ರತೆ ಆಧಾರಿತ ಕ್ಲಸ್ಟರಿಂಗ್**. ಡೇಟಾ ಪಾಯಿಂಟ್‌ಗಳನ್ನು ಅವುಗಳ ಸಾಂದ್ರತೆ ಅಥವಾ ಪರಸ್ಪರ ಗುಂಪುಮಾಡುವಿಕೆಯ ಆಧಾರದ ಮೇಲೆ ಕ್ಲಸ್ಟರ್‌ಗಳಿಗೆ ನಿಯೋಜಿಸಲಾಗುತ್ತದೆ. ಗುಂಪಿನಿಂದ ದೂರವಿರುವ ಡೇಟಾ ಪಾಯಿಂಟ್‌ಗಳನ್ನು ಹೊರಗಿನ ಅಥವಾ ಶಬ್ದ ಎಂದು ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ. DBSCAN, ಮೀನ್-ಶಿಫ್ಟ್ ಮತ್ತು OPTICS ಈ ಪ್ರಕಾರದ ಕ್ಲಸ್ಟರಿಂಗ್‌ಗೆ ಸೇರಿವೆ.\n",
"\n",
"- **ಗ್ರಿಡ್ ಆಧಾರಿತ ಕ್ಲಸ್ಟರಿಂಗ್**. ಬಹು-ಮಾನದಂಡ ಡೇಟಾಸೆಟ್‌ಗಳಿಗೆ, ಗ್ರಿಡ್ ರಚಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಡೇಟಾವನ್ನು ಗ್ರಿಡ್‌ನ ಸೆಲ್‌ಗಳ ನಡುವೆ ಹಂಚಲಾಗುತ್ತದೆ, ಹೀಗಾಗಿ ಕ್ಲಸ್ಟರ್‌ಗಳು ರಚಿಸಲಾಗುತ್ತವೆ.\n",
"\n",
"ಕ್ಲಸ್ಟರಿಂಗ್ ಬಗ್ಗೆ ತಿಳಿಯಲು ಉತ್ತಮ ಮಾರ್ಗವೆಂದರೆ ಅದನ್ನು ಸ್ವತಃ ಪ್ರಯತ್ನಿಸುವುದು, ಹಾಗಾಗಿ ನೀವು ಈ ಅಭ್ಯಾಸದಲ್ಲಿ ಅದನ್ನು ಮಾಡುತ್ತೀರಿ.\n",
"\n",
"ಈ ಘಟಕವನ್ನು ಮುಗಿಸಲು ಕೆಲವು ಪ್ಯಾಕೇಜ್‌ಗಳು ಬೇಕಾಗುತ್ತವೆ. ನೀವು ಅವುಗಳನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಬಹುದು: `install.packages(c('tidyverse', 'tidymodels', 'DataExplorer', 'summarytools', 'plotly', 'paletteer', 'corrplot', 'patchwork'))`\n",
"\n",
"ಬದಲಾಗಿ, ಕೆಳಗಿನ ಸ್ಕ್ರಿಪ್ಟ್ ಈ ಘಟಕವನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಬೇಕಾದ ಪ್ಯಾಕೇಜ್‌ಗಳಿದ್ದರೆ ಅವುಗಳನ್ನು ಪರಿಶೀಲಿಸಿ, ಇಲ್ಲದಿದ್ದರೆ ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡುತ್ತದೆ.\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"suppressWarnings(if(!require(\"pacman\")) install.packages(\"pacman\"))\r\n",
"\r\n",
"pacman::p_load('tidyverse', 'tidymodels', 'DataExplorer', 'summarytools', 'plotly', 'paletteer', 'corrplot', 'patchwork')\r\n"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"## ವ್ಯಾಯಾಮ - ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಗುಂಪುಮಾಡಿ\n",
"\n",
"ಗುಂಪುಮಾಡುವಿಕೆ ಎಂಬ ತಂತ್ರಜ್ಞಾನವು ಸರಿಯಾದ ದೃಶ್ಯೀಕರಣದಿಂದ ಬಹಳ ಸಹಾಯವಾಗುತ್ತದೆ, ಆದ್ದರಿಂದ ನಮ್ಮ ಸಂಗೀತ ಡೇಟಾವನ್ನು ದೃಶ್ಯೀಕರಿಸುವುದರಿಂದ ಪ್ರಾರಂಭಿಸೋಣ. ಈ ವ್ಯಾಯಾಮವು ಈ ಡೇಟಾದ ಸ್ವಭಾವಕ್ಕೆ ಯಾವ ಗುಂಪುಮಾಡುವಿಕೆ ವಿಧಾನವನ್ನು ನಾವು ಅತ್ಯಂತ ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಬಳಸಬೇಕು ಎಂದು ನಿರ್ಧರಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ.\n",
"\n",
"ಡೇಟಾವನ್ನು ಆಮದು ಮಾಡುವ ಮೂಲಕ ನಾವು ತಕ್ಷಣ ಪ್ರಾರಂಭಿಸೋಣ.\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Load the core tidyverse and make it available in your current R session\r\n",
"library(tidyverse)\r\n",
"\r\n",
"# Import the data into a tibble\r\n",
"df <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/5-Clustering/data/nigerian-songs.csv\")\r\n",
"\r\n",
"# View the first 5 rows of the data set\r\n",
"df %>% \r\n",
" slice_head(n = 5)\r\n"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"ಕೆಲವೊಮ್ಮೆ, ನಾವು ನಮ್ಮ ಡೇಟಾದ ಬಗ್ಗೆ ಸ್ವಲ್ಪ ಹೆಚ್ಚು ಮಾಹಿತಿಯನ್ನು ಬಯಸಬಹುದು. ನಾವು [*glimpse()*](https://pillar.r-lib.org/reference/glimpse.html) ಫಂಕ್ಷನ್ ಬಳಸಿ `ಡೇಟಾ` ಮತ್ತು `ಅದರ ರಚನೆ` ಅನ್ನು ನೋಡಬಹುದು:\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Glimpse into the data set\r\n",
"df %>% \r\n",
" glimpse()\r\n"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"ಚೆನ್ನಾಗಿದೆ!💪\n",
"\n",
"ನಾವು ಗಮನಿಸಬಹುದು `glimpse()` ನಿಮಗೆ ಒಟ್ಟು ಸಾಲುಗಳ ಸಂಖ್ಯೆ (ನಿರೀಕ್ಷಣೆಗಳು) ಮತ್ತು ಕಾಲಮ್‌ಗಳು (ಚರಗಳು) ನೀಡುತ್ತದೆ, ನಂತರ, ಪ್ರತಿ ಚರದ ಹೆಸರು ನಂತರ ಸಾಲಿನಲ್ಲಿ ಪ್ರತಿ ಚರದ ಮೊದಲ ಕೆಲವು ಎಂಟ್ರಿಗಳನ್ನು ನೀಡುತ್ತದೆ. ಜೊತೆಗೆ, ಚರದ *ಡೇಟಾ ಪ್ರಕಾರ* ಪ್ರತಿ ಚರದ ಹೆಸರಿನ ನಂತರ ತಕ್ಷಣ `< >` ಒಳಗೆ ನೀಡಲಾಗಿದೆ.\n",
"\n",
"`DataExplorer::introduce()` ಈ ಮಾಹಿತಿಯನ್ನು ಸುಂದರವಾಗಿ ಸಾರಬಹುದು:\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Describe basic information for our data\r\n",
"df %>% \r\n",
" introduce()\r\n",
"\r\n",
"# A visual display of the same\r\n",
"df %>% \r\n",
" plot_intro()\r\n"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"ಅದ್ಭುತ! ನಮ್ಮ ಡೇಟಾದಲ್ಲಿ ಯಾವುದೇ ಮಿಸ್ಸಿಂಗ್ ಮೌಲ್ಯಗಳಿಲ್ಲ ಎಂದು ನಾವು ಈಗಾಗಲೇ ಕಲಿತಿದ್ದೇವೆ.\n",
"\n",
"ನಾವು ಇದರಲ್ಲಿ ಇದ್ದಾಗ, ಸಾಮಾನ್ಯ ಕೇಂದ್ರ ಪ್ರವೃತ್ತಿ ಅಂಕಿಅಂಶಗಳನ್ನು (ಉದಾ: [ಸರಾಸರಿ](https://en.wikipedia.org/wiki/Arithmetic_mean) ಮತ್ತು [ಮಧ್ಯಮ](https://en.wikipedia.org/wiki/Median)) ಮತ್ತು ವಿಸ್ತರಣೆಯ ಅಳತೆಗಳನ್ನು (ಉದಾ: [ಪ್ರಮಾಣಿತ ವ್ಯತ್ಯಾಸ](https://en.wikipedia.org/wiki/Standard_deviation)) `summarytools::descr()` ಬಳಸಿ ಅನ್ವೇಷಿಸಬಹುದು.\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Describe common statistics\r\n",
"df %>% \r\n",
" descr(stats = \"common\")\r\n"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"ಡೇಟಾದ ಸಾಮಾನ್ಯ ಮೌಲ್ಯಗಳನ್ನು ನೋಡೋಣ. ಜನಪ್ರಿಯತೆ `0` ಆಗಿರಬಹುದು, ಇದು ರ್ಯಾಂಕಿಂಗ್ ಇಲ್ಲದ ಹಾಡುಗಳನ್ನು ತೋರಿಸುತ್ತದೆ. ಅವುಗಳನ್ನು ನಾವು ಶೀಘ್ರದಲ್ಲೇ ತೆಗೆದುಹಾಕುತ್ತೇವೆ.\n",
"\n",
"> 🤔 ನಾವು ಕ್ಲಸ್ಟರಿಂಗ್‌ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುತ್ತಿದ್ದರೆ, ಲೇಬಲ್ ಮಾಡಲಾದ ಡೇಟಾವನ್ನು ಅಗತ್ಯವಿಲ್ಲದ ಅನ್‌ಸೂಪರ್ವೈಸ್ಡ್ ವಿಧಾನ, ನಾವು ಈ ಡೇಟಾವನ್ನು ಲೇಬಲ್‌ಗಳೊಂದಿಗೆ ಏಕೆ ತೋರಿಸುತ್ತಿದ್ದೇವೆ? ಡೇಟಾ ಅನ್ವೇಷಣಾ ಹಂತದಲ್ಲಿ ಅವು ಸಹಾಯಕವಾಗುತ್ತವೆ, ಆದರೆ ಕ್ಲಸ್ಟರಿಂಗ್ ಆಲ್ಗಾರಿಥಮ್‌ಗಳು ಕಾರ್ಯನಿರ್ವಹಿಸಲು ಅವು ಅಗತ್ಯವಿಲ್ಲ.\n",
"\n",
"### 1. ಜನಪ್ರಿಯ ಶೈಲಿಗಳನ್ನು ಅನ್ವೇಷಿಸಿ\n",
"\n",
"ಹಾಗಾದರೆ ನಾವು ಮುಂದುವರಿದು, ಅದು ಕಾಣಿಸುವ ಸಂದರ್ಭಗಳ ಎಣಿಕೆಯನ್ನು ಮಾಡಿ ಅತ್ಯಂತ ಜನಪ್ರಿಯ ಶೈಲಿಗಳನ್ನು ಕಂಡುಹಿಡಿಯೋಣ 🎶.\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Popular genres\r\n",
"top_genres <- df %>% \r\n",
" count(artist_top_genre, sort = TRUE) %>% \r\n",
"# Encode to categorical and reorder the according to count\r\n",
" mutate(artist_top_genre = factor(artist_top_genre) %>% fct_inorder())\r\n",
"\r\n",
"# Print the top genres\r\n",
"top_genres\r\n"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"ಅದು ಚೆನ್ನಾಗಿ ನಡೆದಿತು! ಅವರು ಹೇಳುತ್ತಾರೆ ಒಂದು ಚಿತ್ರವು ಡೇಟಾ ಫ್ರೇಮ್‌ನ ಸಾವಿರ ಸಾಲುಗಳ ಮೌಲ್ಯವಿದೆ (ನಿಜವಾಗಿಯೂ ಯಾರೂ ಎಂದಿಲ್ಲ 😅). ಆದರೆ ನೀವು ಅದರ ಅರ್ಥವನ್ನು ಹಿಡಿದಿಟ್ಟುಕೊಳ್ಳುತ್ತೀರಿ, ಅಲ್ಲವೇ?\n",
"\n",
"ವರ್ಗೀಕೃತ ಡೇಟಾವನ್ನು (ಅಕ್ಷರ ಅಥವಾ ಫ್ಯಾಕ್ಟರ್ ಚರಗಳು) ದೃಶ್ಯೀಕರಿಸುವ ಒಂದು ವಿಧಾನವೆಂದರೆ ಬಾರ್ಪ್ಲಾಟ್‌ಗಳನ್ನು ಬಳಸುವುದು. ಟಾಪ್ 10 ಶೈಲಿಗಳ ಬಾರ್ಪ್ಲಾಟ್ ಅನ್ನು ಮಾಡೋಣ:\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Change the default gray theme\r\n",
"theme_set(theme_light())\r\n",
"\r\n",
"# Visualize popular genres\r\n",
"top_genres %>%\r\n",
" slice(1:10) %>% \r\n",
" ggplot(mapping = aes(x = artist_top_genre, y = n,\r\n",
" fill = artist_top_genre)) +\r\n",
" geom_col(alpha = 0.8) +\r\n",
" paletteer::scale_fill_paletteer_d(\"rcartocolor::Vivid\") +\r\n",
" ggtitle(\"Top genres\") +\r\n",
" theme(plot.title = element_text(hjust = 0.5),\r\n",
" # Rotates the X markers (so we can read them)\r\n",
" axis.text.x = element_text(angle = 90))\r\n"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"ಈಗ ನಾವು `missing` ಶೈಲಿಗಳನ್ನು ಗುರುತಿಸುವುದು ಬಹಳ ಸುಲಭವಾಗಿದೆ 🧐!\n",
"\n",
"> ಒಳ್ಳೆಯ ದೃಶ್ಯೀಕರಣವು ನೀವು ನಿರೀಕ್ಷಿಸದ ವಿಷಯಗಳನ್ನು ತೋರಿಸುತ್ತದೆ, ಅಥವಾ ಡೇಟಾ ಬಗ್ಗೆ ಹೊಸ ಪ್ರಶ್ನೆಗಳನ್ನು ಎತ್ತಿಹಿಡಿಯುತ್ತದೆ - ಹ್ಯಾಡ್ಲಿ ವಿಕ್‌ಹ್ಯಾಮ್ ಮತ್ತು ಗ್ಯಾರೆಟ್ ಗ್ರೋಲೆಮಂಡ್, [R For Data Science](https://r4ds.had.co.nz/introduction.html)\n",
"\n",
"ಗಮನಿಸಿ, ಮೇಲಿನ ಶೈಲಿಯನ್ನು `Missing` ಎಂದು ವರ್ಣಿಸಿದಾಗ, ಅದು Spotify ಅದನ್ನು ವರ್ಗೀಕರಿಸದಿರುವುದನ್ನು ಅರ್ಥಮಾಡುತ್ತದೆ, ಆದ್ದರಿಂದ ಅದನ್ನು ತೆಗೆದುಹಾಕೋಣ.\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Visualize popular genres\r\n",
"top_genres %>%\r\n",
" filter(artist_top_genre != \"Missing\") %>% \r\n",
" slice(1:10) %>% \r\n",
" ggplot(mapping = aes(x = artist_top_genre, y = n,\r\n",
" fill = artist_top_genre)) +\r\n",
" geom_col(alpha = 0.8) +\r\n",
" paletteer::scale_fill_paletteer_d(\"rcartocolor::Vivid\") +\r\n",
" ggtitle(\"Top genres\") +\r\n",
" theme(plot.title = element_text(hjust = 0.5),\r\n",
" # Rotates the X markers (so we can read them)\r\n",
" axis.text.x = element_text(angle = 90))\r\n"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"ಸಣ್ಣ ಡೇಟಾ ಅನ್ವೇಷಣೆಯಿಂದ, ಈ ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ ಟಾಪ್ ಮೂರು ಶೈಲಿಗಳು ಪ್ರಭುತ್ವ ಹೊಂದಿವೆ ಎಂದು ತಿಳಿದುಕೊಳ್ಳಬಹುದು. ನಾವು `afro dancehall`, `afropop`, ಮತ್ತು `nigerian pop` ಮೇಲೆ ಗಮನಹರಿಸೋಣ, ಜೊತೆಗೆ 0 ಜನಪ್ರಿಯತೆ ಮೌಲ್ಯವಿರುವ ಯಾವುದೇ ವಸ್ತುವನ್ನು ತೆಗೆದುಹಾಕಲು ಡೇಟಾಸೆಟ್ ಅನ್ನು ಫಿಲ್ಟರ್ ಮಾಡೋಣ (ಅರ್ಥಾತ್ ಅದು ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ ಜನಪ್ರಿಯತೆಯೊಂದಿಗೆ ವರ್ಗೀಕರಿಸಲಾಗಿಲ್ಲ ಮತ್ತು ನಮ್ಮ ಉದ್ದೇಶಗಳಿಗೆ ಶಬ್ದ ಎಂದು ಪರಿಗಣಿಸಬಹುದು):\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"nigerian_songs <- df %>% \r\n",
" # Concentrate on top 3 genres\r\n",
" filter(artist_top_genre %in% c(\"afro dancehall\", \"afropop\",\"nigerian pop\")) %>% \r\n",
" # Remove unclassified observations\r\n",
" filter(popularity != 0)\r\n",
"\r\n",
"\r\n",
"\r\n",
"# Visualize popular genres\r\n",
"nigerian_songs %>%\r\n",
" count(artist_top_genre) %>%\r\n",
" ggplot(mapping = aes(x = artist_top_genre, y = n,\r\n",
" fill = artist_top_genre)) +\r\n",
" geom_col(alpha = 0.8) +\r\n",
" paletteer::scale_fill_paletteer_d(\"ggsci::category10_d3\") +\r\n",
" ggtitle(\"Top genres\") +\r\n",
" theme(plot.title = element_text(hjust = 0.5))\r\n"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"ನಮ್ಮ ಡೇಟಾ ಸೆಟ್‌ನ ಸಂಖ್ಯಾತ್ಮಕ ಚರಗಳ ನಡುವೆ ಯಾವುದೇ ಸ್ಪಷ್ಟ ರೇಖೀಯ ಸಂಬಂಧವಿದೆಯೇ ಎಂದು ನೋಡೋಣ. ಈ ಸಂಬಂಧವನ್ನು ಗಣಿತೀಯವಾಗಿ [ಸಂಬಂಧಿತ ಅಂಕಿ](https://en.wikipedia.org/wiki/Correlation) ಮೂಲಕ ಪ್ರಮಾಣೀಕರಿಸಲಾಗುತ್ತದೆ.\n",
"\n",
"ಸಂಬಂಧಿತ ಅಂಕಿ -1 ಮತ್ತು 1 ನಡುವಿನ ಮೌಲ್ಯವಾಗಿದ್ದು, ಸಂಬಂಧದ ಬಲವನ್ನು ಸೂಚಿಸುತ್ತದೆ. 0 ಕ್ಕಿಂತ ಮೇಲ್ಪಟ್ಟ ಮೌಲ್ಯಗಳು *ಧನಾತ್ಮಕ* ಸಂಬಂಧವನ್ನು ಸೂಚಿಸುತ್ತವೆ (ಒಂದು ಚರದ ಹೆಚ್ಚಿನ ಮೌಲ್ಯಗಳು ಇನ್ನೊಂದು ಚರದ ಹೆಚ್ಚಿನ ಮೌಲ್ಯಗಳೊಂದಿಗೆ ಹೊಂದಿಕೊಳ್ಳುವ ಸಾಧ್ಯತೆ), ಮತ್ತು 0 ಕ್ಕಿಂತ ಕೆಳಗಿನ ಮೌಲ್ಯಗಳು *ನಕಾರಾತ್ಮಕ* ಸಂಬಂಧವನ್ನು ಸೂಚಿಸುತ್ತವೆ (ಒಂದು ಚರದ ಹೆಚ್ಚಿನ ಮೌಲ್ಯಗಳು ಇನ್ನೊಂದು ಚರದ ಕಡಿಮೆ ಮೌಲ್ಯಗಳೊಂದಿಗೆ ಹೊಂದಿಕೊಳ್ಳುವ ಸಾಧ್ಯತೆ).\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Narrow down to numeric variables and fid correlation\r\n",
"corr_mat <- nigerian_songs %>% \r\n",
" select(where(is.numeric)) %>% \r\n",
" cor()\r\n",
"\r\n",
"# Visualize correlation matrix\r\n",
"corrplot(corr_mat, order = 'AOE', col = c('white', 'black'), bg = 'gold2') \r\n"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"ಡೇಟಾ ಬಲವಾಗಿ ಸಂಬಂಧಿತವಿಲ್ಲ, ಹೊರತು `energy` ಮತ್ತು `loudness` ನಡುವೆ, ಇದು ಅರ್ಥವಾಗುತ್ತದೆ, ಏಕೆಂದರೆ ಗಟ್ಟಿಯಾದ ಸಂಗೀತವು ಸಾಮಾನ್ಯವಾಗಿ ಸಾಕಷ್ಟು ಶಕ್ತಿಶಾಲಿಯಾಗಿರುತ್ತದೆ. `Popularity` ಗೆ `release date` ಗೆ ಸಂಬಂಧವಿದೆ, ಇದು ಸಹ ಅರ್ಥವಾಗುತ್ತದೆ, ಏಕೆಂದರೆ ಇತ್ತೀಚಿನ ಹಾಡುಗಳು ಬಹುಶಃ ಹೆಚ್ಚು ಜನಪ್ರಿಯವಾಗಿರುತ್ತವೆ. Length ಮತ್ತು energy ಕೂಡ ಸಂಬಂಧ ಹೊಂದಿರುವಂತೆ ತೋರುತ್ತದೆ.\n",
"\n",
"ಈ ಡೇಟಾದಿಂದ ಕ್ಲಸ್ಟರಿಂಗ್ ಆಲ್ಗೋರಿದಮ್ ಏನು ಮಾಡಬಹುದು ಎಂದು ನೋಡುವುದು ಆಸಕ್ತಿದಾಯಕವಾಗಿರುತ್ತದೆ!\n",
"\n",
"> 🎓 ಗಮನಿಸಿ, ಸಂಬಂಧವು ಕಾರಣವಲ್ಲ ಎಂದು ಸೂಚಿಸುವುದಿಲ್ಲ! ನಮ್ಮ ಬಳಿ ಸಂಬಂಧದ ಸಾಬೀತು ಇದೆ ಆದರೆ ಕಾರಣದ ಸಾಬೀತು ಇಲ್ಲ. ಒಂದು [ಮನರಂಜನೀಯ ವೆಬ್ ಸೈಟ್](https://tylervigen.com/spurious-correlations) ಈ ವಿಷಯವನ್ನು ಒತ್ತಿಹೇಳುವ ಕೆಲವು ದೃಶ್ಯಗಳನ್ನು ಹೊಂದಿದೆ.\n",
"\n",
"### 2. ಡೇಟಾ ವಿತರಣೆ ಅನ್ವೇಷಣೆ\n",
"\n",
"ನಾವು ಇನ್ನಷ್ಟು ಸೂಕ್ಷ್ಮ ಪ್ರಶ್ನೆಗಳನ್ನು ಕೇಳೋಣ. ಜನಪ್ರಿಯತೆಯ ಆಧಾರದ ಮೇಲೆ ಅವರ ಡ್ಯಾನ್ಸಬಿಲಿಟಿ ಗ್ರಹಣೆಯಲ್ಲಿ ಶೈಲಿಗಳು ಪ್ರಮುಖವಾಗಿ ವಿಭಿನ್ನವಾಗಿದೆಯೇ? ನಾವು ನಮ್ಮ ಟಾಪ್ ಮೂರು ಶೈಲಿಗಳ ಜನಪ್ರಿಯತೆ ಮತ್ತು ಡ್ಯಾನ್ಸಬಿಲಿಟಿ ಡೇಟಾ ವಿತರಣೆಯನ್ನು ನೀಡಲಾದ x ಮತ್ತು y ಅಕ್ಷಗಳ ಮೇಲೆ [density plots](https://www.khanacademy.org/math/ap-statistics/density-curves-normal-distribution-ap/density-curves/v/density-curves) ಬಳಸಿ ಪರಿಶೀಲಿಸೋಣ.\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Perform 2D kernel density estimation\r\n",
"density_estimate_2d <- nigerian_songs %>% \r\n",
" ggplot(mapping = aes(x = popularity, y = danceability, color = artist_top_genre)) +\r\n",
" geom_density_2d(bins = 5, size = 1) +\r\n",
" paletteer::scale_color_paletteer_d(\"RSkittleBrewer::wildberry\") +\r\n",
" xlim(-20, 80) +\r\n",
" ylim(0, 1.2)\r\n",
"\r\n",
"# Density plot based on the popularity\r\n",
"density_estimate_pop <- nigerian_songs %>% \r\n",
" ggplot(mapping = aes(x = popularity, fill = artist_top_genre, color = artist_top_genre)) +\r\n",
" geom_density(size = 1, alpha = 0.5) +\r\n",
" paletteer::scale_fill_paletteer_d(\"RSkittleBrewer::wildberry\") +\r\n",
" paletteer::scale_color_paletteer_d(\"RSkittleBrewer::wildberry\") +\r\n",
" theme(legend.position = \"none\")\r\n",
"\r\n",
"# Density plot based on the danceability\r\n",
"density_estimate_dance <- nigerian_songs %>% \r\n",
" ggplot(mapping = aes(x = danceability, fill = artist_top_genre, color = artist_top_genre)) +\r\n",
" geom_density(size = 1, alpha = 0.5) +\r\n",
" paletteer::scale_fill_paletteer_d(\"RSkittleBrewer::wildberry\") +\r\n",
" paletteer::scale_color_paletteer_d(\"RSkittleBrewer::wildberry\")\r\n",
"\r\n",
"\r\n",
"# Patch everything together\r\n",
"library(patchwork)\r\n",
"density_estimate_2d / (density_estimate_pop + density_estimate_dance)\r\n"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"ನಾವು ನೋಡುತ್ತೇವೆ, ಪ್ರಕಾರವನ್ನು ಪರಿಗಣಿಸದೆ, ಸುತ್ತುವರೆದ ವೃತ್ತಗಳು ಸರಿಹೊಂದಿವೆ. ಈ ಪ್ರಕಾರಕ್ಕಾಗಿ ನೈಜೀರಿಯನ್ ರುಚಿಗಳು ನೃತ್ಯ ಸಾಮರ್ಥ್ಯದ ನಿರ್ದಿಷ್ಟ ಮಟ್ಟದಲ್ಲಿ ಒಗ್ಗೂಡುತ್ತವೆಯೇ?\n",
"\n",
"ಸಾಮಾನ್ಯವಾಗಿ, ಮೂರು ಪ್ರಕಾರಗಳು ಅವರ ಜನಪ್ರಿಯತೆ ಮತ್ತು ನೃತ್ಯ ಸಾಮರ್ಥ್ಯದ ದೃಷ್ಟಿಯಿಂದ ಸರಿಹೊಂದಿವೆ. ಈ ಸಡಿಲವಾಗಿ ಸರಿಹೊಂದಿದ ಡೇಟಾದಲ್ಲಿ ಗುಂಪುಗಳನ್ನು ನಿರ್ಧರಿಸುವುದು ಒಂದು ಸವಾಲಾಗಿರುತ್ತದೆ. ಇದನ್ನು scatter plot ಬೆಂಬಲಿಸಬಹುದೇ ಎಂದು ನೋಡೋಣ.\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# A scatter plot of popularity and danceability\r\n",
"scatter_plot <- nigerian_songs %>% \r\n",
" ggplot(mapping = aes(x = popularity, y = danceability, color = artist_top_genre, shape = artist_top_genre)) +\r\n",
" geom_point(size = 2, alpha = 0.8) +\r\n",
" paletteer::scale_color_paletteer_d(\"futurevisions::mars\")\r\n",
"\r\n",
"# Add a touch of interactivity\r\n",
"ggplotly(scatter_plot)\r\n"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"ಒಂದು ಸ್ಕ್ಯಾಟರ್‌ಪ್ಲಾಟ್ ಅದೇ ಅಕ್ಷಗಳ ಮೇಲೆ ಸಮಾನವಾದ ಸಂಯೋಜನೆಯ ಮಾದರಿಯನ್ನು ತೋರಿಸುತ್ತದೆ.\n",
"\n",
"ಸಾಮಾನ್ಯವಾಗಿ, ಕ್ಲಸ್ಟರಿಂಗ್‌ಗಾಗಿ, ನೀವು ಡೇಟಾದ ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು ತೋರಿಸಲು ಸ್ಕ್ಯಾಟರ್‌ಪ್ಲಾಟ್‌ಗಳನ್ನು ಬಳಸಬಹುದು, ಆದ್ದರಿಂದ ಈ ರೀತಿಯ ದೃಶ್ಯೀಕರಣವನ್ನು ನಿಪುಣರಾಗುವುದು ಬಹಳ ಉಪಯುಕ್ತವಾಗಿದೆ. ಮುಂದಿನ ಪಾಠದಲ್ಲಿ, ನಾವು ಈ ಫಿಲ್ಟರ್ ಮಾಡಿದ ಡೇಟಾವನ್ನು ತೆಗೆದುಕೊಂಡು k-ಮೀನ್ಸ್ ಕ್ಲಸ್ಟರಿಂಗ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು ಈ ಡೇಟಾದಲ್ಲಿ ಆಸಕ್ತಿದಾಯಕ ರೀತಿಯಲ್ಲಿ ಒಟ್ಟುಗೂಡುತ್ತಿರುವ ಗುಂಪುಗಳನ್ನು ಕಂಡುಹಿಡಿಯುತ್ತೇವೆ.\n",
"\n",
"## **🚀 ಸವಾಲು**\n",
"\n",
"ಮುಂದಿನ ಪಾಠದ ತಯಾರಿಗಾಗಿ, ನೀವು ಕಂಡುಹಿಡಿಯಬಹುದಾದ ಮತ್ತು ಉತ್ಪಾದನಾ ಪರಿಸರದಲ್ಲಿ ಬಳಸಬಹುದಾದ ವಿವಿಧ ಕ್ಲಸ್ಟರಿಂಗ್ ಆಲ್ಗಾರಿಥಮ್‌ಗಳ ಬಗ್ಗೆ ಚಾರ್ಟ್ ರಚಿಸಿ. ಕ್ಲಸ್ಟರಿಂಗ್ ಯಾವ ರೀತಿಯ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತಿದೆ?\n",
"\n",
"## [**ಪಾಠೋತ್ತರ ಕ್ವಿಜ್**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/28/)\n",
"\n",
"## **ಪುನರ್ ವಿಮರ್ಶೆ & ಸ್ವಯಂ ಅಧ್ಯಯನ**\n",
"\n",
"ನೀವು ಕ್ಲಸ್ಟರಿಂಗ್ ಆಲ್ಗಾರಿಥಮ್‌ಗಳನ್ನು ಅನ್ವಯಿಸುವ ಮೊದಲು, ನಾವು ಕಲಿತಂತೆ, ನಿಮ್ಮ ಡೇಟಾಸೆಟ್‌ನ ಸ್ವಭಾವವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಉತ್ತಮ. ಈ ವಿಷಯದ ಬಗ್ಗೆ ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ [ಇಲ್ಲಿ](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html) ಓದಿ\n",
"\n",
"ಕ್ಲಸ್ಟರಿಂಗ್ ತಂತ್ರಗಳನ್ನು ನಿಮ್ಮ ಅರ್ಥವನ್ನು ಗಾಢಗೊಳಿಸಿ:\n",
"\n",
"- [ಟೈಡಿಮೋಡಲ್ಸ್ ಮತ್ತು ಸ್ನೇಹಿತರನ್ನು ಬಳಸಿ ಕ್ಲಸ್ಟರಿಂಗ್ ಮಾದರಿಗಳನ್ನು ತರಬೇತಿ ಮತ್ತು ಮೌಲ್ಯಮಾಪನ ಮಾಡಿ](https://rpubs.com/eR_ic/clustering)\n",
"\n",
"- ಬ್ರಾಡ್ಲಿ ಬೋಹ್ಮ್ಕೆ & ಬ್ರ್ಯಾಂಡನ್ ಗ್ರೀನ್‌ವೆಲ್, [*R ಜೊತೆಗೆ ಹ್ಯಾಂಡ್ಸ್-ಆನ್ ಮೆಷಿನ್ ಲರ್ನಿಂಗ್*](https://bradleyboehmke.github.io/HOML/)*.*\n",
"\n",
"## **ಕಾರ್ಯ**\n",
"\n",
"[ಕ್ಲಸ್ಟರಿಂಗ್‌ಗಾಗಿ ಇತರ ದೃಶ್ಯೀಕರಣಗಳನ್ನು ಸಂಶೋಧಿಸಿ](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/assignment.md)\n",
"\n",
"## ಧನ್ಯವಾದಗಳು:\n",
"\n",
"[ಜೆನ್ ಲೂಪರ್](https://www.twitter.com/jenlooper) ಈ ಮಾಯಾಜಾಲದ ಮೂಲ ಪೈಥಾನ್ ಆವೃತ್ತಿಯನ್ನು ರಚಿಸಿದವರಿಗೆ ♥️\n",
"\n",
"[`ದಾಸನಿ ಮಡಿಪಳ್ಳಿ`](https://twitter.com/dasani_decoded) ಮೆಷಿನ್ ಲರ್ನಿಂಗ್ ಸಂಪ್ರದಾಯಗಳನ್ನು ಹೆಚ್ಚು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಮತ್ತು ಸುಲಭವಾಗಿ ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಅದ್ಭುತ ಚಿತ್ರಣಗಳನ್ನು ರಚಿಸಿದವರಿಗೆ.\n",
"\n",
"ಸಂತೋಷಕರ ಅಧ್ಯಯನ,\n",
"\n",
"[ಎರಿಕ್](https://twitter.com/ericntay), ಗೋಲ್ಡ್ ಮೈಕ್ರೋಸಾಫ್ಟ್ ಲರ್ನ್ ವಿದ್ಯಾರ್ಥಿ ರಾಯಭಾರಿ.\n"
],
"metadata": {}
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**ಅಸ್ವೀಕರಣ**: \nಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಪ್ರಮುಖ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
]
}
],
"metadata": {
"anaconda-cloud": "",
"kernelspec": {
"display_name": "R",
"language": "R",
"name": "ir"
},
"language_info": {
"codemirror_mode": "r",
"file_extension": ".r",
"mimetype": "text/x-r-source",
"name": "R",
"pygments_lexer": "r",
"version": "3.4.1"
},
"coopTranslator": {
"original_hash": "99c36449cad3708a435f6798cfa39972",
"translation_date": "2025-12-19T17:02:20+00:00",
"source_file": "5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb",
"language_code": "kn"
}
},
"nbformat": 4,
"nbformat_minor": 1
}