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.
642 lines
48 KiB
642 lines
48 KiB
{
|
|
"nbformat": 4,
|
|
"nbformat_minor": 0,
|
|
"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"
|
|
},
|
|
"colab": {
|
|
"name": "lesson_14.ipynb",
|
|
"provenance": [],
|
|
"collapsed_sections": [],
|
|
"toc_visible": true
|
|
},
|
|
"coopTranslator": {
|
|
"original_hash": "ad65fb4aad0a156b42216e4929f490fc",
|
|
"translation_date": "2025-12-19T16:55:31+00:00",
|
|
"source_file": "5-Clustering/2-K-Means/solution/R/lesson_15-R.ipynb",
|
|
"language_code": "ml"
|
|
}
|
|
},
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "GULATlQXLXyR"
|
|
},
|
|
"source": [
|
|
"## R ഉം Tidy ഡാറ്റ സിദ്ധാന്തങ്ങളും ഉപയോഗിച്ച് K-Means ക്ലസ്റ്ററിംഗ് അന്വേഷിക്കുക.\n",
|
|
"\n",
|
|
"### [**പ്രീ-ലെക്ചർ ക്വിസ്**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/29/)\n",
|
|
"\n",
|
|
"ഈ പാഠത്തിൽ, Tidymodels പാക്കേജ് ഉൾപ്പെടെ R ഇക്കോസിസ്റ്റത്തിലെ മറ്റ് പാക്കേജുകളും (നാം അവരെ സുഹൃത്തുക്കൾ 🧑🤝🧑 എന്ന് വിളിക്കും) ഉപയോഗിച്ച് ക്ലസ്റ്ററുകൾ സൃഷ്ടിക്കുന്നതെങ്ങനെ എന്ന് നിങ്ങൾ പഠിക്കും, കൂടാതെ നിങ്ങൾ മുമ്പ് ഇറക്കുമതി ചെയ്ത നൈജീരിയൻ സംഗീത ഡാറ്റാസെറ്റും. ക്ലസ്റ്ററിംഗിനുള്ള K-Means ന്റെ അടിസ്ഥാനങ്ങൾ ഞങ്ങൾ ഉൾക്കൊള്ളും. മുമ്പത്തെ പാഠത്തിൽ നിങ്ങൾ പഠിച്ചതുപോലെ, ക്ലസ്റ്ററുകളുമായി പ്രവർത്തിക്കാൻ നിരവധി മാർഗ്ഗങ്ങളുണ്ട്, നിങ്ങൾ ഉപയോഗിക്കുന്ന രീതി നിങ്ങളുടെ ഡാറ്റയെ ആശ്രയിച്ചിരിക്കും. ഏറ്റവും സാധാരണമായ ക്ലസ്റ്ററിംഗ് സാങ്കേതികവിദ്യയായ K-Means ഞങ്ങൾ പരീക്ഷിക്കും. തുടങ്ങാം!\n",
|
|
"\n",
|
|
"നിങ്ങൾ പഠിക്കാനിരിക്കുന്ന പദങ്ങൾ:\n",
|
|
"\n",
|
|
"- സിലഹ്വറ്റ് സ്കോറിംഗ്\n",
|
|
"\n",
|
|
"- എൽബോ മെത്തഡ്\n",
|
|
"\n",
|
|
"- ഇൻർഷ്യ\n",
|
|
"\n",
|
|
"- വ്യത്യാസം\n",
|
|
"\n",
|
|
"### **പരിചയം**\n",
|
|
"\n",
|
|
"[K-Means ക്ലസ്റ്ററിംഗ്](https://wikipedia.org/wiki/K-means_clustering) സിഗ്നൽ പ്രോസസ്സിംഗ് മേഖലയിലെ ഒരു രീതി ആണ്. ഇത് ഡാറ്റയുടെ സവിശേഷതകളിലെ സമാനതകളെ അടിസ്ഥാനമാക്കി `k ക്ലസ്റ്ററുകൾ` ആയി ഡാറ്റ ഗ്രൂപ്പുകൾ വിഭജിക്കാൻ ഉപയോഗിക്കുന്നു.\n",
|
|
"\n",
|
|
"ക്ലസ്റ്ററുകൾ [Voronoi ഡയഗ്രാമുകൾ](https://wikipedia.org/wiki/Voronoi_diagram) ആയി ദൃശ്യവത്കരിക്കാം, അവയിൽ ഒരു പോയിന്റ് (അഥവാ 'സീഡ്') അതിന്റെ അനുബന്ധ പ്രദേശവും ഉൾപ്പെടുന്നു.\n",
|
|
"\n",
|
|
"<p >\n",
|
|
" <img src=\"../../../../../../translated_images/ml/voronoi.1dc1613fb0439b95.webp\"\n",
|
|
" width=\"500\"/>\n",
|
|
" <figcaption>ജെൻ ലൂപ്പർ ഒരുക്കിയ ഇൻഫോഗ്രാഫിക്</figcaption>\n",
|
|
"\n",
|
|
"\n",
|
|
"K-Means ക്ലസ്റ്ററിംഗിന് താഴെപ്പറയുന്ന ഘട്ടങ്ങൾ ഉണ്ട്:\n",
|
|
"\n",
|
|
"1. ഡാറ്റ സയന്റിസ്റ്റ് സൃഷ്ടിക്കേണ്ട ക്ലസ്റ്ററുകളുടെ ആഗ്രഹിച്ച എണ്ണം നിർദ്ദേശിക്കുന്നു.\n",
|
|
"\n",
|
|
"2. തുടർന്ന്, ആൽഗോരിതം ഡാറ്റാസെറ്റിൽ നിന്ന് യാദൃച്ഛികമായി K നിരീക്ഷണങ്ങൾ തിരഞ്ഞെടുക്കുന്നു, അവ ക്ലസ്റ്ററുകളുടെ പ്രാരംഭ കേന്ദ്രങ്ങളായി (അഥവാ സെൻട്രോയിഡുകൾ) സേവനം ചെയ്യുന്നു.\n",
|
|
"\n",
|
|
"3. ശേഷിക്കുന്ന ഓരോ നിരീക്ഷണവും അതിന്റെ ഏറ്റവും അടുത്ത സെൻട്രോയിഡിലേക്ക് നിയോഗിക്കുന്നു.\n",
|
|
"\n",
|
|
"4. തുടർന്ന്, ഓരോ ക്ലസ്റ്ററിന്റെയും പുതിയ ശരാശരി കണക്കാക്കി സെൻട്രോയിഡ് ശരാശരിയിലേക്ക് മാറ്റുന്നു.\n",
|
|
"\n",
|
|
"5. ഇപ്പോൾ കേന്ദ്രങ്ങൾ പുനർഗണന ചെയ്തതിനുശേഷം, ഓരോ നിരീക്ഷണവും വീണ്ടും പരിശോധിച്ച് അത് മറ്റൊരു ക്ലസ്റ്ററിനോട് കൂടുതൽ അടുത്തതാണോ എന്ന് നോക്കുന്നു. അപ്ഡേറ്റുചെയ്ത ക്ലസ്റ്റർ ശരാശരികൾ ഉപയോഗിച്ച് എല്ലാ വസ്തുക്കളും വീണ്ടും നിയോഗിക്കുന്നു. ക്ലസ്റ്റർ നിയോഗവും സെൻട്രോയിഡ് അപ്ഡേറ്റും ആവർത്തിച്ച് നടത്തുന്നു, ക്ലസ്റ്റർ നിയോഗങ്ങൾ മാറാതിരിക്കാൻ (അഥവാ സമവായം നേടുമ്പോൾ) വരെ. സാധാരണയായി, ഓരോ പുതിയ ആവർത്തനവും സെൻട്രോയിഡുകളുടെ ചലനം വളരെ കുറവായപ്പോൾ ആൽഗോരിതം അവസാനിക്കുന്നു, ക്ലസ്റ്ററുകൾ സ്ഥിരമാകുന്നു.\n",
|
|
"\n",
|
|
"<div>\n",
|
|
"\n",
|
|
"> പ്രാരംഭ സെൻട്രോയിഡുകളായി ഉപയോഗിക്കുന്ന യാദൃച്ഛിക k നിരീക്ഷണങ്ങളുടെ കാരണം, ഓരോ പ്രക്രിയയും പ്രയോഗിക്കുമ്പോഴും നാം ചെറിയ വ്യത്യാസമുള്ള ഫലങ്ങൾ ലഭിക്കാം. ഈ കാരണത്താൽ, പല ആൽഗോരിതങ്ങളും പല *random starts* ഉപയോഗിച്ച് ഏറ്റവും കുറഞ്ഞ WCSS ഉള്ള ആവർത്തനം തിരഞ്ഞെടുക്കുന്നു. അതിനാൽ, *undesirable local optimum* ഒഴിവാക്കാൻ K-Means പല *nstart* മൂല്യങ്ങളോടും പ്രവർത്തിപ്പിക്കാൻ ശക്തമായി ശിപാർശ ചെയ്യുന്നു.\n",
|
|
"\n",
|
|
"</div>\n",
|
|
"\n",
|
|
"Allison Horst ന്റെ [കലാസൃഷ്ടി](https://github.com/allisonhorst/stats-illustrations) ഉപയോഗിച്ചുള്ള ഈ ചെറിയ അനിമേഷൻ ക്ലസ്റ്ററിംഗ് പ്രക്രിയ വിശദീകരിക്കുന്നു:\n",
|
|
"\n",
|
|
"<p >\n",
|
|
" <img src=\"../../images/kmeans.gif\"\n",
|
|
" width=\"550\"/>\n",
|
|
" <figcaption>@allison_horst ഒരുക്കിയ കലാസൃഷ്ടി</figcaption>\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"ക്ലസ്റ്ററിംഗിൽ ഉയരുന്ന ഒരു അടിസ്ഥാന ചോദ്യമാണ്: നിങ്ങളുടെ ഡാറ്റ എത്ര ക്ലസ്റ്ററുകളായി വിഭജിക്കണമെന്ന് എങ്ങനെ അറിയാം? K-Means ഉപയോഗിക്കുന്നതിന്റെ ഒരു ദോഷം `k` എന്നത്, അഥവാ `സെൻട്രോയിഡുകളുടെ` എണ്ണം നിശ്ചയിക്കേണ്ടതായിരിക്കുന്നു എന്നതാണ്. ഭാഗ്യവശാൽ, `എൽബോ മെത്തഡ്` നല്ല ഒരു ആരംഭ മൂല്യം `k` കണക്കാക്കാൻ സഹായിക്കുന്നു. നിങ്ങൾക്ക് ഇത് ഉടൻ പരീക്ഷിക്കാം.\n",
|
|
"\n",
|
|
"### \n",
|
|
"\n",
|
|
"**ആവശ്യമായ മുൻപരിചയം**\n",
|
|
"\n",
|
|
"നാം [മുൻപത്തെ പാഠത്തിൽ](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb) നിന്നു തുടരും, അവിടെ നാം ഡാറ്റാസെറ്റ് വിശകലനം ചെയ്തു, നിരവധി ദൃശ്യവത്കരണങ്ങൾ നടത്തി, ശ്രദ്ധേയമായ നിരീക്ഷണങ്ങൾ ഫിൽട്ടർ ചെയ്തു. അത് പരിശോധിക്കാൻ മറക്കരുത്!\n",
|
|
"\n",
|
|
"ഈ മോഡ്യൂൾ പൂർത്തിയാക്കാൻ ചില പാക്കേജുകൾ ആവശ്യമാണ്. അവ ഇങ്ങനെ ഇൻസ്റ്റാൾ ചെയ്യാം: `install.packages(c('tidyverse', 'tidymodels', 'cluster', 'summarytools', 'plotly', 'paletteer', 'factoextra', 'patchwork'))`\n",
|
|
"\n",
|
|
"അല്ലെങ്കിൽ, താഴെ കൊടുത്തിരിക്കുന്ന സ്ക്രിപ്റ്റ് ഈ മോഡ്യൂൾ പൂർത്തിയാക്കാൻ ആവശ്യമായ പാക്കേജുകൾ നിങ്ങൾക്കുണ്ടോ എന്ന് പരിശോധിച്ച്, കുറവുണ്ടെങ്കിൽ ഇൻസ്റ്റാൾ ചെയ്യും.\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "ah_tBi58LXyi"
|
|
},
|
|
"source": [
|
|
"suppressWarnings(if(!require(\"pacman\")) install.packages(\"pacman\"))\n",
|
|
"\n",
|
|
"pacman::p_load('tidyverse', 'tidymodels', 'cluster', 'summarytools', 'plotly', 'paletteer', 'factoextra', 'patchwork')\n"
|
|
],
|
|
"execution_count": null,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "7e--UCUTLXym"
|
|
},
|
|
"source": [
|
|
"നമുക്ക് ഉടൻ തന്നെ ആരംഭിക്കാം!\n",
|
|
"\n",
|
|
"## 1. ഡാറ്റയുമായി ഒരു നൃത്തം: ഏറ്റവും ജനപ്രിയമായ 3 സംഗീത ശൈലികൾക്ക് കുറയ്ക്കുക\n",
|
|
"\n",
|
|
"ഇത് മുമ്പത്തെ പാഠത്തിൽ ഞങ്ങൾ ചെയ്തതിന്റെ ഒരു സംഗ്രഹമാണ്. നമുക്ക് ചില ഡാറ്റ കഷണങ്ങളാക്കി വിശകലനം ചെയ്യാം!\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "Ycamx7GGLXyn"
|
|
},
|
|
"source": [
|
|
"# Load the core tidyverse and make it available in your current R session\n",
|
|
"library(tidyverse)\n",
|
|
"\n",
|
|
"# Import the data into a tibble\n",
|
|
"df <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/5-Clustering/data/nigerian-songs.csv\", show_col_types = FALSE)\n",
|
|
"\n",
|
|
"# Narrow down to top 3 popular genres\n",
|
|
"nigerian_songs <- df %>% \n",
|
|
" # Concentrate on top 3 genres\n",
|
|
" filter(artist_top_genre %in% c(\"afro dancehall\", \"afropop\",\"nigerian pop\")) %>% \n",
|
|
" # Remove unclassified observations\n",
|
|
" filter(popularity != 0)\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"# Visualize popular genres using bar plots\n",
|
|
"theme_set(theme_light())\n",
|
|
"nigerian_songs %>%\n",
|
|
" count(artist_top_genre) %>%\n",
|
|
" ggplot(mapping = aes(x = artist_top_genre, y = n,\n",
|
|
" fill = artist_top_genre)) +\n",
|
|
" geom_col(alpha = 0.8) +\n",
|
|
" paletteer::scale_fill_paletteer_d(\"ggsci::category10_d3\") +\n",
|
|
" ggtitle(\"Top genres\") +\n",
|
|
" theme(plot.title = element_text(hjust = 0.5))\n"
|
|
],
|
|
"execution_count": null,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "b5h5zmkPLXyp"
|
|
},
|
|
"source": [
|
|
"🤩 അത് നല്ലതായി പോയി!\n",
|
|
"\n",
|
|
"## 2. കൂടുതൽ ഡാറ്റ എക്സ്പ്ലോറേഷൻ.\n",
|
|
"\n",
|
|
"ഈ ഡാറ്റ എത്ര ശുദ്ധമാണ്? ബോക്സ് പ്ലോട്ടുകൾ ഉപയോഗിച്ച് ഔട്ട്ലൈയർമാരെ പരിശോധിക്കാം. കുറവ് ഔട്ട്ലൈയർമാർ ഉള്ള സംഖ്യാത്മക കോളങ്ങളിലാണ് നാം ശ്രദ്ധ കേന്ദ്രീകരിക്കുന്നത് (നിങ്ങൾക്ക് ഔട്ട്ലൈയർമാരെ ശുദ്ധമാക്കാനാകുമെങ്കിലും). ബോക്സ് പ്ലോട്ടുകൾ ഡാറ്റയുടെ പരിധി കാണിക്കുകയും ഏത് കോളങ്ങൾ ഉപയോഗിക്കാമെന്ന് തിരഞ്ഞെടുക്കാൻ സഹായിക്കുകയും ചെയ്യും. ശ്രദ്ധിക്കുക, ബോക്സ് പ്ലോട്ടുകൾ വ്യത്യാസം കാണിക്കുന്നില്ല, നല്ല ക്ലസ്റ്ററബിൾ ഡാറ്റയുടെ ഒരു പ്രധാന ഘടകം. കൂടുതൽ വായനയ്ക്കായി [ഈ ചർച്ച](https://stats.stackexchange.com/questions/91536/deduce-variance-from-boxplot) കാണുക.\n",
|
|
"\n",
|
|
"[ബോക്സ് പ്ലോട്ടുകൾ](https://en.wikipedia.org/wiki/Box_plot) സംഖ്യാത്മക ഡാറ്റയുടെ വിതരണത്തെ ഗ്രാഫിക്കൽ ആയി പ്രതിപാദിക്കാൻ ഉപയോഗിക്കുന്നു, അതിനാൽ ജനപ്രിയ സംഗീത ശൈലികളോടൊപ്പം എല്ലാ സംഖ്യാത്മക കോളങ്ങളും *തിരഞ്ഞെടുക്കുന്നതിൽ* നിന്ന് തുടങ്ങാം.\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "HhNreJKLLXyq"
|
|
},
|
|
"source": [
|
|
"# Select top genre column and all other numeric columns\n",
|
|
"df_numeric <- nigerian_songs %>% \n",
|
|
" select(artist_top_genre, where(is.numeric)) \n",
|
|
"\n",
|
|
"# Display the data\n",
|
|
"df_numeric %>% \n",
|
|
" slice_head(n = 5)\n"
|
|
],
|
|
"execution_count": null,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "uYXrwJRaLXyq"
|
|
},
|
|
"source": [
|
|
"തിരഞ്ഞെടുപ്പ് സഹായിയായ `where` ഇതിനെ എളുപ്പമാക്കുന്നത് എങ്ങനെ കാണൂ 💁? ഇത്തരത്തിലുള്ള മറ്റ് ഫംഗ്ഷനുകൾ [ഇവിടെ](https://tidyselect.r-lib.org/) പരിശോധിക്കുക.\n",
|
|
"\n",
|
|
"നാം ഓരോ സംഖ്യാത്മക സവിശേഷതയ്ക്കും ഒരു ബോക്സ്പ്ലോട്ട് ഉണ്ടാക്കാനിരിക്കെ ലൂപ്പുകൾ ഉപയോഗിക്കുന്നത് ഒഴിവാക്കാൻ, ഡാറ്റയെ *നീളമുള്ള* ഫോർമാറ്റിലേക്ക് പുനഃസംഘടിപ്പിക്കാം, ഇത് `facets` - ഓരോ ഉപസമൂഹവും പ്രദർശിപ്പിക്കുന്ന ഉപഗ്രാഫുകൾ - ഉപയോഗിക്കാൻ സഹായിക്കും.\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "gd5bR3f8LXys"
|
|
},
|
|
"source": [
|
|
"# Pivot data from wide to long\n",
|
|
"df_numeric_long <- df_numeric %>% \n",
|
|
" pivot_longer(!artist_top_genre, names_to = \"feature_names\", values_to = \"values\") \n",
|
|
"\n",
|
|
"# Print out data\n",
|
|
"df_numeric_long %>% \n",
|
|
" slice_head(n = 15)\n"
|
|
],
|
|
"execution_count": null,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "-7tE1swnLXyv"
|
|
},
|
|
"source": [
|
|
"കൂടുതലായി! ഇപ്പോൾ കുറച്ച് `ggplots` സമയമാണ്! എങ്കിൽ ഏത് `geom` നാം ഉപയോഗിക്കും?\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "r88bIsyuLXyy"
|
|
},
|
|
"source": [
|
|
"# Make a box plot\n",
|
|
"df_numeric_long %>% \n",
|
|
" ggplot(mapping = aes(x = feature_names, y = values, fill = feature_names)) +\n",
|
|
" geom_boxplot() +\n",
|
|
" facet_wrap(~ feature_names, ncol = 4, scales = \"free\") +\n",
|
|
" theme(legend.position = \"none\")\n"
|
|
],
|
|
"execution_count": null,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "EYVyKIUELXyz"
|
|
},
|
|
"source": [
|
|
"Easy-gg!\n",
|
|
"\n",
|
|
"ഇപ്പോൾ നാം ഈ ഡാറ്റ കുറച്ച് ശബ്ദമുള്ളതാണെന്ന് കാണാം: ഓരോ കോളവും ബോക്സ്പ്ലോട്ടായി നിരീക്ഷിച്ചാൽ, ഔട്ട്ലൈയർമാർ കാണാം. നിങ്ങൾ ഡാറ്റാസെറ്റ് വഴി പോയി ഈ ഔട്ട്ലൈയർമാരെ നീക്കം ചെയ്യാമായിരുന്നു, പക്ഷേ അത് ഡാറ്റയെ വളരെ കുറവാക്കും.\n",
|
|
"\n",
|
|
"ഇപ്പോൾ, നമുക്ക് ക്ലസ്റ്ററിംഗ് അഭ്യാസത്തിനായി ഉപയോഗിക്കാനുള്ള കോളങ്ങൾ തിരഞ്ഞെടുക്കാം. സമാനമായ പരിധികളുള്ള സംഖ്യാത്മക കോളങ്ങൾ തിരഞ്ഞെടുക്കാം. `artist_top_genre` സംഖ്യാത്മകമായി എൻകോഡ് ചെയ്യാമായിരുന്നു, പക്ഷേ ഇപ്പോൾ അത് ഒഴിവാക്കാം.\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "-wkpINyZLXy0"
|
|
},
|
|
"source": [
|
|
"# Select variables with similar ranges\n",
|
|
"df_numeric_select <- df_numeric %>% \n",
|
|
" select(popularity, danceability, acousticness, loudness, energy) \n",
|
|
"\n",
|
|
"# Normalize data\n",
|
|
"# df_numeric_select <- scale(df_numeric_select)\n"
|
|
],
|
|
"execution_count": null,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "D7dLzgpqLXy1"
|
|
},
|
|
"source": [
|
|
"## 3. R-ൽ k-means ക്ലസ്റ്ററിംഗ് കണക്കാക്കൽ\n",
|
|
"\n",
|
|
"നാം R-ൽ ഉൾപ്പെടുത്തിയിരിക്കുന്ന `kmeans` ഫംഗ്ഷൻ ഉപയോഗിച്ച് k-means കണക്കാക്കാം, `help(\"kmeans()\")` കാണുക. `kmeans()` ഫംഗ്ഷൻ പ്രധാനമായും എല്ലാ സംഖ്യാത്മക കോളങ്ങളുള്ള ഒരു ഡാറ്റാ ഫ്രെയിം സ്വീകരിക്കുന്നു.\n",
|
|
"\n",
|
|
"k-means ക്ലസ്റ്ററിംഗ് ഉപയോഗിക്കുമ്പോൾ ആദ്യത്തെ ഘട്ടം അവസാന പരിഹാരത്തിൽ സൃഷ്ടിക്കപ്പെടുന്ന ക്ലസ്റ്ററുകളുടെ എണ്ണം (k) നിർദ്ദേശിക്കുകയാണ്. ഡാറ്റാസെറ്റിൽ നിന്ന് നാം 3 ഗാന ശൈലികൾ വേർതിരിച്ചെടുത്തതായി അറിയാം, അതിനാൽ 3 പരീക്ഷിക്കാം:\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "uC4EQ5w7LXy5"
|
|
},
|
|
"source": [
|
|
"set.seed(2056)\n",
|
|
"# Kmeans clustering for 3 clusters\n",
|
|
"kclust <- kmeans(\n",
|
|
" df_numeric_select,\n",
|
|
" # Specify the number of clusters\n",
|
|
" centers = 3,\n",
|
|
" # How many random initial configurations\n",
|
|
" nstart = 25\n",
|
|
")\n",
|
|
"\n",
|
|
"# Display clustering object\n",
|
|
"kclust\n"
|
|
],
|
|
"execution_count": null,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "hzfhscWrLXy-"
|
|
},
|
|
"source": [
|
|
"kmeans ഒബ്ജക്റ്റിൽ `help(\"kmeans()\")` ൽ നന്നായി വിശദീകരിച്ചിരിക്കുന്ന നിരവധി വിവരങ്ങൾ അടങ്ങിയിരിക്കുന്നു. ഇപ്പോൾ, ചിലതിൽ ശ്രദ്ധ കേന്ദ്രീകരിക്കാം. ഡാറ്റ 65, 110, 111 എന്ന വലുപ്പമുള്ള 3 ക്ലസ്റ്ററുകളായി ഗ്രൂപ്പുചെയ്തിട്ടുണ്ടെന്ന് കാണാം. ഔട്ട്പുട്ടിൽ 5 വ്യത്യസ്ത വേരിയബിളുകളിലായി 3 ഗ്രൂപ്പുകളുടെ ക്ലസ്റ്റർ സെന്ററുകളും (മീനുകളും) ഉൾപ്പെടുന്നു.\n",
|
|
"\n",
|
|
"ക്ലസ്റ്ററിംഗ് വെക്ടർ ഓരോ നിരീക്ഷണത്തിന്റെയും ക്ലസ്റ്റർ നിയോഗമാണ്. ക്ലസ്റ്റർ നിയോഗം മൗലിക ഡാറ്റാ സെറ്റിൽ ചേർക്കാൻ `augment` ഫംഗ്ഷൻ ഉപയോഗിക്കാം.\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "0XwwpFGQLXy_"
|
|
},
|
|
"source": [
|
|
"# Add predicted cluster assignment to data set\n",
|
|
"augment(kclust, df_numeric_select) %>% \n",
|
|
" relocate(.cluster) %>% \n",
|
|
" slice_head(n = 10)\n"
|
|
],
|
|
"execution_count": null,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "NXIVXXACLXzA"
|
|
},
|
|
"source": [
|
|
"Perfect, നാം ഇപ്പോൾ നമ്മുടെ ഡാറ്റാ സെറ്റ് 3 ഗ്രൂപ്പുകളായി വിഭജിച്ചു. അതിനാൽ, നമ്മുടെ ക്ലസ്റ്ററിംഗ് എത്രത്തോളം നല്ലതാണ് 🤷? നമുക്ക് `Silhouette score` നോക്കാം\n",
|
|
"\n",
|
|
"### **Silhouette score**\n",
|
|
"\n",
|
|
"[Silhouette analysis](https://en.wikipedia.org/wiki/Silhouette_(clustering)) ഉപയോഗിച്ച് ഫലമായ ക്ലസ്റ്ററുകൾ തമ്മിലുള്ള വേർതിരിവ് അളക്കാൻ കഴിയും. ഈ സ്കോർ -1 മുതൽ 1 വരെ മാറുന്നു, സ്കോർ 1-ന് അടുത്ത് ആണെങ്കിൽ, ക്ലസ്റ്റർ സാന്ദ്രവും മറ്റ് ക്ലസ്റ്ററുകളിൽ നിന്ന് നന്നായി വേർതിരിച്ചുമാണ്. 0-ന് അടുത്തുള്ള മൂല്യം ക്ലസ്റ്ററുകൾ ഒതുക്കിയിരിക്കുന്നതും, സാമ്പിളുകൾ അടുത്തുള്ള ക്ലസ്റ്ററുകളുടെ തീരുമാന അതിരിനോട് വളരെ അടുത്തുള്ളതുമാണ് സൂചിപ്പിക്കുന്നത്.[source](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam).\n",
|
|
"\n",
|
|
"സാധാരണ silhouette രീതി വ്യത്യസ്ത *k* മൂല്യങ്ങൾക്ക് നിരീക്ഷണങ്ങളുടെ ശരാശരി silhouette കണക്കാക്കുന്നു. ഉയർന്ന ശരാശരി silhouette സ്കോർ നല്ല ക്ലസ്റ്ററിംഗ് സൂചിപ്പിക്കുന്നു.\n",
|
|
"\n",
|
|
"`silhouette` ഫംഗ്ഷൻ ക്ലസ്റ്റർ പാക്കേജിൽ ശരാശരി silhouette വീതി കണക്കാക്കാൻ ഉപയോഗിക്കുന്നു.\n",
|
|
"\n",
|
|
"> silhouette ഏതെങ്കിലും [distance](https://en.wikipedia.org/wiki/Distance \"Distance\") മെട്രിക് ഉപയോഗിച്ച് കണക്കാക്കാം, ഉദാഹരണത്തിന് [Euclidean distance](https://en.wikipedia.org/wiki/Euclidean_distance \"Euclidean distance\") അല്ലെങ്കിൽ [Manhattan distance](https://en.wikipedia.org/wiki/Manhattan_distance \"Manhattan distance\") എന്നവ, ഞങ്ങൾ [മുൻപത്തെ പാഠത്തിൽ](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb) ചർച്ച ചെയ്തതുപോലെ.\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "Jn0McL28LXzB"
|
|
},
|
|
"source": [
|
|
"# Load cluster package\n",
|
|
"library(cluster)\n",
|
|
"\n",
|
|
"# Compute average silhouette score\n",
|
|
"ss <- silhouette(kclust$cluster,\n",
|
|
" # Compute euclidean distance\n",
|
|
" dist = dist(df_numeric_select))\n",
|
|
"mean(ss[, 3])\n"
|
|
],
|
|
"execution_count": null,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "QyQRn97nLXzC"
|
|
},
|
|
"source": [
|
|
"നമ്മുടെ സ്കോർ **.549** ആണ്, അതായത് മധ്യത്തിൽ തന്നെ. ഇത് സൂചിപ്പിക്കുന്നത് നമ്മുടെ ഡാറ്റ ഈ തരത്തിലുള്ള ക്ലസ്റ്ററിംഗിന് പ്രത്യേകിച്ച് അനുയോജ്യമായതല്ല എന്നതാണ്. നമുക്ക് ഈ സംശയം ദൃശ്യമായി സ്ഥിരീകരിക്കാമോ എന്ന് നോക്കാം. [factoextra പാക്കേജ്](https://rpkgs.datanovia.com/factoextra/index.html) ക്ലസ്റ്ററിംഗ് ദൃശ്യവത്കരിക്കാൻ (`fviz_cluster()`) ഫംഗ്ഷനുകൾ നൽകുന്നു.\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "7a6Km1_FLXzD"
|
|
},
|
|
"source": [
|
|
"library(factoextra)\n",
|
|
"\n",
|
|
"# Visualize clustering results\n",
|
|
"fviz_cluster(kclust, df_numeric_select)\n"
|
|
],
|
|
"execution_count": null,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "IBwCWt-0LXzD"
|
|
},
|
|
"source": [
|
|
"ക്ലസ്റ്ററുകളിൽ ഉള്ള ഓവർലാപ്പ് നമ്മുടെ ഡാറ്റ ഈ തരത്തിലുള്ള ക്ലസ്റ്ററിംഗിന് പ്രത്യേകിച്ച് അനുയോജ്യമല്ലെന്ന് സൂചിപ്പിക്കുന്നു, പക്ഷേ നമുക്ക് തുടരണം.\n",
|
|
"\n",
|
|
"## 4. ഏറ്റവും അനുയോജ്യമായ ക്ലസ്റ്ററുകൾ നിർണ്ണയിക്കൽ\n",
|
|
"\n",
|
|
"K-മീൻസ് ക്ലസ്റ്ററിംഗിൽ സാധാരണയായി ഉയരുന്ന ഒരു അടിസ്ഥാന ചോദ്യമാണ് - അറിയപ്പെടാത്ത ക്ലാസ് ലേബലുകൾ ഇല്ലാതെ, നിങ്ങളുടെ ഡാറ്റ എത്ര ക്ലസ്റ്ററുകളായി വേർതിരിക്കണമെന്ന് നിങ്ങൾ എങ്ങനെ അറിയും?\n",
|
|
"\n",
|
|
"നാം കണ്ടെത്താൻ ശ്രമിക്കാവുന്ന ഒരു മാർഗം ഡാറ്റ സാമ്പിൾ ഉപയോഗിച്ച് ക്ലസ്റ്ററുകളുടെ എണ്ണം ക്രമമായി വർദ്ധിപ്പിച്ച് (ഉദാ: 1-10 വരെ) `ക്ലസ്റ്ററിംഗ് മോഡലുകളുടെ ഒരു പരമ്പര സൃഷ്ടിക്കുക` എന്നതാണ്, കൂടാതെ **സിലഹ്വെറ്റ് സ്കോർ** പോലുള്ള ക്ലസ്റ്ററിംഗ് മെട്രിക്കുകൾ വിലയിരുത്തുക.\n",
|
|
"\n",
|
|
"വിവിധ *k* മൂല്യങ്ങൾക്ക് ക്ലസ്റ്ററിംഗ് ആൽഗോരിതം കണക്കാക്കി **Within Cluster Sum of Squares** (WCSS) വിലയിരുത്തി ഏറ്റവും അനുയോജ്യമായ ക്ലസ്റ്ററുകളുടെ എണ്ണം നമുക്ക് നിർണ്ണയിക്കാം. മൊത്തം ക്ലസ്റ്റർ ഉള്ളിലെ സ്ക്വയർ സമാഹാരം (WCSS) ക്ലസ്റ്ററിംഗിന്റെ സാന്ദ്രത അളക്കുന്നു, ഇത് όσο ചെറുതായിരിക്കും, ഡാറ്റ പോയിന്റുകൾ തമ്മിലുള്ള ദൂരം കുറവായിരിക്കും എന്ന് അർത്ഥം.\n",
|
|
"\n",
|
|
"1 മുതൽ 10 വരെ വ്യത്യസ്ത `k` തിരഞ്ഞെടുപ്പുകളുടെ ഈ ക്ലസ്റ്ററിംഗിൽ ഉള്ള ഫലങ്ങൾ നമുക്ക് പരിശോധിക്കാം.\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "hSeIiylDLXzE"
|
|
},
|
|
"source": [
|
|
"# Create a series of clustering models\n",
|
|
"kclusts <- tibble(k = 1:10) %>% \n",
|
|
" # Perform kmeans clustering for 1,2,3 ... ,10 clusters\n",
|
|
" mutate(model = map(k, ~ kmeans(df_numeric_select, centers = .x, nstart = 25)),\n",
|
|
" # Farm out clustering metrics eg WCSS\n",
|
|
" glanced = map(model, ~ glance(.x))) %>% \n",
|
|
" unnest(cols = glanced)\n",
|
|
" \n",
|
|
"\n",
|
|
"# View clustering rsulsts\n",
|
|
"kclusts\n"
|
|
],
|
|
"execution_count": null,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "m7rS2U1eLXzE"
|
|
},
|
|
"source": [
|
|
"ഇപ്പോൾ ഓരോ ക്ലസ്റ്ററിംഗ് ആൽഗോറിതത്തിനും സെന്റർ *k* ഉള്ള മൊത്തം ക്ലസ്റ്റർ-അകത്ത് സ്ക്വയർസിന്റെ സംഖ്യ (tot.withinss) ലഭിച്ചതിനുശേഷം, ഏറ്റവും അനുയോജ്യമായ ക്ലസ്റ്ററുകളുടെ എണ്ണം കണ്ടെത്താൻ [എൽബോ മെത്തഡ്](https://en.wikipedia.org/wiki/Elbow_method_(clustering)) ഉപയോഗിക്കുന്നു. ക്ലസ്റ്ററുകളുടെ എണ്ണത്തിന്റെ ഫംഗ്ഷനായി WCSS പ്ലോട്ട് ചെയ്യുകയും, ഉപയോഗിക്കേണ്ട ക്ലസ്റ്ററുകളുടെ എണ്ണമായി [വക്രത്തിന്റെ എൽബോ](https://en.wikipedia.org/wiki/Elbow_of_the_curve \"Elbow of the curve\") തിരഞ്ഞെടുക്കുകയും ചെയ്യുന്നതാണ് ഈ രീതി.\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "o_DjHGItLXzF"
|
|
},
|
|
"source": [
|
|
"set.seed(2056)\n",
|
|
"# Use elbow method to determine optimum number of clusters\n",
|
|
"kclusts %>% \n",
|
|
" ggplot(mapping = aes(x = k, y = tot.withinss)) +\n",
|
|
" geom_line(size = 1.2, alpha = 0.8, color = \"#FF7F0EFF\") +\n",
|
|
" geom_point(size = 2, color = \"#FF7F0EFF\")\n"
|
|
],
|
|
"execution_count": null,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "pLYyt5XSLXzG"
|
|
},
|
|
"source": [
|
|
"The plot shows a large reduction in WCSS (so greater *tightness*) as the number of clusters increases from one to two, and a further noticeable reduction from two to three clusters. After that, the reduction is less pronounced, resulting in an `elbow` 💪in the chart at around three clusters. This is a good indication that there are two to three reasonably well separated clusters of data points.\n",
|
|
"\n",
|
|
"We can now go ahead and extract the clustering model where `k = 3`:\n",
|
|
"\n",
|
|
"> `pull()`: used to extract a single column\n",
|
|
">\n",
|
|
"> `pluck()`: used to index data structures such as lists\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "JP_JPKBILXzG"
|
|
},
|
|
"source": [
|
|
"# Extract k = 3 clustering\n",
|
|
"final_kmeans <- kclusts %>% \n",
|
|
" filter(k == 3) %>% \n",
|
|
" pull(model) %>% \n",
|
|
" pluck(1)\n",
|
|
"\n",
|
|
"\n",
|
|
"final_kmeans\n"
|
|
],
|
|
"execution_count": null,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "l_PDTu8tLXzI"
|
|
},
|
|
"source": [
|
|
"ശ്രേഷ്ഠം! നമുക്ക് ലഭിച്ച ക്ലസ്റ്ററുകൾ ദൃശ്യവത്കരിക്കാം. `plotly` ഉപയോഗിച്ച് ചില ഇന്ററാക്ടിവിറ്റി വേണോ?\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "dNcleFe-LXzJ"
|
|
},
|
|
"source": [
|
|
"# Add predicted cluster assignment to data set\n",
|
|
"results <- augment(final_kmeans, df_numeric_select) %>% \n",
|
|
" bind_cols(df_numeric %>% select(artist_top_genre)) \n",
|
|
"\n",
|
|
"# Plot cluster assignments\n",
|
|
"clust_plt <- results %>% \n",
|
|
" ggplot(mapping = aes(x = popularity, y = danceability, color = .cluster, shape = artist_top_genre)) +\n",
|
|
" geom_point(size = 2, alpha = 0.8) +\n",
|
|
" paletteer::scale_color_paletteer_d(\"ggthemes::Tableau_10\")\n",
|
|
"\n",
|
|
"ggplotly(clust_plt)\n"
|
|
],
|
|
"execution_count": null,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "6JUM_51VLXzK"
|
|
},
|
|
"source": [
|
|
"പ്രത്യേക നിറങ്ങളിൽ പ്രതിനിധീകരിച്ചിരിക്കുന്ന ഓരോ ക്ലസ്റ്ററും വ്യത്യസ്ത ആകൃതികളിൽ പ്രതിനിധീകരിച്ചിരിക്കുന്ന വ്യത്യസ്ത ജാനറുകൾ ഉണ്ടാകുമെന്ന് നമ്മൾ പ്രതീക്ഷിച്ചിരുന്നോ.\n",
|
|
"\n",
|
|
"മോഡലിന്റെ കൃത്യത നോക്കാം.\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "HdIMUGq7LXzL"
|
|
},
|
|
"source": [
|
|
"# Assign genres to predefined integers\n",
|
|
"label_count <- results %>% \n",
|
|
" group_by(artist_top_genre) %>% \n",
|
|
" mutate(id = cur_group_id()) %>% \n",
|
|
" ungroup() %>% \n",
|
|
" summarise(correct_labels = sum(.cluster == id))\n",
|
|
"\n",
|
|
"\n",
|
|
"# Print results \n",
|
|
"cat(\"Result:\", label_count$correct_labels, \"out of\", nrow(results), \"samples were correctly labeled.\")\n",
|
|
"\n",
|
|
"cat(\"\\nAccuracy score:\", label_count$correct_labels/nrow(results))\n"
|
|
],
|
|
"execution_count": null,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "C50wvaAOLXzM"
|
|
},
|
|
"source": [
|
|
"ഈ മോഡലിന്റെ കൃത്യത മോശമല്ല, പക്ഷേ മികച്ചതുമല്ല. ഡാറ്റ K-Means ക്ലസ്റ്ററിംഗിന് അനുയോജ്യമല്ലായിരിക്കാം. ഈ ഡാറ്റ വളരെ അസമതുലിതമാണ്, correlations വളരെ കുറവാണ്, കൂടാതെ കോളം മൂല്യങ്ങൾക്കിടയിൽ വ്യത്യാസം വളരെ കൂടുതലാണ്, അതിനാൽ നല്ല ക്ലസ്റ്ററിംഗ് സാധ്യമല്ല. വാസ്തവത്തിൽ, രൂപപ്പെടുന്ന ക്ലസ്റ്ററുകൾ മുകളിൽ നാം നിർവചിച്ച മൂന്ന് ജാനർ വിഭാഗങ്ങൾ മൂലം ശക്തമായി സ്വാധീനിക്കപ്പെട്ടതോ വക്രമായതോ ആയിരിക്കാം.\n",
|
|
"\n",
|
|
"എങ്കിലും, അത് വളരെ പഠനപ്രക്രിയ ആയിരുന്നു!\n",
|
|
"\n",
|
|
"Scikit-learn ന്റെ ഡോക്യുമെന്റേഷനിൽ, ഈ പോലുള്ള മോഡലുകൾക്ക്, ക്ലസ്റ്ററുകൾ വളരെ വ്യക്തമായി വേർതിരിക്കപ്പെട്ടിട്ടില്ലാത്തതിനാൽ, 'വ്യത്യാസം' പ്രശ്നമുണ്ടെന്ന് കാണാം:\n",
|
|
"\n",
|
|
"<p >\n",
|
|
" <img src=\"../../../../../../translated_images/ml/problems.f7fb539ccd80608e.webp\"\n",
|
|
" width=\"500\"/>\n",
|
|
" <figcaption>Scikit-learn ന്റെ ഇൻഫോഗ്രാഫിക്</figcaption>\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"## **വ്യത്യാസം**\n",
|
|
"\n",
|
|
"വ്യത്യാസം എന്നത് \"Mean ൽ നിന്നുള്ള ചതുരശ്ര വ്യത്യാസങ്ങളുടെ ശരാശരി\" ആയി നിർവചിക്കപ്പെടുന്നു [source](https://www.mathsisfun.com/data/standard-deviation.html). ഈ ക്ലസ്റ്ററിംഗ് പ്രശ്നത്തിന്റെ സാന്ദർഭ്യത്തിൽ, ഇത് നമ്മുടെ ഡാറ്റാസെറ്റിലെ സംഖ്യകൾ ശരാശരിയിൽ നിന്ന് വളരെ വ്യത്യാസപ്പെടുന്ന ഡാറ്റയെ സൂചിപ്പിക്കുന്നു.\n",
|
|
"\n",
|
|
"✅ ഈ പ്രശ്നം പരിഹരിക്കാൻ നിങ്ങൾക്ക് ഉള്ള എല്ലാ മാർഗങ്ങളും ചിന്തിക്കാൻ ഇത് ഒരു മികച്ച അവസരമാണ്. ഡാറ്റ കുറച്ച് മാറ്റി നോക്കാമോ? വ്യത്യസ്ത കോളങ്ങൾ ഉപയോഗിക്കാമോ? വ്യത്യസ്ത ആൽഗോരിതം പരീക്ഷിക്കാമോ? സൂചന: [ഡാറ്റ സ്കെയിലിംഗ്](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/) ഉപയോഗിച്ച് ഡാറ്റ നോർമലൈസ് ചെയ്ത് മറ്റ് കോളങ്ങൾ പരീക്ഷിക്കുക.\n",
|
|
"\n",
|
|
"> ഈ '[വ്യത്യാസം കാൽക്കുലേറ്റർ](https://www.calculatorsoup.com/calculators/statistics/variance-calculator.php)' പരീക്ഷിച്ച് ആശയം കൂടുതൽ മനസ്സിലാക്കുക.\n",
|
|
"\n",
|
|
"------------------------------------------------------------------------\n",
|
|
"\n",
|
|
"## **🚀ചലഞ്ച്**\n",
|
|
"\n",
|
|
"ഈ നോട്ട്ബുക്കിൽ ചില സമയം ചെലവഴിക്കൂ, പാരാമീറ്ററുകൾ ക്രമീകരിച്ച് നോക്കൂ. ഡാറ്റ കൂടുതൽ ശുദ്ധമാക്കുന്നതിലൂടെ (ഉദാഹരണത്തിന്, ഔട്ട്ലൈയർമാർ നീക്കംചെയ്യൽ) മോഡലിന്റെ കൃത്യത മെച്ചപ്പെടുത്താൻ കഴിയുമോ? നിങ്ങൾക്ക് ഡാറ്റ സാമ്പിളുകൾക്ക് കൂടുതൽ ഭാരമിടാൻ വെയ്റ്റുകൾ ഉപയോഗിക്കാം. മികച്ച ക്ലസ്റ്ററുകൾ സൃഷ്ടിക്കാൻ മറ്റെന്തെന്ത് ചെയ്യാനാകും?\n",
|
|
"\n",
|
|
"സൂചന: നിങ്ങളുടെ ഡാറ്റ സ്കെയിൽ ചെയ്യാൻ ശ്രമിക്കുക. നോട്ട്ബുക്കിൽ സ്റ്റാൻഡേർഡ് സ്കെയിലിംഗ് ചേർക്കുന്ന കോഡ് കമന്റ് ചെയ്തിട്ടുണ്ട്, ഇത് ഡാറ്റ കോളങ്ങൾ പരസ്പരം പരിധിയിൽ കൂടുതൽ സമാനമാക്കുന്നു. സിലഹ്വെറ്റ് സ്കോർ കുറയുമ്പോഴും, എൽബോ ഗ്രാഫിലെ 'കിങ്ക്' മൃദുവാകുന്നത് കാണും. കാരണം, ഡാറ്റ സ്കെയിൽ ചെയ്യാതെ വെച്ചാൽ കുറവ് വ്യത്യാസമുള്ള ഡാറ്റയ്ക്ക് കൂടുതൽ ഭാരമിടാൻ അവസരം ലഭിക്കുന്നു. ഈ പ്രശ്നത്തെ കുറിച്ച് കൂടുതൽ വായിക്കുക [ഇവിടെ](https://stats.stackexchange.com/questions/21222/are-mean-normalization-and-feature-scaling-needed-for-k-means-clustering/21226#21226).\n",
|
|
"\n",
|
|
"## [**പോസ്റ്റ്-ലെക്ചർ ക്വിസ്**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/30/)\n",
|
|
"\n",
|
|
"## **പരിശോധന & സ്വയം പഠനം**\n",
|
|
"\n",
|
|
"- K-Means സിമുലേറ്റർ [ഇതുപോലുള്ളത്](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/) പരിശോധിക്കുക. ഈ ഉപകരണം ഉപയോഗിച്ച് സാമ്പിൾ ഡാറ്റ പോയിന്റുകൾ ദൃശ്യവൽക്കരിച്ച് സെൻട്രോയിഡുകൾ കണ്ടെത്താം. ഡാറ്റയുടെ റാൻഡംനസ്, ക്ലസ്റ്ററുകളുടെ എണ്ണം, സെൻട്രോയിഡുകളുടെ എണ്ണം എഡിറ്റ് ചെയ്യാം. ഇത് ഡാറ്റ എങ്ങനെ ഗ്രൂപ്പുചെയ്യാമെന്ന് മനസ്സിലാക്കാൻ സഹായിക്കുന്നുണ്ടോ?\n",
|
|
"\n",
|
|
"- സ്റ്റാൻഫോർഡിൽ നിന്നുള്ള [K-Means ഹാൻഡ്ഔട്ട്](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) കൂടി നോക്കുക.\n",
|
|
"\n",
|
|
"നിങ്ങളുടെ പുതിയ ക്ലസ്റ്ററിംഗ് കഴിവുകൾ K-Means ക്ലസ്റ്ററിംഗിന് അനുയോജ്യമായ ഡാറ്റാസെറ്റുകളിൽ പരീക്ഷിക്കാൻ ആഗ്രഹിക്കുന്നുവോ? ദയവായി കാണുക:\n",
|
|
"\n",
|
|
"- [Train and Evaluate Clustering Models](https://rpubs.com/eR_ic/clustering) Tidymodels ഉപയോഗിച്ച്\n",
|
|
"\n",
|
|
"- [K-means Cluster Analysis](https://uc-r.github.io/kmeans_clustering), UC ബിസിനസ് അനലിറ്റിക്സ് R പ്രോഗ്രാമിംഗ് ഗൈഡ്\n",
|
|
"\n",
|
|
"- [K-means ക്ലസ്റ്ററിംഗ് tidy data സിദ്ധാന്തങ്ങളോടെ](https://www.tidymodels.org/learn/statistics/k-means/)\n",
|
|
"\n",
|
|
"## **അസൈൻമെന്റ്**\n",
|
|
"\n",
|
|
"[വ്യത്യസ്ത ക്ലസ്റ്ററിംഗ് രീതികൾ പരീക്ഷിക്കുക](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/2-K-Means/assignment.md)\n",
|
|
"\n",
|
|
"## നന്ദി:\n",
|
|
"\n",
|
|
"[Jen Looper](https://www.twitter.com/jenlooper) ഈ മോഡ്യൂളിന്റെ ഒറിജിനൽ പൈതൺ പതിപ്പ് സൃഷ്ടിച്ചതിന് ♥️\n",
|
|
"\n",
|
|
"[`Allison Horst`](https://twitter.com/allison_horst/) R-നെ കൂടുതൽ സ്വാഗതം ചെയ്യുന്നതും ആകർഷകവുമാക്കുന്ന അത്ഭുതകരമായ ചിത്രങ്ങൾ സൃഷ്ടിച്ചതിന്. അവളുടെ [ഗാലറി](https://www.google.com/url?q=https://github.com/allisonhorst/stats-illustrations&sa=D&source=editors&ust=1626380772530000&usg=AOvVaw3zcfyCizFQZpkSLzxiiQEM) സന്ദർശിക്കുക.\n",
|
|
"\n",
|
|
"സന്തോഷകരമായ പഠനം,\n",
|
|
"\n",
|
|
"[Eric](https://twitter.com/ericntay), ഗോൾഡ് മൈക്രോസോഫ്റ്റ് ലേൺ സ്റ്റുഡന്റ് അംബാസഡർ.\n",
|
|
"\n",
|
|
"<p >\n",
|
|
" <img src=\"../../../../../../translated_images/ml/r_learners_sm.e4a71b113ffbedfe.webp\"\n",
|
|
" width=\"500\"/>\n",
|
|
" <figcaption>@allison_horst രചിച്ച ആർട്ട്വർക്കുകൾ</figcaption>\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**അസൂയാപത്രം**: \nഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖയാണ് പ്രാമാണികമായ ഉറവിടം എന്ന് പരിഗണിക്കേണ്ടതാണ്. നിർണായകമായ വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
|
|
]
|
|
}
|
|
]
|
|
} |