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:56:57+00:00",
|
|
"source_file": "5-Clustering/2-K-Means/solution/R/lesson_15-R.ipynb",
|
|
"language_code": "kn"
|
|
}
|
|
},
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "GULATlQXLXyR"
|
|
},
|
|
"source": [
|
|
"## R ಮತ್ತು ಟೈಡಿ ಡೇಟಾ ತತ್ವಗಳನ್ನು ಬಳಸಿಕೊಂಡು K-ಮೀನ್ಸ್ ಕ್ಲಸ್ಟರಿಂಗ್ ಅನ್ನು ಅನ್ವೇಷಿಸಿ.\n",
|
|
"\n",
|
|
"### [**ಪೂರ್ವ-ಪಾಠ ಕ್ವಿಜ್**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/29/)\n",
|
|
"\n",
|
|
"ಈ ಪಾಠದಲ್ಲಿ, ನೀವು Tidymodels ಪ್ಯಾಕೇಜ್ ಮತ್ತು R ಪರಿಸರದಲ್ಲಿನ ಇತರ ಪ್ಯಾಕೇಜ್ಗಳನ್ನು (ನಾವು ಅವುಗಳನ್ನು ಸ್ನೇಹಿತರು 🧑🤝🧑 ಎಂದು ಕರೆಯುತ್ತೇವೆ) ಮತ್ತು ನೀವು ಮೊದಲು ಆಮದು ಮಾಡಿದ ನೈಜೀರಿಯನ್ ಸಂಗೀತ ಡೇಟಾಸೆಟ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು ಕ್ಲಸ್ಟರ್ಗಳನ್ನು ಹೇಗೆ ರಚಿಸುವುದು ಎಂದು ಕಲಿಯುತ್ತೀರಿ. ನಾವು K-ಮೀನ್ಸ್ ಕ್ಲಸ್ಟರಿಂಗ್ನ ಮೂಲಭೂತಗಳನ್ನು ಆವರಿಸುವೆವು. ನೀವು ಮೊದಲು ಪಾಠದಲ್ಲಿ ಕಲಿತಂತೆ, ಕ್ಲಸ್ಟರ್ಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವ ಅನೇಕ ವಿಧಾನಗಳಿವೆ ಮತ್ತು ನೀವು ಬಳಸುವ ವಿಧಾನ ನಿಮ್ಮ ಡೇಟಾದ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆ ಎಂದು ಗಮನದಲ್ಲಿರಿಸಿ. K-ಮೀನ್ಸ್ ಅನ್ನು ಪ್ರಯತ್ನಿಸೋಣ ಏಕೆಂದರೆ ಇದು ಅತ್ಯಂತ ಸಾಮಾನ್ಯ ಕ್ಲಸ್ಟರಿಂಗ್ ತಂತ್ರವಾಗಿದೆ. ಆರಂಭಿಸೋಣ!\n",
|
|
"\n",
|
|
"ನೀವು ಕಲಿಯಲಿರುವ ಪದಗಳು:\n",
|
|
"\n",
|
|
"- ಸಿಲ್ಹೌಟ್ ಸ್ಕೋರಿಂಗ್\n",
|
|
"\n",
|
|
"- ಎಲ್ಬೋ ವಿಧಾನ\n",
|
|
"\n",
|
|
"- ಇನರ್ಷಿಯಾ\n",
|
|
"\n",
|
|
"- ವ್ಯತ್ಯಾಸ\n",
|
|
"\n",
|
|
"### **ಪರಿಚಯ**\n",
|
|
"\n",
|
|
"[K-ಮೀನ್ಸ್ ಕ್ಲಸ್ಟರಿಂಗ್](https://wikipedia.org/wiki/K-means_clustering) ಸಿಗ್ನಲ್ ಪ್ರೊಸೆಸಿಂಗ್ ಕ್ಷೇತ್ರದಿಂದ ಪಡೆದ ವಿಧಾನವಾಗಿದೆ. ಇದು ಡೇಟಾದ ಗುಂಪುಗಳನ್ನು ಅವುಗಳ ಲಕ್ಷಣಗಳಲ್ಲಿ ಹೊಂದಾಣಿಕೆಯ ಆಧಾರದ ಮೇಲೆ `k ಕ್ಲಸ್ಟರ್ಗಳು` ಎಂದು ವಿಭಜಿಸಲು ಮತ್ತು ವಿಭಾಗಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ.\n",
|
|
"\n",
|
|
"ಕ್ಲಸ್ಟರ್ಗಳನ್ನು [ವೊರೋನಾಯ್ ಡಯಾಗ್ರಾಮ್ಗಳು](https://wikipedia.org/wiki/Voronoi_diagram) ಎಂದು ದೃಶ್ಯೀಕರಿಸಬಹುದು, ಇದರಲ್ಲಿ ಒಂದು ಬಿಂದು (ಅಥವಾ 'ಬೀಜ') ಮತ್ತು ಅದರ ಸಂಬಂಧಿತ ಪ್ರದೇಶವನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ.\n",
|
|
"\n",
|
|
"<p >\n",
|
|
" <img src=\"../../../../../../translated_images/kn/voronoi.1dc1613fb0439b95.webp\"\n",
|
|
" width=\"500\"/>\n",
|
|
" <figcaption>ಜೆನ್ ಲೂಪರ್ ಅವರ ಇನ್ಫೋಗ್ರಾಫಿಕ್</figcaption>\n",
|
|
"\n",
|
|
"\n",
|
|
"K-ಮೀನ್ಸ್ ಕ್ಲಸ್ಟರಿಂಗ್ಗೆ ಕೆಳಗಿನ ಹಂತಗಳಿವೆ:\n",
|
|
"\n",
|
|
"1. ಡೇಟಾ ವಿಜ್ಞಾನಿ ರಚಿಸಲು ಬಯಸುವ ಕ್ಲಸ್ಟರ್ಗಳ ಸಂಖ್ಯೆಯನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುವುದರಿಂದ ಪ್ರಾರಂಭಿಸುತ್ತಾನೆ.\n",
|
|
"\n",
|
|
"2. ನಂತರ, ಆಲ್ಗಾರಿಥಮ್ ಡೇಟಾ ಸೆಟ್ನಿಂದ ಯಾದೃಚ್ಛಿಕವಾಗಿ K ವೀಕ್ಷಣೆಗಳನ್ನು ಆರಿಸಿಕೊಂಡು ಅವುಗಳನ್ನು ಕ್ಲಸ್ಟರ್ಗಳ ಪ್ರಾಥಮಿಕ ಕೇಂದ್ರಗಳಾಗಿ (ಅಥವಾ ಸೆಂಟ್ರಾಯ್ಡ್ಗಳು) ಬಳಸುತ್ತದೆ.\n",
|
|
"\n",
|
|
"3. ನಂತರ, ಉಳಿದ ಪ್ರತಿಯೊಂದು ವೀಕ್ಷಣೆಯನ್ನು ಅದರ ಅತಿ ಸಮೀಪದ ಸೆಂಟ್ರಾಯ್ಡ್ಗೆ ನಿಯೋಜಿಸಲಾಗುತ್ತದೆ.\n",
|
|
"\n",
|
|
"4. ನಂತರ, ಪ್ರತಿ ಕ್ಲಸ್ಟರ್ನ ಹೊಸ ಸರಾಸರಿ ಲೆಕ್ಕಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಸೆಂಟ್ರಾಯ್ಡ್ ಅನ್ನು ಆ ಸರಾಸರಿಗೇ ಸರಿಸಲಾಗುತ್ತದೆ.\n",
|
|
"\n",
|
|
"5. ಈಗ ಕೇಂದ್ರಗಳನ್ನು ಮರು ಲೆಕ್ಕಿಸಿದ ನಂತರ, ಪ್ರತಿಯೊಂದು ವೀಕ್ಷಣೆಯನ್ನು ಮತ್ತೆ ಪರಿಶೀಲಿಸಲಾಗುತ್ತದೆ ಅದು ಬೇರೆ ಕ್ಲಸ್ಟರ್ಗೆ ಹೆಚ್ಚು ಸಮೀಪವಿದೆಯೇ ಎಂದು ನೋಡಲು. ಎಲ್ಲಾ ವಸ್ತುಗಳನ್ನು ನವೀಕೃತ ಕ್ಲಸ್ಟರ್ ಸರಾಸರಿಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಮತ್ತೆ ನಿಯೋಜಿಸಲಾಗುತ್ತದೆ. ಕ್ಲಸ್ಟರ್ ನಿಯೋಜನೆ ಮತ್ತು ಸೆಂಟ್ರಾಯ್ಡ್ ನವೀಕರಣ ಹಂತಗಳನ್ನು ಪುನರಾವರ್ತಿಸಲಾಗುತ್ತದೆ, ಕ್ಲಸ್ಟರ್ ನಿಯೋಜನೆಗಳು ಬದಲಾಗದವರೆಗೆ (ಅಥವಾ ಸಮೀಕರಣ ಸಾಧನೆಯಾಗುವವರೆಗೆ). ಸಾಮಾನ್ಯವಾಗಿ, ಆಲ್ಗಾರಿಥಮ್ ಪ್ರತಿ ಹೊಸ ಪುನರಾವೃತ್ತಿಯಲ್ಲಿ ಸೆಂಟ್ರಾಯ್ಡ್ಗಳ ಚಲನೆಯು ಅಲ್ಪವಾಗುವಾಗ ಮತ್ತು ಕ್ಲಸ್ಟರ್ಗಳು ಸ್ಥಿರವಾಗುವಾಗ ನಿಲ್ಲುತ್ತದೆ.\n",
|
|
"\n",
|
|
"<div>\n",
|
|
"\n",
|
|
"> ಪ್ರಾಥಮಿಕ k ವೀಕ್ಷಣೆಗಳನ್ನು ಯಾದೃಚ್ಛಿಕವಾಗಿ ಆರಿಸುವುದರಿಂದ, ಪ್ರತಿ ಬಾರಿ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಅನ್ವಯಿಸುವಾಗ ಸ್ವಲ್ಪ ವಿಭಿನ್ನ ಫಲಿತಾಂಶಗಳನ್ನು ಪಡೆಯಬಹುದು. ಈ ಕಾರಣಕ್ಕಾಗಿ, ಹೆಚ್ಚಿನ ಆಲ್ಗಾರಿಥಮ್ಗಳು ಹಲವಾರು *ಯಾದೃಚ್ಛಿಕ ಪ್ರಾರಂಭಗಳನ್ನು* ಬಳಸುತ್ತವೆ ಮತ್ತು ಕಡಿಮೆ WCSS ಇರುವ ಪುನರಾವೃತ್ತಿಯನ್ನು ಆಯ್ಕೆಮಾಡುತ್ತವೆ. ಆದ್ದರಿಂದ, *ಅನಗತ್ಯ ಸ್ಥಳೀಯ ಗರಿಷ್ಠವನ್ನು* ತಪ್ಪಿಸಲು K-ಮೀನ್ಸ್ ಅನ್ನು ಹಲವಾರು *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-ಮೀನ್ಸ್ ಬಳಕೆಯ ಒಂದು ದುರ್ಬಲತೆ ಎಂದರೆ ನೀವು `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": [
|
|
"ಪರಿಪೂರ್ಣ, ನಾವು ನಮ್ಮ ಡೇಟಾ ಸೆಟ್ ಅನ್ನು 3 ಗುಂಪುಗಳ ಸೆಟ್ ಆಗಿ ವಿಭಜಿಸಿದ್ದೇವೆ. ಹಾಗಾದರೆ, ನಮ್ಮ ಕ್ಲಸ್ಟರಿಂಗ್ ಎಷ್ಟು ಉತ್ತಮವಾಗಿದೆ 🤷? ಬನ್ನಿ, `Silhouette score` ಅನ್ನು ನೋಡೋಣ\n",
|
|
"\n",
|
|
"### **Silhouette score**\n",
|
|
"\n",
|
|
"[Silhouette ವಿಶ್ಲೇಷಣೆ](https://en.wikipedia.org/wiki/Silhouette_(clustering)) ಫಲಿತಾಂಶ ಕ್ಲಸ್ಟರ್ಗಳ ನಡುವಿನ ವಿಭಜನೆ ದೂರವನ್ನು ಅಧ್ಯಯನ ಮಾಡಲು ಬಳಸಬಹುದು. ಈ ಸ್ಕೋರ್ -1 ರಿಂದ 1 ರವರೆಗೆ ಬದಲಾಗುತ್ತದೆ, ಮತ್ತು ಸ್ಕೋರ್ 1 ಗೆ ಹತ್ತಿರ ಇದ್ದರೆ, ಕ್ಲಸ್ಟರ್ ಗಟ್ಟಿಯಾಗಿದ್ದು ಇತರ ಕ್ಲಸ್ಟರ್ಗಳಿಂದ ಚೆನ್ನಾಗಿ ವಿಭಜಿಸಲಾಗಿದೆ. 0 ಗೆ ಹತ್ತಿರದ ಮೌಲ್ಯವು ಹತ್ತಿರದ ಕ್ಲಸ್ಟರ್ಗಳ ನಿರ್ಧಾರ ಗಡಿಬಿಡಿಯ ಬಳಿ ಮಾದರಿಗಳೊಂದಿಗೆ ಒತ್ತಡದ ಕ್ಲಸ್ಟರ್ಗಳನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತದೆ.[ಮೂಲ](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam).\n",
|
|
"\n",
|
|
"ಸರಾಸರಿ silhouette ವಿಧಾನವು ವಿಭಿನ್ನ *k* ಮೌಲ್ಯಗಳಿಗಾಗಿ ವೀಕ್ಷಣೆಗಳ ಸರಾಸರಿ silhouette ಅನ್ನು ಲೆಕ್ಕಹಾಕುತ್ತದೆ. ಉನ್ನತ ಸರಾಸರಿ silhouette ಸ್ಕೋರ್ ಉತ್ತಮ ಕ್ಲಸ್ಟರಿಂಗ್ ಅನ್ನು ಸೂಚಿಸುತ್ತದೆ.\n",
|
|
"\n",
|
|
"ಸರಾಸರಿ silhouette ಅಗಲವನ್ನು ಲೆಕ್ಕಹಾಕಲು ಕ್ಲಸ್ಟರ್ ಪ್ಯಾಕೇಜಿನ `silhouette` ಫಂಕ್ಷನ್ ಅನ್ನು ಬಳಸಬಹುದು.\n",
|
|
"\n",
|
|
"> silhouette ಅನ್ನು ಯಾವುದೇ [ದೂರ](https://en.wikipedia.org/wiki/Distance \"Distance\") ಮಾಪಕದಿಂದ ಲೆಕ್ಕಹಾಕಬಹುದು, ಉದಾಹರಣೆಗೆ ನಾವು [ಹಿಂದಿನ ಪಾಠದಲ್ಲಿ](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb) ಚರ್ಚಿಸಿದಂತೆ [ಯೂಕ್ಲಿಡಿಯನ್ ದೂರ](https://en.wikipedia.org/wiki/Euclidean_distance \"Euclidean distance\") ಅಥವಾ [ಮ್ಯಾನ್ಹ್ಯಾಟನ್ ದೂರ](https://en.wikipedia.org/wiki/Manhattan_distance \"Manhattan distance\").\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",
|
|
"ಕೆ-ಮೀನ್ಸ್ ಕ್ಲಸ್ಟರಿಂಗ್ನಲ್ಲಿ ಸಾಮಾನ್ಯವಾಗಿ ಉದ್ಭವಿಸುವ ಮೂಲಭೂತ ಪ್ರಶ್ನೆ ಇದು - ತಿಳಿದಿರುವ ವರ್ಗ ಲೇಬಲ್ಗಳಿಲ್ಲದೆ, ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಎಷ್ಟು ಕ್ಲಸ್ಟರ್ಗಳಾಗಿ ವಿಭಜಿಸಬೇಕು ಎಂದು ನೀವು ಹೇಗೆ ತಿಳಿಯಬಹುದು?\n",
|
|
"\n",
|
|
"ನಾವು ಪ್ರಯತ್ನಿಸಬಹುದಾದ ಒಂದು ವಿಧಾನವೆಂದರೆ ಡೇಟಾ ಮಾದರಿಯನ್ನು ಬಳಸಿಕೊಂಡು ಕ್ಲಸ್ಟರ್ಗಳ ಸಂಖ್ಯೆಯನ್ನು ಕ್ರಮೇಣ ಹೆಚ್ಚಿಸುವ ಮೂಲಕ (ಉದಾ: 1-10 ರವರೆಗೆ) `ಕ್ಲಸ್ಟರಿಂಗ್ ಮಾದರಿಗಳ ಸರಣಿಯನ್ನು ರಚಿಸುವುದು` ಮತ್ತು **ಸಿಲ್ಹೌಟ್ ಸ್ಕೋರ್** ಮುಂತಾದ ಕ್ಲಸ್ಟರಿಂಗ್ ಮೆಟ್ರಿಕ್ಸ್ಗಳನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡುವುದು.\n",
|
|
"\n",
|
|
"ವಿಭಿನ್ನ *k* ಮೌಲ್ಯಗಳಿಗಾಗಿ ಕ್ಲಸ್ಟರಿಂಗ್ ಆಲ್ಗೋರಿದಮ್ ಅನ್ನು ಗಣನೆ ಮಾಡಿ ಮತ್ತು **ವಿಥಿನ್ ಕ್ಲಸ್ಟರ್ ಸಮ್ ಆಫ್ ಸ್ಕ್ವೇರ್ಸ್** (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": [
|
|
"ಚಿತ್ರವು ಕ್ಲಸ್ಟರ್ಗಳ ಸಂಖ್ಯೆ ಒಂದುರಿಂದ ಎರಡುಕ್ಕೆ ಹೆಚ್ಚಾದಂತೆ WCSS ನಲ್ಲಿ ದೊಡ್ಡ ಕಡಿತವನ್ನು ತೋರಿಸುತ್ತದೆ (ಹೀಗಾಗಿ ಹೆಚ್ಚು *ದೃಢತೆ*), ಮತ್ತು ಎರಡುರಿಂದ ಮೂರು ಕ್ಲಸ್ಟರ್ಗಳಿಗೆ ಮತ್ತಷ್ಟು ಗಮನಾರ್ಹ ಕಡಿತವನ್ನು ತೋರಿಸುತ್ತದೆ. ಅದಾದ ಮೇಲೆ, ಕಡಿತವು ಕಡಿಮೆ ಸ್ಪಷ್ಟವಾಗುತ್ತದೆ, ಫಲವಾಗಿ ಚಾರ್ಟ್ನಲ್ಲಿ ಸುಮಾರು ಮೂರು ಕ್ಲಸ್ಟರ್ಗಳ ಬಳಿ `ಎಲ್ಬೋ` 💪 ಕಾಣಿಸುತ್ತದೆ. ಇದು ಡೇಟಾ ಪಾಯಿಂಟ್ಗಳ ಎರಡು ರಿಂದ ಮೂರು ಸಮರ್ಪಕವಾಗಿ ವಿಭಜಿತ ಕ್ಲಸ್ಟರ್ಗಳಿರುವ ಉತ್ತಮ ಸೂಚನೆ.\n",
|
|
"\n",
|
|
"ನಾವು ಈಗ ಮುಂದುವರಿದು `k = 3` ಇರುವ ಕ್ಲಸ್ಟರಿಂಗ್ ಮಾದರಿಯನ್ನು ಹೊರತೆಗೆಯಬಹುದು:\n",
|
|
"\n",
|
|
"> `pull()`: ಒಂದು ಕಾಲಮ್ ಅನ್ನು ಹೊರತೆಗೆಯಲು ಬಳಸಲಾಗುತ್ತದೆ\n",
|
|
">\n",
|
|
"> `pluck()`: ಪಟ್ಟಿಗಳಂತಹ ಡೇಟಾ ರಚನೆಗಳನ್ನು ಸೂಚಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ\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 ಕ್ಲಸ್ಟರಿಂಗ್ಗೆ ಸೂಕ್ತವಾಗಿಲ್ಲದಿರಬಹುದು. ಈ ಡೇಟಾ ತುಂಬಾ ಅಸಮತೋಲನವಾಗಿದೆ, ತುಂಬಾ ಕಡಿಮೆ ಸಂಬಂಧಿತವಾಗಿದೆ ಮತ್ತು ಕಾಲಮ್ ಮೌಲ್ಯಗಳ ನಡುವೆ ತುಂಬಾ ವ್ಯತ್ಯಾಸವಿದೆ, ಆದ್ದರಿಂದ ಚೆನ್ನಾಗಿ ಕ್ಲಸ್ಟರ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ವಾಸ್ತವದಲ್ಲಿ, ರೂಪುಗೊಂಡಿರುವ ಕ್ಲಸ್ಟರ್ಗಳು ಮೇಲಿನ ಮೂರು ಜಾನರ್ ವರ್ಗಗಳಿಂದ ಬಹುಮಟ್ಟಿಗೆ ಪ್ರಭಾವಿತವಾಗಿವೆ ಅಥವಾ ತಿರುವು ಹೊಂದಿವೆ.\n",
|
|
"\n",
|
|
"ಆದರೂ, ಅದು ತುಂಬಾ ಕಲಿಕೆಯ ಪ್ರಕ್ರಿಯೆಯಾಗಿದೆ!\n",
|
|
"\n",
|
|
"Scikit-learn ನ ಡಾಕ್ಯುಮೆಂಟೇಶನ್ನಲ್ಲಿ, ನೀವು ಈ ಮಾದರಿಯಂತಹ, ಚೆನ್ನಾಗಿ ವಿಭಜಿಸಲ್ಪಟ್ಟಿಲ್ಲದ ಕ್ಲಸ್ಟರ್ಗಳಿರುವ ಮಾದರಿಯು 'ವ್ಯತ್ಯಾಸ' ಸಮಸ್ಯೆಯನ್ನು ಹೊಂದಿದೆ ಎಂದು ನೋಡಬಹುದು:\n",
|
|
"\n",
|
|
"<p >\n",
|
|
" <img src=\"../../../../../../translated_images/kn/problems.f7fb539ccd80608e.webp\"\n",
|
|
" width=\"500\"/>\n",
|
|
" <figcaption>Scikit-learn ನಿಂದ ಇನ್ಫೋಗ್ರಾಫಿಕ್</figcaption>\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"## **ವ್ಯತ್ಯಾಸ**\n",
|
|
"\n",
|
|
"ವ್ಯತ್ಯಾಸವನ್ನು \"ಸರಾಸರಿ ಮೌಲ್ಯದಿಂದ ಚದರ ವ್ಯತ್ಯಾಸಗಳ ಸರಾಸರಿ\" ಎಂದು ವ್ಯಾಖ್ಯಾನಿಸಲಾಗಿದೆ [ಮೂಲ](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",
|
|
"- [ಟ್ರೇನ್ ಮತ್ತು ಮೌಲ್ಯಮಾಪನ ಕ್ಲಸ್ಟರಿಂಗ್ ಮಾದರಿಗಳು](https://rpubs.com/eR_ic/clustering) ಟಿಡಿಮೋಡಲ್ಸ್ ಮತ್ತು ಸ್ನೇಹಿತರು ಬಳಸಿ\n",
|
|
"\n",
|
|
"- [K-means ಕ್ಲಸ್ಟರ್ ವಿಶ್ಲೇಷಣೆ](https://uc-r.github.io/kmeans_clustering), ಯುಸಿ ಬಿಸಿನೆಸ್ ಅನಾಲಿಟಿಕ್ಸ್ R ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಗೈಡ್\n",
|
|
"\n",
|
|
"- [ಟಿಡಿ ಡೇಟಾ ತತ್ವಗಳೊಂದಿಗೆ K-means ಕ್ಲಸ್ಟರಿಂಗ್](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",
|
|
"[ಜೆನ್ ಲೂಪರ್](https://www.twitter.com/jenlooper) ಈ ಮಾದರಿಯ ಮೂಲ ಪೈಥಾನ್ ಆವೃತ್ತಿಯನ್ನು ರಚಿಸಿದವರಿಗೆ ♥️\n",
|
|
"\n",
|
|
"[`ಅಲಿಸನ್ ಹೋರ್ಸ್ಟ್`](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",
|
|
"[ಎರಿಕ್](https://twitter.com/ericntay), ಗೋಲ್ಡ್ ಮೈಕ್ರೋಸಾಫ್ಟ್ ಲರ್ನ್ ವಿದ್ಯಾರ್ಥಿ ರಾಯಭಾರಿ.\n",
|
|
"\n",
|
|
"<p >\n",
|
|
" <img src=\"../../../../../../translated_images/kn/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"
|
|
]
|
|
}
|
|
]
|
|
} |