{ "cells": [ { "cell_type": "markdown", "source": [ "## **സ്പോട്ടിഫൈയിൽ നിന്നുള്ള നൈജീരിയൻ സംഗീതം - ഒരു വിശകലനം**\r\n", "\r\n", "ക്ലസ്റ്ററിംഗ് ഒരു തരത്തിലുള്ള [Unsupervised Learning](https://wikipedia.org/wiki/Unsupervised_learning) ആണ്, ഇത് ഒരു ഡാറ്റാസെറ്റ് ലേബൽ ചെയ്യപ്പെടാത്തതാണെന്ന് അല്ലെങ്കിൽ അതിന്റെ ഇൻപുട്ടുകൾ മുൻകൂട്ടി നിർവചിച്ച ഔട്ട്പുട്ടുകളുമായി പൊരുത്തപ്പെടാത്തതാണെന്ന് കരുതുന്നു. ഡാറ്റയിൽ കാണുന്ന പാറ്റേണുകൾ അനുസരിച്ച് ഗ്രൂപ്പുകൾ നൽകാൻ വിവിധ ആൽഗോരിതങ്ങൾ ഉപയോഗിച്ച് ലേബൽ ചെയ്യാത്ത ഡാറ്റ പരിശോധിക്കുന്നു.\r\n", "\r\n", "[**പ്രീ-ലെക്ചർ ക്വിസ്**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/27/)\r\n", "\r\n", "### **പരിചയം**\r\n", "\r\n", "[ക്ലസ്റ്ററിംഗ്](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) ഡാറ്റാ എക്സ്പ്ലോറേഷനിൽ വളരെ ഉപകാരപ്രദമാണ്. നൈജീരിയൻ പ്രേക്ഷകർ സംഗീതം എങ്ങനെ ഉപഭോഗിക്കുന്നു എന്നതിൽ ട്രെൻഡുകളും പാറ്റേണുകളും കണ്ടെത്താൻ ഇത് സഹായിക്കുമോ എന്ന് നോക്കാം.\r\n", "\r\n", "> ✅ ക്ലസ്റ്ററിംഗിന്റെ ഉപയോഗങ്ങളെ കുറിച്ച് ഒരു മിനിറ്റ് ചിന്തിക്കുക. യഥാർത്ഥ ജീവിതത്തിൽ, ക്ലസ്റ്ററിംഗ് നിങ്ങളുടെ കുടുംബാംഗങ്ങളുടെ വസ്ത്രങ്ങൾ വേർതിരിക്കേണ്ടി വരുന്നപ്പോൾ ഉണ്ടാകുന്നു 🧦👕👖🩲. ഡാറ്റാ സയൻസിൽ, ഉപയോക്താവിന്റെ ഇഷ്ടങ്ങൾ വിശകലനം ചെയ്യുമ്പോഴും, ലേബൽ ചെയ്യാത്ത ഡാറ്റാസെറ്റിന്റെ സവിശേഷതകൾ നിർണയിക്കുമ്പോഴും ക്ലസ്റ്ററിംഗ് നടക്കുന്നു. ക്ലസ്റ്ററിംഗ് ഒരു വിധത്തിൽ അഴുക്കും കലക്കവും മനസ്സിലാക്കാൻ സഹായിക്കുന്നു, ഒരു സോക്ക് ഡ്രോയർ പോലെയാണ്.\r\n", "\r\n", "പ്രൊഫഷണൽ സാഹചര്യത്തിൽ, മാർക്കറ്റ് സെഗ്മെന്റേഷൻ, ഉദാഹരണത്തിന് ഏത് പ്രായസംഘം ഏത് വസ്തുക്കൾ വാങ്ങുന്നു എന്നത് നിർണയിക്കാൻ ക്ലസ്റ്ററിംഗ് ഉപയോഗിക്കാം. മറ്റൊരു ഉപയോഗം അനോമലി ഡിറ്റക്ഷൻ ആണ്, ഉദാഹരണത്തിന് ക്രെഡിറ്റ് കാർഡ് ഇടപാടുകളുടെ ഡാറ്റാസെറ്റിൽ നിന്ന് തട്ടിപ്പ് കണ്ടെത്താൻ. അല്ലെങ്കിൽ മെഡിക്കൽ സ്കാനുകളുടെ ബാച്ചിൽ ട്യൂമറുകൾ കണ്ടെത്താൻ ക്ലസ്റ്ററിംഗ് ഉപയോഗിക്കാം.\r\n", "\r\n", "✅ ബാങ്കിംഗ്, ഇ-കൊമേഴ്സ്, ബിസിനസ് തുടങ്ങിയ മേഖലകളിൽ ക്ലസ്റ്ററിംഗ് 'വൈൽഡിൽ' നിങ്ങൾ എങ്ങനെ കണ്ടിട്ടുണ്ടെന്ന് ഒരു മിനിറ്റ് ചിന്തിക്കുക.\r\n", "\r\n", "> 🎓 രസകരമായി, ക്ലസ്റ്റർ വിശകലനം 1930-കളിൽ ആൻത്രോപോളജി, സൈക്കോളജി മേഖലകളിൽ ആരംഭിച്ചു. അത് എങ്ങനെ ഉപയോഗിച്ചിരിക്കാമെന്ന് നിങ്ങൾക്ക് കണക്കാക്കാമോ?\r\n", "\r\n", "അല്ലെങ്കിൽ, ഷോപ്പിംഗ് ലിങ്കുകൾ, ചിത്രങ്ങൾ, റിവ്യൂകൾ എന്നിവയുടെ അടിസ്ഥാനത്തിൽ തിരയൽ ഫലങ്ങൾ ഗ്രൂപ്പുചെയ്യാൻ ഇത് ഉപയോഗിക്കാം. വലിയ ഡാറ്റാസെറ്റുകൾ കുറയ്ക്കാനും കൂടുതൽ സൂക്ഷ്മമായ വിശകലനം നടത്താനും ക്ലസ്റ്ററിംഗ് സഹായിക്കുന്നു, അതിനാൽ മറ്റ് മോഡലുകൾ നിർമ്മിക്കുന്നതിന് മുമ്പ് ഡാറ്റയെ കുറിച്ച് പഠിക്കാൻ ഈ സാങ്കേതിക വിദ്യ ഉപയോഗിക്കാം.\r\n", "\r\n", "✅ ഡാറ്റ ക്ലസ്റ്ററുകളായി ക്രമീകരിച്ച ശേഷം, അതിന് ക്ലസ്റ്റർ ഐഡി നൽകുന്നു, ഇത് ഡാറ്റാസെറ്റിന്റെ സ്വകാര്യത സംരക്ഷിക്കാൻ സഹായകമാണ്; ഒരു ഡാറ്റ പോയിന്റിനെ അതിന്റെ ക്ലസ്റ്റർ ഐഡി ഉപയോഗിച്ച് സൂചിപ്പിക്കാം, കൂടുതൽ വെളിപ്പെടുത്തുന്ന തിരിച്ചറിയാവുന്ന ഡാറ്റയിലൂടെ അല്ല. ക്ലസ്റ്റർ ഐഡി ഉപയോഗിച്ച് തിരിച്ചറിയാൻ മറ്റെന്തെങ്കിലും കാരണങ്ങൾ നിങ്ങൾക്ക് തോന്നുന്നുണ്ടോ?\r\n", "\r\n", "### ക്ലസ്റ്ററിംഗ് ആരംഭിക്കുന്നത്\r\n", "\r\n", "> 🎓 ക്ലസ്റ്ററുകൾ സൃഷ്ടിക്കുന്നത് ഡാറ്റ പോയിന്റുകൾ ഗ്രൂപ്പുകളായി എങ്ങനെ കൂട്ടിച്ചേർക്കുന്നു എന്നതിൽ ആശ്രയിച്ചിരിക്കുന്നു. ചില പദങ്ങൾ വിശദീകരിക്കാം:\r\n", ">\r\n", "> 🎓 ['Transductive' vs. 'inductive'](https://wikipedia.org/wiki/Transduction_(machine_learning))\r\n", ">\r\n", "> ട്രാൻസ്ഡക്ടീവ് ഇൻഫറൻസ് നിരീക്ഷിച്ച ട്രെയിനിംഗ് കേസുകളിൽ നിന്നാണ് ലഭിക്കുന്നത്, അവ പ്രത്യേക ടെസ്റ്റ് കേസുകളുമായി പൊരുത്തപ്പെടുന്നു. ഇൻഡക്ടീവ് ഇൻഫറൻസ് ട്രെയിനിംഗ് കേസുകളിൽ നിന്നാണ് ലഭിക്കുന്നത്, അവ പൊതുവായ നിയമങ്ങളായി മാറി പിന്നീട് ടെസ്റ്റ് കേസുകളിൽ പ്രയോഗിക്കപ്പെടുന്നു.\r\n", ">\r\n", "> ഉദാഹരണം: നിങ്ങൾക്ക് ഭാഗികമായി ലേബൽ ചെയ്ത ഡാറ്റാസെറ്റ് ഉണ്ടെന്ന് കരുതുക. ചിലത് 'റെക്കോർഡുകൾ', ചിലത് 'സിഡികൾ', ചിലത് ശൂന്യമാണ്. ശൂന്യമായവയ്ക്ക് ലേബലുകൾ നൽകുക എന്നതാണ് നിങ്ങളുടെ ജോലി. ഇൻഡക്ടീവ് സമീപനം തിരഞ്ഞെടുക്കുകയാണെങ്കിൽ, 'റെക്കോർഡുകൾ'യും 'സിഡികളും' കണ്ടെത്താൻ മോഡൽ പരിശീലിപ്പിച്ച് ആ ലേബലുകൾ ലേബൽ ചെയ്യാത്ത ഡാറ്റയിൽ പ്രയോഗിക്കും. ഈ സമീപനം 'കാസറ്റുകൾ' എന്ന വസ്തുക്കൾ ശരിയായി തിരിച്ചറിയാൻ ബുദ്ധിമുട്ടും. മറുവശത്ത്, ട്രാൻസ്ഡക്ടീവ് സമീപനം ഈ അജ്ഞാത ഡാറ്റയെ കൂടുതൽ ഫലപ്രദമായി കൈകാര്യം ചെയ്യുന്നു, സമാന വസ്തുക്കളെ ഗ്രൂപ്പാക്കി അവയ്ക്ക് ലേബൽ നൽകുന്നു. ഈ സാഹചര്യത്തിൽ, ക്ലസ്റ്ററുകൾ 'വൃത്താകൃതിയിലുള്ള സംഗീത വസ്തുക്കൾ'യും 'ചതുരാകൃതിയിലുള്ള സംഗീത വസ്തുക്കൾ'യും പ്രതിഫലിപ്പിക്കാം.\r\n", ">\r\n", "> 🎓 ['Non-flat' vs. 'flat' geometry](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering)\r\n", ">\r\n", "> ഗണിതശാസ്ത്ര പദങ്ങൾ അടിസ്ഥാനമാക്കി, non-flat vs. flat ജ്യാമിതീയത പോയിന്റുകൾ തമ്മിലുള്ള ദൂരം 'ഫ്ലാറ്റ്' ([Euclidean](https://wikipedia.org/wiki/Euclidean_geometry)) അല്ലെങ്കിൽ 'non-flat' (non-Euclidean) ജ്യാമിതീയ രീതികളിലൂടെ അളക്കുന്നതാണ്.\r\n", ">\r\n", "> ഈ സന്ദർഭത്തിൽ 'ഫ്ലാറ്റ്' Euclidean ജ്യാമിതീയതയെ സൂചിപ്പിക്കുന്നു (ഇതിന്റെ ഭാഗങ്ങൾ 'പ്ലെയിൻ' ജ്യാമിതീയതയായി പഠിപ്പിക്കുന്നു), non-flat non-Euclidean ജ്യാമിതീയതയാണ്. ജ്യാമിതീയതയ്ക്ക് മെഷീൻ ലേണിങ്ങുമായി എന്ത് ബന്ധമുണ്ട്? ഗണിതശാസ്ത്രത്തിൽ ആധാരമാക്കിയ രണ്ട് മേഖലകളായതിനാൽ, ക്ലസ്റ്ററുകളിലെ പോയിന്റുകൾ തമ്മിലുള്ള ദൂരം അളക്കാനുള്ള പൊതുവായ മാർഗ്ഗം വേണം, അത് 'ഫ്ലാറ്റ്' അല്ലെങ്കിൽ 'non-flat' രീതിയിലായിരിക്കും, ഡാറ്റയുടെ സ്വഭാവം അനുസരിച്ച്. [Euclidean ദൂരം](https://wikipedia.org/wiki/Euclidean_distance) രണ്ട് പോയിന്റുകൾ തമ്മിലുള്ള രേഖാഖണ്ഡത്തിന്റെ നീളമായി അളക്കുന്നു. [Non-Euclidean ദൂരം](https://wikipedia.org/wiki/Non-Euclidean_geometry) വളവിലൂടെയാണ് അളക്കുന്നത്. നിങ്ങളുടെ ഡാറ്റ ദൃശ്യമായി ഒരു സമതലത്തിൽ ഇല്ലാത്തതുപോലെയാണ് തോന്നുന്നത് എങ്കിൽ, അതിനെ കൈകാര്യം ചെയ്യാൻ പ്രത്യേക ആൽഗോരിതം ഉപയോഗിക്കേണ്ടി വരും.\r\n", "\r\n", "

\r\n", " \r\n", "

ഇൻഫോഗ്രാഫിക്: ദാസാനി മടിപള്ളി
\r\n", "\r\n", "\r\n", "\r\n", "> 🎓 ['Distances'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf)\r\n", ">\r\n", "> ക്ലസ്റ്ററുകൾ അവരുടെ ദൂരം മാട്രിക്സ് (distance matrix) പ്രകാരം നിർവചിക്കപ്പെടുന്നു, ഉദാ: പോയിന്റുകൾ തമ്മിലുള്ള ദൂരം. ഈ ദൂരം ചില മാർഗ്ഗങ്ങളിൽ അളക്കാം. Euclidean ക്ലസ്റ്ററുകൾ പോയിന്റ് മൂല്യങ്ങളുടെ ശരാശരിയാൽ നിർവചിക്കപ്പെടുന്നു, അവയ്ക്ക് 'സെൻട്രോയിഡ്' അല്ലെങ്കിൽ കേന്ദ്ര പോയിന്റ് ഉണ്ട്. അതിനാൽ ദൂരം ആ സെൻട്രോയിഡിലേക്കുള്ള ദൂരം അളക്കിയാണ്. Non-Euclidean ദൂരം 'ക്ലസ്റ്റ്രോയിഡുകൾ' (clustroids) എന്നതിന് സൂചിപ്പിക്കുന്നു, അത് മറ്റുള്ള പോയിന്റുകൾക്ക് ഏറ്റവും അടുത്ത പോയിന്റാണ്. ക്ലസ്റ്റ്രോയിഡുകൾ വിവിധ രീതികളിൽ നിർവചിക്കാം.\r\n", ">\r\n", "> 🎓 ['Constrained'](https://wikipedia.org/wiki/Constrained_clustering)\r\n", ">\r\n", "> [Constrained Clustering](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) ഈ Unsupervised രീതിയിൽ 'semi-supervised' ലേണിംഗ് പരിചയപ്പെടുത്തുന്നു. പോയിന്റുകൾ തമ്മിലുള്ള ബന്ധങ്ങൾ 'cannot link' അല്ലെങ്കിൽ 'must-link' ആയി അടയാളപ്പെടുത്തുന്നു, അതിനാൽ ഡാറ്റാസെറ്റിൽ ചില നിയമങ്ങൾ ബാധകമാക്കുന്നു.\r\n", ">\r\n", "> ഉദാഹരണം: ഒരു ആൽഗോരിതം ലേബൽ ചെയ്യാത്ത അല്ലെങ്കിൽ ഭാഗികമായി ലേബൽ ചെയ്ത ഡാറ്റാസെറ്റിൽ സ്വതന്ത്രമായി പ്രവർത്തിക്കുമ്പോൾ, അത് ഉൽപ്പാദിപ്പിക്കുന്ന ക്ലസ്റ്ററുകൾ ഗുണമേന്മയില്ലാത്തതായിരിക്കാം. മുകളിൽ പറഞ്ഞ ഉദാഹരണത്തിൽ, ക്ലസ്റ്ററുകൾ 'വൃത്താകൃതിയിലുള്ള സംഗീത വസ്തുക്കൾ', 'ചതുരാകൃതിയിലുള്ള സംഗീത വസ്തുക്കൾ', 'ത്രികോണാകൃതിയിലുള്ള വസ്തുക്കൾ', 'കുക്കീസ്' എന്നിവയായി ഗ്രൂപ്പാക്കാം. ചില നിയന്ത്രണങ്ങൾ (\"വസ്തു പ്ലാസ്റ്റിക്കിൽ നിന്നായിരിക്കണം\", \"വസ്തു സംഗീതം ഉത്പാദിപ്പിക്കാൻ കഴിയണം\") നൽകിയാൽ ആൽഗോരിതം മികച്ച തിരഞ്ഞെടുപ്പുകൾ നടത്താൻ സഹായിക്കും.\r\n", ">\r\n", "> 🎓 'Density'\r\n", ">\r\n", "> 'നോയിസി' ആയ ഡാറ്റ 'ഡെൻസായി' (dense) കണക്കാക്കപ്പെടുന്നു. ഓരോ ക്ലസ്റ്ററിലെയും പോയിന്റുകൾ തമ്മിലുള്ള ദൂരം പരിശോധിച്ചാൽ അത് കൂടുതൽ അല്ലെങ്കിൽ കുറവായി ഡെൻസായിരിക്കാം, അതായത് 'കൂട്ടം' ആയിരിക്കാം, അതിനാൽ ഈ ഡാറ്റ അനുയോജ്യമായ ക്ലസ്റ്ററിംഗ് രീതിയോടെ വിശകലനം ചെയ്യേണ്ടതാണ്. [ഈ ലേഖനം](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) K-Means ക്ലസ്റ്ററിംഗ് എതിരായി HDBSCAN ആൽഗോരിതങ്ങൾ ഉപയോഗിച്ച് നോയിസി ഡാറ്റാസെറ്റിന്റെ വ്യത്യാസം വിശദീകരിക്കുന്നു.\r\n", "\r\n", "ഈ [Learn module](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott) വഴി ക്ലസ്റ്ററിംഗ് സാങ്കേതിക വിദ്യകളെ കുറിച്ച് കൂടുതൽ പഠിക്കാം\r\n", "\r\n", "### **ക്ലസ്റ്ററിംഗ് ആൽഗോരിതങ്ങൾ**\r\n", "\r\n", "100-ലധികം ക്ലസ്റ്ററിംഗ് ആൽഗോരിതങ്ങൾ ഉണ്ട്, അവയുടെ ഉപയോഗം ഡാറ്റയുടെ സ്വഭാവം അനുസരിച്ചാണ്. പ്രധാന ചിലത് ചർച്ച ചെയ്യാം:\r\n", "\r\n", "- **ഹയർആർക്കിക്കൽ ക്ലസ്റ്ററിംഗ്**. ഒരു വസ്തു അടുത്തുള്ള മറ്റൊരു വസ്തുവിന്റെ സമീപത പ്രകാരം വർഗ്ഗീകരിക്കപ്പെടുമ്പോൾ, ക്ലസ്റ്ററുകൾ അവയുടെ അംഗങ്ങളുടെ മറ്റുള്ള വസ്തുക്കളോടുള്ള ദൂരത്തിന്റെ അടിസ്ഥാനത്തിൽ രൂപപ്പെടുന്നു. ഹയർആർക്കിക്കൽ ക്ലസ്റ്ററിംഗ് രണ്ട് ക്ലസ്റ്ററുകൾ ആവർത്തിച്ച് സംയോജിപ്പിക്കുന്നതിലൂടെ സവിശേഷതയുള്ളതാണ്.\r\n", "\r\n", "\r\n", "

\r\n", " \r\n", "

ഇൻഫോഗ്രാഫിക്: ദാസാനി മടിപള്ളി
\r\n", "\r\n", "\r\n", "\r\n", "- **സെൻട്രോയിഡ് ക്ലസ്റ്ററിംഗ്**. ഈ ജനപ്രിയ ആൽഗോരിതം 'k' എന്ന ക്ലസ്റ്ററുകളുടെ എണ്ണം തിരഞ്ഞെടുക്കേണ്ടതുണ്ട്, തുടർന്ന് ആൽഗോരിതം ഒരു ക്ലസ്റ്ററിന്റെ കേന്ദ്ര പോയിന്റ് നിർണയിച്ച് ആ പോയിന്റിന്റെ ചുറ്റും ഡാറ്റ ശേഖരിക്കുന്നു. [K-means clustering](https://wikipedia.org/wiki/K-means_clustering) സെൻട്രോയിഡ് ക്ലസ്റ്ററിംഗിന്റെ ഒരു ജനപ്രിയ രൂപമാണ്, ഇത് ഡാറ്റാസെറ്റ് മുൻകൂട്ടി നിർവചിച്ച K ഗ്രൂപ്പുകളായി വിഭജിക്കുന്നു. കേന്ദ്രം അടുത്ത ശരാശരിയാൽ നിർണയിക്കുന്നു, അതിനാൽ പേര്. ക്ലസ്റ്ററിൽ നിന്നുള്ള ചതുരശ്ര ദൂരം കുറഞ്ഞിരിക്കുന്നു.\r\n", "\r\n", "

\r\n", " \r\n", "

ഇൻഫോഗ്രാഫിക്: ദാസാനി മടിപള്ളി
\r\n", "\r\n", "\r\n", "\r\n", "- **ഡിസ്ട്രിബ്യൂഷൻ അടിസ്ഥാനമാക്കിയുള്ള ക്ലസ്റ്ററിംഗ്**. സാങ്കേതിക മോഡലിംഗിൽ ആധാരമാക്കിയ, ഒരു ഡാറ്റ പോയിന്റ് ഒരു ക്ലസ്റ്ററിന് പറ്റിയതാണെന്ന് സാധ്യത നിർണയിച്ച് അതനുസരിച്ച് നിയോഗിക്കുന്നു. Gaussian മിശ്രിത രീതികൾ ഇതിൽപ്പെടുന്നു.\r\n", "\r\n", "- **ഡെൻസിറ്റി അടിസ്ഥാനമാക്കിയുള്ള ക്ലസ്റ്ററിംഗ്**. ഡാറ്റ പോയിന്റുകൾ അവരുടെ സാന്ദ്രതയുടെ അടിസ്ഥാനത്തിൽ ക്ലസ്റ്ററുകളിലേക്ക് നിയോഗിക്കപ്പെടുന്നു, അഥവാ പരസ്പരം ചുറ്റിപ്പറ്റിയ ഗ്രൂപ്പുകൾ. ഗ്രൂപ്പിൽ നിന്ന് ദൂരെയുള്ള പോയിന്റുകൾ ഔട്ട്‌ലയർസ് അല്ലെങ്കിൽ നോയിസായി കണക്കാക്കപ്പെടുന്നു. DBSCAN, Mean-shift, OPTICS ഇതിൽപ്പെടുന്നു.\r\n", "\r\n", "- **ഗ്രിഡ് അടിസ്ഥാനമാക്കിയുള്ള ക്ലസ്റ്ററിംഗ്**. ബഹുമാനദണ്ഡ ഡാറ്റാസെറ്റുകൾക്കായി ഒരു ഗ്രിഡ് സൃഷ്ടിച്ച് ഡാറ്റ ഗ്രിഡിന്റെ സെല്ലുകളിൽ വിഭജിച്ച് ക്ലസ്റ്ററുകൾ സൃഷ്ടിക്കുന്നു.\r\n", "\r\n", "ക്ലസ്റ്ററിംഗ് പഠിക്കാൻ ഏറ്റവും നല്ല മാർഗ്ഗം അത് സ്വയം പരീക്ഷിക്കുകയാണ്, അതിനാൽ ഈ അഭ്യാസത്തിൽ നിങ്ങൾ അത് ചെയ്യും.\r\n", "\r\n", "ഈ മോഡ്യൂൾ പൂർത്തിയാക്കാൻ ചില പാക്കേജുകൾ ആവശ്യമാണ്. നിങ്ങൾക്ക് അവ ഇൻസ്റ്റാൾ ചെയ്യാം: `install.packages(c('tidyverse', 'tidymodels', 'DataExplorer', 'summarytools', 'plotly', 'paletteer', 'corrplot', 'patchwork'))`\r\n", "\r\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": [ "## Exercise - cluster your data\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) ഫംഗ്ഷൻ ഉപയോഗിച്ച് `data`യും `അതിന്റേതായ ഘടന`യും നോക്കാം:\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", "നാം ഇതിൽ തുടരുമ്പോൾ, സാധാരണ കേന്ദ്ര പ്രവണതാ സ്ഥിതിവിവരക്കണക്കുകൾ (ഉദാ: [mean](https://en.wikipedia.org/wiki/Arithmetic_mean) and [median](https://en.wikipedia.org/wiki/Median)) കൂടാതെ വ്യതിയാനത്തിന്റെ അളവുകൾ (ഉദാ: [standard deviation](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": [ "നമ്മുടെ ഡാറ്റാ സെറ്റിലുള്ള സംഖ്യാത്മക ചാരങ്ങളിലൊന്നിനും വ്യക്തമായ ഒരു രേഖീയ ബന്ധമുണ്ടോ എന്ന് നോക്കാം. ഈ ബന്ധം ഗണിതപരമായി [correlation statistic](https://en.wikipedia.org/wiki/Correlation) എന്നതിലൂടെ അളക്കപ്പെടുന്നു.\n", "\n", "correlation statistic -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", "> 🎓 correlation causation ന്റെ സൂചനയല്ലെന്ന് ശ്രദ്ധിക്കുക! correlation ന്റെ തെളിവ് ഉണ്ട്, causation ന്റെ തെളിവ് ഇല്ല. [amusing web site](https://tylervigen.com/spurious-correlations) ഈ കാര്യത്തെ ഊന്നിപ്പറയുന്ന ചില ദൃശ്യങ്ങൾ ഉണ്ട്.\n", "\n", "### 2. ഡാറ്റ വിതരണത്തെ അന്വേഷിക്കുക\n", "\n", "കുറച്ച് കൂടുതൽ സൂക്ഷ്മമായ ചോദ്യങ്ങൾ ചോദിക്കാം. ജനപ്രിയതയുടെ അടിസ്ഥാനത്തിൽ അവരുടെ danceability യിൽ ജാനറുകൾ ഗണ്യമായ വ്യത്യാസമുണ്ടോ? നമുക്ക് മുൻനിര മൂന്ന് ജാനറുകളുടെ ജനപ്രിയതയും danceability യും ഒരു നിശ്ചിത 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", "സാധാരണയായി, ഈ മൂന്ന് ജാനറുകൾ അവരുടെ ജനപ്രിയതയും നൃത്തയോഗ്യതയും സംബന്ധിച്ച് ഏകീകരിച്ചിരിക്കുന്നു. ഈ അല്പം ഏകീകരിച്ച ഡാറ്റയിൽ ക്ലസ്റ്ററുകൾ കണ്ടെത്തുന്നത് ഒരു വെല്ലുവിളിയാകും. ഒരു സ്കാറ്റർ പ്ലോട്ട് ഇതിനെ പിന്തുണയ്ക്കുമോ എന്ന് നോക്കാം.\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", "- [Tidymodels and friends ഉപയോഗിച്ച് ക്ലസ്റ്ററിംഗ് മോഡലുകൾ പരിശീലിപ്പിക്കുകയും മൂല്യനിർണയം നടത്തുകയും ചെയ്യുക](https://rpubs.com/eR_ic/clustering)\n", "\n", "- ബ്രാഡ്ലി ബോഹ്മ്കെ & ബ്രാൻഡൻ ഗ്രീൻവെൽ, [*Hands-On Machine Learning with 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\n**അസൂയാപത്രം**: \nഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനത്തിന്റെ ഉപയോഗത്തിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.\n\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:00:55+00:00", "source_file": "5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb", "language_code": "ml" } }, "nbformat": 4, "nbformat_minor": 1 }