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.
654 lines
42 KiB
654 lines
42 KiB
{
|
|
"nbformat": 4,
|
|
"nbformat_minor": 0,
|
|
"metadata": {
|
|
"colab": {
|
|
"name": "lesson_12-R.ipynb",
|
|
"provenance": [],
|
|
"collapsed_sections": []
|
|
},
|
|
"kernelspec": {
|
|
"name": "ir",
|
|
"display_name": "R"
|
|
},
|
|
"language_info": {
|
|
"name": "R"
|
|
},
|
|
"coopTranslator": {
|
|
"original_hash": "fab50046ca413a38939d579f8432274f",
|
|
"translation_date": "2025-12-19T17:17:48+00:00",
|
|
"source_file": "4-Classification/3-Classifiers-2/solution/R/lesson_12-R.ipynb",
|
|
"language_code": "kn"
|
|
}
|
|
},
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "jsFutf_ygqSx"
|
|
},
|
|
"source": [
|
|
"# ವರ್ಗೀಕರಣ ಮಾದರಿ ನಿರ್ಮಿಸಿ: ರುಚಿಕರ ಏಷ್ಯನ್ ಮತ್ತು ಭಾರತೀಯ ಆಹಾರಗಳು\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "HD54bEefgtNO"
|
|
},
|
|
"source": [
|
|
"## ಆಹಾರ ವರ್ಗೀಕರಣಗಳು 2\n",
|
|
"\n",
|
|
"ಈ ಎರಡನೇ ವರ್ಗೀಕರಣ ಪಾಠದಲ್ಲಿ, ನಾವು ವರ್ಗೀಕೃತ ಡೇಟಾವನ್ನು ವರ್ಗೀಕರಿಸುವ `ಹೆಚ್ಚು ವಿಧಾನಗಳನ್ನು` ಅನ್ವೇಷಿಸುವೆವು. ನಾವು ಒಂದು ವರ್ಗೀಕರಣಕಾರಿಯನ್ನು ಮತ್ತೊಂದರ ಮೇಲೆ ಆಯ್ಕೆಮಾಡುವ ಪರಿಣಾಮಗಳ ಬಗ್ಗೆ ಸಹ ತಿಳಿಯುವೆವು.\n",
|
|
"\n",
|
|
"### [**ಪೂರ್ವ-ಪಾಠ ಪ್ರಶ್ನೋತ್ತರ**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/23/)\n",
|
|
"\n",
|
|
"### **ಪೂರ್ವಾಪೇಕ್ಷಿತ**\n",
|
|
"\n",
|
|
"ನಾವು ಹಿಂದಿನ ಪಾಠಗಳನ್ನು ಪೂರ್ಣಗೊಳಿಸಿದ್ದೀರಿ ಎಂದು ಊಹಿಸುತ್ತೇವೆ ಏಕೆಂದರೆ ನಾವು ಹಿಂದಿನ ಪಾಠಗಳಲ್ಲಿ ಕಲಿತ ಕೆಲವು ತತ್ವಗಳನ್ನು ಮುಂದುವರಿಸುವೆವು.\n",
|
|
"\n",
|
|
"ಈ ಪಾಠಕ್ಕಾಗಿ, ನಾವು ಕೆಳಗಿನ ಪ್ಯಾಕೇಜುಗಳನ್ನು ಅಗತ್ಯವಿದೆ:\n",
|
|
"\n",
|
|
"- `tidyverse`: [tidyverse](https://www.tidyverse.org/) ಒಂದು [R ಪ್ಯಾಕೇಜುಗಳ ಸಂಗ್ರಹ](https://www.tidyverse.org/packages) ಆಗಿದ್ದು, ಡೇಟಾ ವಿಜ್ಞಾನವನ್ನು ವೇಗವಾಗಿ, ಸುಲಭವಾಗಿ ಮತ್ತು ಹೆಚ್ಚು ಮನರಂಜನೀಯವಾಗಿ ಮಾಡುತ್ತದೆ!\n",
|
|
"\n",
|
|
"- `tidymodels`: [tidymodels](https://www.tidymodels.org/) ಫ್ರೇಮ್ವರ್ಕ್ ಒಂದು [ಪ್ಯಾಕೇಜುಗಳ ಸಂಗ್ರಹ](https://www.tidymodels.org/packages/) ಆಗಿದ್ದು, ಮಾದರೀಕರಣ ಮತ್ತು ಯಂತ್ರ ಅಧ್ಯಯನಕ್ಕಾಗಿ.\n",
|
|
"\n",
|
|
"- `themis`: [themis ಪ್ಯಾಕೇಜ್](https://themis.tidymodels.org/) ಅಸಮತೋಲನ ಡೇಟಾವನ್ನು ನಿರ್ವಹಿಸಲು ಹೆಚ್ಚುವರಿ ರೆಸಿಪಿ ಹಂತಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ.\n",
|
|
"\n",
|
|
"ನೀವು ಅವುಗಳನ್ನು ಇನ್ಸ್ಟಾಲ್ ಮಾಡಬಹುದು:\n",
|
|
"\n",
|
|
"`install.packages(c(\"tidyverse\", \"tidymodels\", \"kernlab\", \"themis\", \"ranger\", \"xgboost\", \"kknn\"))`\n",
|
|
"\n",
|
|
"ಬದಲಾಗಿ, ಕೆಳಗಿನ ಸ್ಕ್ರಿಪ್ಟ್ ಈ ಮಾಯಾಜಾಲವನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಅಗತ್ಯವಿರುವ ಪ್ಯಾಕೇಜುಗಳಿದ್ದರೆ ಪರಿಶೀಲಿಸಿ, ಅವು ಇಲ್ಲದಿದ್ದರೆ ನಿಮ್ಮಿಗಾಗಿ ಅವುಗಳನ್ನು ಇನ್ಸ್ಟಾಲ್ ಮಾಡುತ್ತದೆ.\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "vZ57IuUxgyQt"
|
|
},
|
|
"source": [
|
|
"suppressWarnings(if (!require(\"pacman\"))install.packages(\"pacman\"))\n",
|
|
"\n",
|
|
"pacman::p_load(tidyverse, tidymodels, themis, kernlab, ranger, xgboost, kknn)"
|
|
],
|
|
"execution_count": null,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "z22M-pj4g07x"
|
|
},
|
|
"source": [
|
|
"Now, let's hit the ground running!\n",
|
|
"\n",
|
|
"## **1. ವರ್ಗೀಕರಣ ನಕ್ಷೆ**\n",
|
|
"\n",
|
|
"ನಮ್ಮ [ಹಿಂದಿನ ಪಾಠದಲ್ಲಿ](https://github.com/microsoft/ML-For-Beginners/tree/main/4-Classification/2-Classifiers-1), ನಾವು ಈ ಪ್ರಶ್ನೆಯನ್ನು ಪರಿಹರಿಸಲು ಪ್ರಯತ್ನಿಸಿದ್ದೇವೆ: ನಾವು ಹಲವಾರು ಮಾದರಿಗಳಲ್ಲಿ ಹೇಗೆ ಆಯ್ಕೆ ಮಾಡಬೇಕು? ಬಹುಮಟ್ಟಿಗೆ, ಇದು ಡೇಟಾದ ಲಕ್ಷಣಗಳು ಮತ್ತು ನಾವು ಪರಿಹರಿಸಲು ಬಯಸುವ ಸಮಸ್ಯೆಯ ಪ್ರಕಾರ (ಉದಾಹರಣೆಗೆ ವರ್ಗೀಕರಣ ಅಥವಾ ರಿಗ್ರೆಶನ್?) ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆ.\n",
|
|
"\n",
|
|
"ಹಿಂದೆ, ನಾವು ಮೈಕ್ರೋಸಾಫ್ಟ್ನ ಚೀಟ್ ಶೀಟ್ ಬಳಸಿ ಡೇಟಾವನ್ನು ವರ್ಗೀಕರಿಸುವಾಗ ನಿಮಗೆ ಇರುವ ವಿವಿಧ ಆಯ್ಕೆಗಳನ್ನು ಕಲಿತಿದ್ದೇವೆ. ಪೈಥಾನ್ನ ಮೆಷಿನ್ ಲರ್ನಿಂಗ್ ಫ್ರೇಮ್ವರ್ಕ್, ಸ್ಕಿಕಿಟ್-ಲರ್ನ್, ಸಮಾನವಾದ ಆದರೆ ಹೆಚ್ಚು ಸೂಕ್ಷ್ಮ ಚೀಟ್ ಶೀಟ್ ಅನ್ನು ನೀಡುತ್ತದೆ, ಇದು ನಿಮ್ಮ ಅಂದಾಜುಕಾರರನ್ನು (ಮತ್ತೊಂದು ಪದದಲ್ಲಿ ವರ್ಗೀಕರಣಕಾರರು) ಇನ್ನಷ್ಟು ಸೀಮಿತಗೊಳಿಸಲು ಸಹಾಯ ಮಾಡಬಹುದು:\n",
|
|
"\n",
|
|
"<p >\n",
|
|
" <img src=\"../../../../../../translated_images/kn/map.e963a6a51349425a.webp\"\n",
|
|
" width=\"700\"/>\n",
|
|
" <figcaption></figcaption>\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "u1i3xRIVg7vG"
|
|
},
|
|
"source": [
|
|
"> ಟಿಪ್: [ಈ ನಕ್ಷೆಯನ್ನು ಆನ್ಲೈನ್ನಲ್ಲಿ ಭೇಟಿ ನೀಡಿ](https://scikit-learn.org/stable/tutorial/machine_learning_map/) ಮತ್ತು ದಾರಿಯಲ್ಲಿ ಕ್ಲಿಕ್ ಮಾಡಿ ಡಾಕ್ಯುಮೆಂಟೇಶನ್ ಓದಿರಿ.\n",
|
|
">\n",
|
|
"> [Tidymodels ರೆಫರೆನ್ಸ್ ಸೈಟ್](https://www.tidymodels.org/find/parsnip/#models) ವಿವಿಧ ಮಾದರಿಗಳ ಬಗ್ಗೆ ಅತ್ಯುತ್ತಮ ಡಾಕ್ಯುಮೆಂಟೇಶನ್ ಅನ್ನು ಒದಗಿಸುತ್ತದೆ.\n",
|
|
"\n",
|
|
"### **ಯೋಜನೆ** 🗺️\n",
|
|
"\n",
|
|
"ನಿಮ್ಮ ಡೇಟಾ ಬಗ್ಗೆ ಸ್ಪಷ್ಟವಾದ ಅರ್ಥವಿದ್ದಾಗ ಈ ನಕ್ಷೆ ಬಹಳ ಸಹಾಯಕವಾಗುತ್ತದೆ, ಏಕೆಂದರೆ ನೀವು ನಿರ್ಧಾರಕ್ಕೆ ದಾರಿಯ ಮೇಲೆ 'ನಡೆದಾಡಬಹುದು':\n",
|
|
"\n",
|
|
"- ನಮಗೆ \\>50 ಮಾದರಿಗಳು ಇವೆ\n",
|
|
"\n",
|
|
"- ನಾವು ಒಂದು ವರ್ಗವನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಬೇಕಾಗಿದೆ\n",
|
|
"\n",
|
|
"- ನಮಗೆ ಲೇಬಲ್ ಮಾಡಲಾದ ಡೇಟಾ ಇದೆ\n",
|
|
"\n",
|
|
"- ನಮಗೆ 100K ಕ್ಕಿಂತ ಕಡಿಮೆ ಮಾದರಿಗಳು ಇವೆ\n",
|
|
"\n",
|
|
"- ✨ ನಾವು ಲೀನಿಯರ್ SVC ಆಯ್ಕೆ ಮಾಡಬಹುದು\n",
|
|
"\n",
|
|
"- ಅದು ಕೆಲಸ ಮಾಡದಿದ್ದರೆ, ಏಕೆಂದರೆ ನಮಗೆ ಸಂಖ್ಯಾತ್ಮಕ ಡೇಟಾ ಇದೆ\n",
|
|
"\n",
|
|
" - ನಾವು ✨ KNeighbors ವರ್ಗೀಕರಣವನ್ನು ಪ್ರಯತ್ನಿಸಬಹುದು\n",
|
|
"\n",
|
|
" - ಅದು ಕೆಲಸ ಮಾಡದಿದ್ದರೆ, ✨ SVC ಮತ್ತು ✨ ಎನ್ಸೆಂಬಲ್ ವರ್ಗೀಕರಣಗಳನ್ನು ಪ್ರಯತ್ನಿಸಿ\n",
|
|
"\n",
|
|
"ಇದು ಅನುಸರಿಸಲು ಬಹಳ ಸಹಾಯಕ ದಾರಿಯಾಗಿದೆ. ಈಗ, [tidymodels](https://www.tidymodels.org/) ಮಾದರೀಕರಣ ಫ್ರೇಮ್ವರ್ಕ್ ಬಳಸಿ ನೇರವಾಗಿ ಪ್ರಾರಂಭಿಸೋಣ: ಇದು ಉತ್ತಮ ಸಂಖ್ಯಾಶಾಸ್ತ್ರೀಯ ಅಭ್ಯಾಸವನ್ನು ಉತ್ತೇಜಿಸಲು ಅಭಿವೃದ್ಧಿಪಡಿಸಲಾದ R ಪ್ಯಾಕೇಜುಗಳ ಸತತ ಮತ್ತು ಲವಚಿಕ ಸಂಗ್ರಹ 😊.\n",
|
|
"\n",
|
|
"## 2. ಡೇಟಾವನ್ನು ವಿಭಜಿಸಿ ಮತ್ತು ಅಸಮತೋಲನ ಡೇಟಾ ಸೆಟ್ ಅನ್ನು ನಿರ್ವಹಿಸಿ.\n",
|
|
"\n",
|
|
"ನಮ್ಮ ಹಿಂದಿನ ಪಾಠಗಳಿಂದ, ನಮ್ಮ ಆಹಾರ ಶೈಲಿಗಳಲ್ಲಿ ಸಾಮಾನ್ಯ ಪದಾರ್ಥಗಳ ಒಂದು ಸೆಟ್ ಇದ್ದವು ಎಂದು ಕಲಿತೆವು. ಜೊತೆಗೆ, ಆಹಾರ ಶೈಲಿಗಳ ಸಂಖ್ಯೆಯಲ್ಲಿ ಅಸಮತೋಲನ ವಿತರಣೆಯೂ ಇತ್ತು.\n",
|
|
"\n",
|
|
"ನಾವು ಈ ಕೆಳಗಿನ ಮೂಲಕ ಈ ಸಮಸ್ಯೆಗಳನ್ನು ನಿರ್ವಹಿಸುವೆವು\n",
|
|
"\n",
|
|
"- ವಿಭಿನ್ನ ಆಹಾರ ಶೈಲಿಗಳ ನಡುವೆ ಗೊಂದಲ ಉಂಟುಮಾಡುವ ಅತ್ಯಂತ ಸಾಮಾನ್ಯ ಪದಾರ್ಥಗಳನ್ನು `dplyr::select()` ಬಳಸಿ ತೆಗೆದುಹಾಕುವುದು.\n",
|
|
"\n",
|
|
"- `over-sampling` ಆಲ್ಗಾರಿದಮ್ ಅನ್ನು ಅನ್ವಯಿಸುವ ಮೂಲಕ ಮಾದರೀಕರಣಕ್ಕೆ ಸಿದ್ಧವಾಗಲು ಡೇಟಾವನ್ನು ಪೂರ್ವಸಿದ್ಧಗೊಳಿಸುವ `recipe` ಅನ್ನು ಬಳಸುವುದು.\n",
|
|
"\n",
|
|
"ನಾವು ಈ ಮೇಲಿನ ವಿಷಯಗಳನ್ನು ಹಿಂದಿನ ಪಾಠದಲ್ಲಿ ಈಗಾಗಲೇ ನೋಡಿದ್ದೇವೆ ಆದ್ದರಿಂದ ಇದು ಸುಲಭವಾಗಿರುತ್ತದೆ 🥳!\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "6tj_rN00hClA"
|
|
},
|
|
"source": [
|
|
"# Load the core Tidyverse and Tidymodels packages\n",
|
|
"library(tidyverse)\n",
|
|
"library(tidymodels)\n",
|
|
"\n",
|
|
"# Load the original cuisines data\n",
|
|
"df <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/4-Classification/data/cuisines.csv\")\n",
|
|
"\n",
|
|
"# Drop id column, rice, garlic and ginger from our original data set\n",
|
|
"df_select <- df %>% \n",
|
|
" select(-c(1, rice, garlic, ginger)) %>%\n",
|
|
" # Encode cuisine column as categorical\n",
|
|
" mutate(cuisine = factor(cuisine))\n",
|
|
"\n",
|
|
"\n",
|
|
"# Create data split specification\n",
|
|
"set.seed(2056)\n",
|
|
"cuisines_split <- initial_split(data = df_select,\n",
|
|
" strata = cuisine,\n",
|
|
" prop = 0.7)\n",
|
|
"\n",
|
|
"# Extract the data in each split\n",
|
|
"cuisines_train <- training(cuisines_split)\n",
|
|
"cuisines_test <- testing(cuisines_split)\n",
|
|
"\n",
|
|
"# Display distribution of cuisines in the training set\n",
|
|
"cuisines_train %>% \n",
|
|
" count(cuisine) %>% \n",
|
|
" arrange(desc(n))"
|
|
],
|
|
"execution_count": null,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "zFin5yw3hHb1"
|
|
},
|
|
"source": [
|
|
"### ಅಸಮತೋಲಿತ ಡೇಟಾ ನಿರ್ವಹಣೆ\n",
|
|
"\n",
|
|
"ಅಸಮತೋಲಿತ ಡೇಟಾ ಸಾಮಾನ್ಯವಾಗಿ ಮಾದರಿ ಕಾರ್ಯಕ್ಷಮತೆಯ ಮೇಲೆ ನಕಾರಾತ್ಮಕ ಪರಿಣಾಮಗಳನ್ನು ಉಂಟುಮಾಡುತ್ತದೆ. ಗಮನಾರ್ಹ ಸಂಖ್ಯೆಯ ವೀಕ್ಷಣೆಗಳು ಸಮಾನವಾಗಿರುವಾಗ ಬಹುತೇಕ ಮಾದರಿಗಳು ಉತ್ತಮವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ ಮತ್ತು ಆದ್ದರಿಂದ ಅಸಮತೋಲಿತ ಡೇಟಾ ಜೊತೆ ಹೋರಾಡುತ್ತವೆ.\n",
|
|
"\n",
|
|
"ಅಸಮತೋಲಿತ ಡೇಟಾ ಸೆಟ್ಗಳನ್ನು ನಿರ್ವಹಿಸುವ ಎರಡು ಪ್ರಮುಖ ವಿಧಾನಗಳಿವೆ:\n",
|
|
"\n",
|
|
"- ಅಲ್ಪಸಂಖ್ಯಾತ ವರ್ಗಕ್ಕೆ ವೀಕ್ಷಣೆಗಳನ್ನು ಸೇರಿಸುವುದು: `ಓವರ್-ಸ್ಯಾಂಪ್ಲಿಂಗ್` ಉದಾಹರಣೆಗೆ SMOTE ಆಲ್ಗಾರಿದಮ್ ಬಳಸಿ, ಇದು ಅಲ್ಪಸಂಖ್ಯಾತ ವರ್ಗದ ಹೊಸ ಉದಾಹರಣೆಗಳನ್ನು ಸಮೀಪದ ನೆರೆಹೊರೆಯವರನ್ನು ಬಳಸಿ ಸೃಷ್ಟಿಸುತ್ತದೆ.\n",
|
|
"\n",
|
|
"- ಬಹುಸಂಖ್ಯಾತ ವರ್ಗದಿಂದ ವೀಕ್ಷಣೆಗಳನ್ನು ತೆಗೆದುಹಾಕುವುದು: `ಅಂಡರ್-ಸ್ಯಾಂಪ್ಲಿಂಗ್`\n",
|
|
"\n",
|
|
"ನಮ್ಮ ಹಿಂದಿನ ಪಾಠದಲ್ಲಿ, ನಾವು `ರೆಸಿಪಿ` ಬಳಸಿ ಅಸಮತೋಲಿತ ಡೇಟಾ ಸೆಟ್ಗಳನ್ನು ಹೇಗೆ ನಿರ್ವಹಿಸುವುದನ್ನು ತೋರಿಸಿದ್ದೇವೆ. ರೆಸಿಪಿ ಎಂದರೆ ಡೇಟಾ ವಿಶ್ಲೇಷಣೆಗೆ ಸಿದ್ಧವಾಗಲು ಡೇಟಾ ಸೆಟ್ಗೆ ಯಾವ ಹಂತಗಳನ್ನು ಅನ್ವಯಿಸಬೇಕು ಎಂದು ವಿವರಿಸುವ ಬ್ಲೂಪ್ರಿಂಟ್ ಎಂದು ಪರಿಗಣಿಸಬಹುದು. ನಮ್ಮ ಪ್ರಕರಣದಲ್ಲಿ, ನಾವು ನಮ್ಮ `ಪ್ರಶಿಕ್ಷಣ ಸೆಟ್`ಗಾಗಿ ನಮ್ಮ ಆಹಾರವರ್ಗಗಳ ಸಂಖ್ಯೆಯಲ್ಲಿ ಸಮಾನ ವಿತರಣೆ ಇರಬೇಕೆಂದು ಬಯಸುತ್ತೇವೆ. ಬನ್ನಿ, ಅದಕ್ಕೆ ನೇರವಾಗಿ ಹೋಗೋಣ.\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "cRzTnHolhLWd"
|
|
},
|
|
"source": [
|
|
"# Load themis package for dealing with imbalanced data\n",
|
|
"library(themis)\n",
|
|
"\n",
|
|
"# Create a recipe for preprocessing training data\n",
|
|
"cuisines_recipe <- recipe(cuisine ~ ., data = cuisines_train) %>%\n",
|
|
" step_smote(cuisine) \n",
|
|
"\n",
|
|
"# Print recipe\n",
|
|
"cuisines_recipe"
|
|
],
|
|
"execution_count": null,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "KxOQ2ORhhO81"
|
|
},
|
|
"source": [
|
|
"ಈಗ ನಾವು ಮಾದರಿಗಳನ್ನು ತರಬೇತಿಗೆ ಸಿದ್ಧರಾಗಿದ್ದೇವೆ 👩💻👨💻!\n",
|
|
"\n",
|
|
"## 3. ಬಹುಪದೀಯ ರಿಗ್ರೆಶನ್ ಮಾದರಿಗಳಿಗಿಂತ ಮುಂದೆ\n",
|
|
"\n",
|
|
"ನಮ್ಮ ಹಿಂದಿನ ಪಾಠದಲ್ಲಿ, ನಾವು ಬಹುಪದೀಯ ರಿಗ್ರೆಶನ್ ಮಾದರಿಗಳನ್ನು ನೋಡಿದ್ದೇವೆ. ವರ್ಗೀಕರಣಕ್ಕಾಗಿ ಇನ್ನಷ್ಟು ಲವಚಿಕ ಮಾದರಿಗಳನ್ನು ಅನ್ವೇಷಿಸೋಣ.\n",
|
|
"\n",
|
|
"### ಸಪೋರ್ಟ್ ವೆಕ್ಟರ್ ಮೆಷೀನ್ಸ್.\n",
|
|
"\n",
|
|
"ವರ್ಗೀಕರಣದ ಸಂದರ್ಭದಲ್ಲಿ, `ಸಪೋರ್ಟ್ ವೆಕ್ಟರ್ ಮೆಷೀನ್ಸ್` ಎಂಬುದು ಒಂದು ಯಂತ್ರ ಅಧ್ಯಯನ ತಂತ್ರಜ್ಞಾನವಾಗಿದ್ದು, ವರ್ಗಗಳನ್ನು \"ಉತ್ತಮವಾಗಿ\" ವಿಭಜಿಸುವ *ಹೈಪರ್ಪ್ಲೇನ್* ಅನ್ನು ಹುಡುಕಲು ಪ್ರಯತ್ನಿಸುತ್ತದೆ. ಸರಳ ಉದಾಹರಣೆಯನ್ನು ನೋಡೋಣ:\n",
|
|
"\n",
|
|
"<p >\n",
|
|
" <img src=\"../../../../../../translated_images/kn/svm.621ae7b516d678e0.webp\"\n",
|
|
" width=\"300\"/>\n",
|
|
" <figcaption>https://commons.wikimedia.org/w/index.php?curid=22877598</figcaption>\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "C4Wsd0vZhXYu"
|
|
},
|
|
"source": [
|
|
"H1~ ವರ್ಗಗಳನ್ನು ವಿಭಜಿಸುವುದಿಲ್ಲ. H2~ ವಿಭಜಿಸುತ್ತದೆ, ಆದರೆ ಸಣ್ಣ ಮಾರ್ಜಿನ್ನೊಂದಿಗೆ ಮಾತ್ರ. H3~ ಅವುಗಳನ್ನು ಗರಿಷ್ಠ ಮಾರ್ಜಿನ್ನೊಂದಿಗೆ ವಿಭಜಿಸುತ್ತದೆ.\n",
|
|
"\n",
|
|
"#### ಲೀನಿಯರ್ ಸಪೋರ್ಟ್ ವೆಕ್ಟರ್ ಕ್ಲಾಸಿಫೈಯರ್\n",
|
|
"\n",
|
|
"ಸಪೋರ್ಟ್-ವೆಕ್ಟರ್ ಕ್ಲಸ್ಟರಿಂಗ್ (SVC) ಎಂಎಲ್ ತಂತ್ರಜ್ಞಾನಗಳ ಸಪೋರ್ಟ್-ವೆಕ್ಟರ್ ಯಂತ್ರಗಳ ಕುಟುಂಬದ ಒಂದು ಶಾಖೆಯಾಗಿದೆ. SVC ನಲ್ಲಿ, ಹೈಪರ್ಪ್ಲೇನ್ ಅನ್ನು ತರಬೇತಿ ಅವಲೋಕನಗಳ `ಬಹುತೇಕ` ಸರಿಯಾಗಿ ವಿಭಜಿಸಲು ಆಯ್ಕೆಮಾಡಲಾಗುತ್ತದೆ, ಆದರೆ ಕೆಲವು ಅವಲೋಕನಗಳನ್ನು `ತಪ್ಪಾಗಿ ವರ್ಗೀಕರಿಸಬಹುದು`. ಕೆಲವು ಬಿಂದುಗಳನ್ನು ತಪ್ಪು ಬದಿಯಲ್ಲಿ ಇರಲು ಅನುಮತಿಸುವ ಮೂಲಕ, SVM ಔಟ್ಲೈಯರ್ಗಳಿಗೆ ಹೆಚ್ಚು ಪ್ರತಿರೋಧಕವಾಗುತ್ತದೆ ಮತ್ತು ಹೀಗಾಗಿ ಹೊಸ ಡೇಟಾಗೆ ಉತ್ತಮ ಸಾಮಾನ್ಯೀಕರಣವನ್ನು ನೀಡುತ್ತದೆ. ಈ ಉಲ್ಲಂಘನೆಯನ್ನು ನಿಯಂತ್ರಿಸುವ ಪರಿಮಾಣವನ್ನು `cost` ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ, ಇದರ ಡೀಫಾಲ್ಟ್ ಮೌಲ್ಯ 1 ಆಗಿದೆ (`help(\"svm_poly\")` ನೋಡಿ).\n",
|
|
"\n",
|
|
"ಪೋಲಿನೋಮಿಯಲ್ SVM ಮಾದರಿಯಲ್ಲಿ `degree = 1` ಅನ್ನು ಹೊಂದಿಸಿ ಲೀನಿಯರ್ SVC ಅನ್ನು ರಚಿಸೋಣ.\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "vJpp6nuChlBz"
|
|
},
|
|
"source": [
|
|
"# Make a linear SVC specification\n",
|
|
"svc_linear_spec <- svm_poly(degree = 1) %>% \n",
|
|
" set_engine(\"kernlab\") %>% \n",
|
|
" set_mode(\"classification\")\n",
|
|
"\n",
|
|
"# Bundle specification and recipe into a worklow\n",
|
|
"svc_linear_wf <- workflow() %>% \n",
|
|
" add_recipe(cuisines_recipe) %>% \n",
|
|
" add_model(svc_linear_spec)\n",
|
|
"\n",
|
|
"# Print out workflow\n",
|
|
"svc_linear_wf"
|
|
],
|
|
"execution_count": null,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "rDs8cWNkhoqu"
|
|
},
|
|
"source": [
|
|
"ಈಗ ನಾವು ಪೂರ್ವಸಿದ್ಧತೆ ಹಂತಗಳು ಮತ್ತು ಮಾದರಿ ನಿರ್ದಿಷ್ಟೀಕರಣವನ್ನು *ಕಾರ್ಯಪ್ರವಾಹ*ದಲ್ಲಿ ಸೆರೆಹಿಡಿದಿದ್ದೇವೆ, ನಾವು ಲೀನಿಯರ್ SVC ಅನ್ನು ತರಬೇತುಗೊಳಿಸಿ ಫಲಿತಾಂಶಗಳನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡಬಹುದು. ಕಾರ್ಯಕ್ಷಮತೆ ಮೌಲ್ಯಮಾಪಕಗಳಿಗಾಗಿ, ನಾವು ಈ ಕೆಳಗಿನವುಗಳನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡುವ ಮೌಲ್ಯಮಾಪಕ ಸೆಟ್ ಅನ್ನು ರಚಿಸೋಣ: `accuracy`, `sensitivity`, `Positive Predicted Value` ಮತ್ತು `F Measure`\n",
|
|
"\n",
|
|
"> `augment()` ನೀಡಲಾದ ಡೇಟಾಗೆ ಭವಿಷ್ಯವಾಣಿಗಳಿಗಾಗಿ ಕಾಲಮ್(ಗಳು) ಸೇರಿಸುತ್ತದೆ.\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "81wiqcwuhrnq"
|
|
},
|
|
"source": [
|
|
"# Train a linear SVC model\n",
|
|
"svc_linear_fit <- svc_linear_wf %>% \n",
|
|
" fit(data = cuisines_train)\n",
|
|
"\n",
|
|
"# Create a metric set\n",
|
|
"eval_metrics <- metric_set(ppv, sens, accuracy, f_meas)\n",
|
|
"\n",
|
|
"\n",
|
|
"# Make predictions and Evaluate model performance\n",
|
|
"svc_linear_fit %>% \n",
|
|
" augment(new_data = cuisines_test) %>% \n",
|
|
" eval_metrics(truth = cuisine, estimate = .pred_class)"
|
|
],
|
|
"execution_count": null,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "0UFQvHf-huo3"
|
|
},
|
|
"source": [
|
|
"#### ಸಪೋರ್ಟ್ ವೆಕ್ಟರ್ ಮೆಷಿನ್\n",
|
|
"\n",
|
|
"ಸಪೋರ್ಟ್ ವೆಕ್ಟರ್ ಮೆಷಿನ್ (SVM) ಕ್ಲಾಸ್ಗಳ ನಡುವೆ ರೇಖೀಯವಲ್ಲದ ಗಡಿಯನ್ನು ಹೊಂದಿಸಲು ಸಪೋರ್ಟ್ ವೆಕ್ಟರ್ ವರ್ಗೀಕರಣಕಾರನ ವಿಸ್ತರಣೆ ಆಗಿದೆ. ಮೂಲತಃ, SVMಗಳು ವರ್ಗಗಳ ನಡುವೆ ರೇಖೀಯವಲ್ಲದ ಸಂಬಂಧಗಳಿಗೆ ಹೊಂದಿಕೊಳ್ಳಲು ವೈಶಿಷ್ಟ್ಯ ಸ್ಥಳವನ್ನು ವಿಸ್ತರಿಸಲು *ಕರ್ಣಲ್ ಟ್ರಿಕ್* ಅನ್ನು ಬಳಸುತ್ತವೆ. SVMಗಳು ಬಳಸುವ ಜನಪ್ರಿಯ ಮತ್ತು ಅತ್ಯಂತ ಲವಚಿಕ ಕರ್ಣಲ್ ಫಂಕ್ಷನ್ ಒಂದು *ರೇಡಿಯಲ್ ಬೇಸಿಸ್ ಫಂಕ್ಷನ್.* ನಮ್ಮ ಡೇಟಾದ ಮೇಲೆ ಇದು ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಎಂದು ನೋಡೋಣ.\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "-KX4S8mzhzmp"
|
|
},
|
|
"source": [
|
|
"set.seed(2056)\n",
|
|
"\n",
|
|
"# Make an RBF SVM specification\n",
|
|
"svm_rbf_spec <- svm_rbf() %>% \n",
|
|
" set_engine(\"kernlab\") %>% \n",
|
|
" set_mode(\"classification\")\n",
|
|
"\n",
|
|
"# Bundle specification and recipe into a worklow\n",
|
|
"svm_rbf_wf <- workflow() %>% \n",
|
|
" add_recipe(cuisines_recipe) %>% \n",
|
|
" add_model(svm_rbf_spec)\n",
|
|
"\n",
|
|
"\n",
|
|
"# Train an RBF model\n",
|
|
"svm_rbf_fit <- svm_rbf_wf %>% \n",
|
|
" fit(data = cuisines_train)\n",
|
|
"\n",
|
|
"\n",
|
|
"# Make predictions and Evaluate model performance\n",
|
|
"svm_rbf_fit %>% \n",
|
|
" augment(new_data = cuisines_test) %>% \n",
|
|
" eval_metrics(truth = cuisine, estimate = .pred_class)"
|
|
],
|
|
"execution_count": null,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "QBFSa7WSh4HQ"
|
|
},
|
|
"source": [
|
|
"ಬಹಳ ಉತ್ತಮ 🤩!\n",
|
|
"\n",
|
|
"> ✅ ದಯವಿಟ್ಟು ನೋಡಿ:\n",
|
|
">\n",
|
|
"> - [*ಸಪೋರ್ಟ್ ವೆಕ್ಟರ್ ಮೆಷೀನ್ಸ್*](https://bradleyboehmke.github.io/HOML/svm.html), R ಜೊತೆಗೆ ಹ್ಯಾಂಡ್ಸ್-ಆನ್ ಮೆಷಿನ್ ಲರ್ನಿಂಗ್\n",
|
|
">\n",
|
|
"> - [*ಸಪೋರ್ಟ್ ವೆಕ್ಟರ್ ಮೆಷೀನ್ಸ್*](https://www.statlearning.com/), R ನಲ್ಲಿ ಅನ್ವಯಗಳೊಂದಿಗೆ ಸಾಂಖ್ಯಿಕ ಲರ್ನಿಂಗ್ ಗೆ ಪರಿಚಯ\n",
|
|
">\n",
|
|
"> ಮುಂದಿನ ಓದಿಗಾಗಿ.\n",
|
|
"\n",
|
|
"### ಸಮೀಪದ ನೆರೆಹೊರೆಯ ವರ್ಗೀಕರಣಗಳು\n",
|
|
"\n",
|
|
"*K*-ಸಮೀಪದ ನೆರೆಹೊರೆಯ (KNN) ಒಂದು ಆಲ್ಗಾರಿದಮ್ ಆಗಿದ್ದು, ಪ್ರತಿಯೊಂದು ಅವಲೋಕನವನ್ನು ಅದರ ಇತರ ಅವಲೋಕನಗಳ *ಸಮಾನತೆ* ಆಧಾರವಾಗಿ ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲಾಗುತ್ತದೆ.\n",
|
|
"\n",
|
|
"ನಮ್ಮ ಡೇಟಾಗೆ ಒಂದನ್ನು ಹೊಂದಿಸೋಣ.\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "k4BxxBcdh9Ka"
|
|
},
|
|
"source": [
|
|
"# Make a KNN specification\n",
|
|
"knn_spec <- nearest_neighbor() %>% \n",
|
|
" set_engine(\"kknn\") %>% \n",
|
|
" set_mode(\"classification\")\n",
|
|
"\n",
|
|
"# Bundle recipe and model specification into a workflow\n",
|
|
"knn_wf <- workflow() %>% \n",
|
|
" add_recipe(cuisines_recipe) %>% \n",
|
|
" add_model(knn_spec)\n",
|
|
"\n",
|
|
"# Train a boosted tree model\n",
|
|
"knn_wf_fit <- knn_wf %>% \n",
|
|
" fit(data = cuisines_train)\n",
|
|
"\n",
|
|
"\n",
|
|
"# Make predictions and Evaluate model performance\n",
|
|
"knn_wf_fit %>% \n",
|
|
" augment(new_data = cuisines_test) %>% \n",
|
|
" eval_metrics(truth = cuisine, estimate = .pred_class)"
|
|
],
|
|
"execution_count": null,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "HaegQseriAcj"
|
|
},
|
|
"source": [
|
|
"ಈ ಮಾದರಿ ಚೆನ್ನಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿಲ್ಲದಂತೆ ಕಾಣುತ್ತಿದೆ. ಬಹುಶಃ ಮಾದರಿಯ ಆರ್ಗ್ಯುಮೆಂಟ್ಗಳನ್ನು ಬದಲಾಯಿಸುವುದು (`help(\"nearest_neighbor\")` ನೋಡಿ) ಮಾದರಿ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಸುಧಾರಿಸಬಹುದು. ಅದನ್ನು ಪ್ರಯತ್ನಿಸುವುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.\n",
|
|
"\n",
|
|
"> ✅ ದಯವಿಟ್ಟು ನೋಡಿ:\n",
|
|
">\n",
|
|
"> - [Hands-on Machine Learning with R](https://bradleyboehmke.github.io/HOML/)\n",
|
|
">\n",
|
|
"> - [An Introduction to Statistical Learning with Applications in R](https://www.statlearning.com/)\n",
|
|
">\n",
|
|
"> *K*-Nearest Neighbors ವರ್ಗೀಕರಣಗಳ ಬಗ್ಗೆ ಇನ್ನಷ್ಟು ತಿಳಿಯಲು.\n",
|
|
"\n",
|
|
"### ಎನ್ಸೆಂಬಲ್ ವರ್ಗೀಕರಣಗಳು\n",
|
|
"\n",
|
|
"ಎನ್ಸೆಂಬಲ್ ಆಲ್ಗಾರಿದಮ್ಗಳು ಬಹುಮಟ್ಟದ ಮೂಲ ಅಂದಾಜುಗಳನ್ನು ಸಂಯೋಜಿಸುವ ಮೂಲಕ ಉತ್ತಮ ಮಾದರಿಯನ್ನು ಉತ್ಪಾದಿಸುತ್ತವೆ, ಅದು ಕೆಳಗಿನ ರೀತಿಯಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ:\n",
|
|
"\n",
|
|
"`bagging`: ಮೂಲ ಮಾದರಿಗಳ ಸಂಗ್ರಹಕ್ಕೆ *ಸರಾಸರಿ ಕಾರ್ಯ* ಅನ್ವಯಿಸುವುದು\n",
|
|
"\n",
|
|
"`boosting`: ಪರಸ್ಪರ ಆಧಾರಿತ ಮಾದರಿಗಳ ಸರಣಿಯನ್ನು ನಿರ್ಮಿಸುವುದು, ಇದು ಭವಿಷ್ಯವಾಣಿ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಸುಧಾರಿಸುತ್ತದೆ.\n",
|
|
"\n",
|
|
"ನಾವು ಪ್ರಾರಂಭಿಸೋಣ Random Forest ಮಾದರಿಯನ್ನು ಪ್ರಯತ್ನಿಸುವುದರಿಂದ, ಇದು ನಿರ್ಣಯ ಮರಗಳ ದೊಡ್ಡ ಸಂಗ್ರಹವನ್ನು ನಿರ್ಮಿಸಿ ನಂತರ ಒಟ್ಟಾರೆ ಉತ್ತಮ ಮಾದರಿಗಾಗಿ ಸರಾಸರಿ ಕಾರ್ಯವನ್ನು ಅನ್ವಯಿಸುತ್ತದೆ.\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "49DPoVs6iK1M"
|
|
},
|
|
"source": [
|
|
"# Make a random forest specification\n",
|
|
"rf_spec <- rand_forest() %>% \n",
|
|
" set_engine(\"ranger\") %>% \n",
|
|
" set_mode(\"classification\")\n",
|
|
"\n",
|
|
"# Bundle recipe and model specification into a workflow\n",
|
|
"rf_wf <- workflow() %>% \n",
|
|
" add_recipe(cuisines_recipe) %>% \n",
|
|
" add_model(rf_spec)\n",
|
|
"\n",
|
|
"# Train a random forest model\n",
|
|
"rf_wf_fit <- rf_wf %>% \n",
|
|
" fit(data = cuisines_train)\n",
|
|
"\n",
|
|
"\n",
|
|
"# Make predictions and Evaluate model performance\n",
|
|
"rf_wf_fit %>% \n",
|
|
" augment(new_data = cuisines_test) %>% \n",
|
|
" eval_metrics(truth = cuisine, estimate = .pred_class)"
|
|
],
|
|
"execution_count": null,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "RGVYwC_aiUWc"
|
|
},
|
|
"source": [
|
|
"ಚೆನ್ನಾಗಿದೆ 👏!\n",
|
|
"\n",
|
|
"ನಾವು Boosted Tree ಮಾದರಿಯೊಂದಿಗೆ ಕೂಡ ಪ್ರಯೋಗ ಮಾಡೋಣ.\n",
|
|
"\n",
|
|
"Boosted Tree ಒಂದು ಎನ್ಸೆಂಬಲ್ ವಿಧಾನವನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುತ್ತದೆ, ಇದು ಕ್ರಮವಾಗಿ ನಿರ್ಧಾರ ಮರಗಳನ್ನು ಸೃಷ್ಟಿಸುತ್ತದೆ, ಪ್ರತಿಯೊಂದು ಮರವು ಹಿಂದಿನ ಮರಗಳ ಫಲಿತಾಂಶಗಳ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದ್ದು, ದೋಷವನ್ನು ಕ್ರಮೇಣ ಕಡಿಮೆ ಮಾಡಲು ಪ್ರಯತ್ನಿಸುತ್ತದೆ. ಇದು ತಪ್ಪಾಗಿ ವರ್ಗೀಕರಿಸಲಾದ ಐಟಂಗಳ ತೂಕಗಳ ಮೇಲೆ ಗಮನಹರಿಸುತ್ತದೆ ಮತ್ತು ಮುಂದಿನ ವರ್ಗೀಕರಿಸುವವರಿಗಾಗಿ ಹೊಂದಾಣಿಕೆಯನ್ನು ಸರಿಪಡಿಸುತ್ತದೆ.\n",
|
|
"\n",
|
|
"ಈ ಮಾದರಿಯನ್ನು ಹೊಂದಿಸುವ ವಿವಿಧ ವಿಧಾನಗಳಿವೆ (`help(\"boost_tree\")` ನೋಡಿ). ಈ ಉದಾಹರಣೆಯಲ್ಲಿ, ನಾವು `xgboost` ಎಂಜಿನ್ ಮೂಲಕ Boosted ಮರಗಳನ್ನು ಹೊಂದಿಸುವೆವು.\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "Py1YWo-micWs"
|
|
},
|
|
"source": [
|
|
"# Make a boosted tree specification\n",
|
|
"boost_spec <- boost_tree(trees = 200) %>% \n",
|
|
" set_engine(\"xgboost\") %>% \n",
|
|
" set_mode(\"classification\")\n",
|
|
"\n",
|
|
"# Bundle recipe and model specification into a workflow\n",
|
|
"boost_wf <- workflow() %>% \n",
|
|
" add_recipe(cuisines_recipe) %>% \n",
|
|
" add_model(boost_spec)\n",
|
|
"\n",
|
|
"# Train a boosted tree model\n",
|
|
"boost_wf_fit <- boost_wf %>% \n",
|
|
" fit(data = cuisines_train)\n",
|
|
"\n",
|
|
"\n",
|
|
"# Make predictions and Evaluate model performance\n",
|
|
"boost_wf_fit %>% \n",
|
|
" augment(new_data = cuisines_test) %>% \n",
|
|
" eval_metrics(truth = cuisine, estimate = .pred_class)"
|
|
],
|
|
"execution_count": null,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "zNQnbuejigZM"
|
|
},
|
|
"source": [
|
|
"> ✅ ದಯವಿಟ್ಟು ನೋಡಿ:\n",
|
|
">\n",
|
|
"> - [ಸಾಮಾಜಿಕ ವಿಜ್ಞಾನಿಗಳಿಗಾಗಿ ಯಂತ್ರ ಅಧ್ಯಯನ](https://cimentadaj.github.io/ml_socsci/tree-based-methods.html#random-forests)\n",
|
|
">\n",
|
|
"> - [R ಜೊತೆಗೆ ಹ್ಯಾಂಡ್ಸ್-ಆನ್ ಯಂತ್ರ ಅಧ್ಯಯನ](https://bradleyboehmke.github.io/HOML/)\n",
|
|
">\n",
|
|
"> - [R ನಲ್ಲಿ ಅನ್ವಯಗಳೊಂದಿಗೆ ಸಾಂಖ್ಯಿಕ ಅಧ್ಯಯನಕ್ಕೆ ಪರಿಚಯ](https://www.statlearning.com/)\n",
|
|
">\n",
|
|
"> - <https://algotech.netlify.app/blog/xgboost/> - xgboost ಗೆ ಉತ್ತಮ ಪರ್ಯಾಯವಾದ AdaBoost ಮಾದರಿಯನ್ನು ಅನ್ವೇಷಿಸುತ್ತದೆ.\n",
|
|
">\n",
|
|
"> ಎನ್ಸೆಂಬಲ್ ವರ್ಗೀಕರಣಗಳ ಬಗ್ಗೆ ಇನ್ನಷ್ಟು ತಿಳಿಯಲು.\n",
|
|
"\n",
|
|
"## 4. ಹೆಚ್ಚುವರಿ - ಬಹು ಮಾದರಿಗಳನ್ನು ಹೋಲಿಕೆ\n",
|
|
"\n",
|
|
"ನಾವು ಈ ಪ್ರಯೋಗಶಾಲೆಯಲ್ಲಿ ಸಾಕಷ್ಟು ಮಾದರಿಗಳನ್ನು ಹೊಂದಿಸಿದ್ದೇವೆ 🙌. ವಿಭಿನ್ನ ಪೂರ್ವಸಿದ್ಧತೆಗಳ ಮತ್ತು/ಅಥವಾ ಮಾದರಿ ನಿರ್ದಿಷ್ಟತೆಗಳ ಸೆಟ್ಗಳಿಂದ ಅನೇಕ ವರ್ಕ್ಫ್ಲೋಗಳನ್ನು ರಚಿಸುವುದು ಮತ್ತು ನಂತರ ಕಾರ್ಯಕ್ಷಮತೆ ಮೌಲ್ಯಗಳನ್ನು ಒಂದೊಂದಾಗಿ ಲೆಕ್ಕಹಾಕುವುದು ಕಠಿಣ ಅಥವಾ ಭಾರವಾಗಬಹುದು.\n",
|
|
"\n",
|
|
"ಪ್ರಶಿಕ್ಷಣ ಸೆಟ್ನಲ್ಲಿ ವರ್ಕ್ಫ್ಲೋಗಳ ಪಟ್ಟಿಯನ್ನು ಹೊಂದಿಸುವ ಮತ್ತು ನಂತರ ಪರೀಕ್ಷಾ ಸೆಟ್ ಆಧಾರಿತ ಕಾರ್ಯಕ್ಷಮತೆ ಮೌಲ್ಯಗಳನ್ನು ಹಿಂತಿರುಗಿಸುವ ಫಂಕ್ಷನ್ ಅನ್ನು ರಚಿಸುವ ಮೂಲಕ ಇದನ್ನು ಪರಿಹರಿಸಬಹುದೇ ಎಂದು ನೋಡೋಣ. ನಾವು ಪಟ್ಟಿಯ ಪ್ರತಿಯೊಂದು ಅಂಶಕ್ಕೆ ಫಂಕ್ಷನ್ಗಳನ್ನು ಅನ್ವಯಿಸಲು [purrr](https://purrr.tidyverse.org/) ಪ್ಯಾಕೇಜ್ನ `map()` ಮತ್ತು `map_dfr()` ಅನ್ನು ಬಳಸುತ್ತೇವೆ.\n",
|
|
"\n",
|
|
"> [`map()`](https://purrr.tidyverse.org/reference/map.html) ಫಂಕ್ಷನ್ಗಳು ಅನೇಕ for ಲೂಪ್ಗಳನ್ನು ಕಡಿಮೆ ಮತ್ತು ಓದಲು ಸುಲಭವಾಗುವ ಕೋಡ್ನೊಂದಿಗೆ ಬದಲಾಯಿಸಲು ಅನುಮತಿಸುತ್ತವೆ. [`map()`](https://purrr.tidyverse.org/reference/map.html) ಫಂಕ್ಷನ್ಗಳ ಬಗ್ಗೆ ತಿಳಿಯಲು ಅತ್ಯುತ್ತಮ ಸ್ಥಳ R for data science ನಲ್ಲಿ ಇರುವ [ಪುನರಾವೃತ್ತಿ ಅಧ್ಯಾಯ](http://r4ds.had.co.nz/iteration.html).\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "Qzb7LyZnimd2"
|
|
},
|
|
"source": [
|
|
"set.seed(2056)\n",
|
|
"\n",
|
|
"# Create a metric set\n",
|
|
"eval_metrics <- metric_set(ppv, sens, accuracy, f_meas)\n",
|
|
"\n",
|
|
"# Define a function that returns performance metrics\n",
|
|
"compare_models <- function(workflow_list, train_set, test_set){\n",
|
|
" \n",
|
|
" suppressWarnings(\n",
|
|
" # Fit each model to the train_set\n",
|
|
" map(workflow_list, fit, data = train_set) %>% \n",
|
|
" # Make predictions on the test set\n",
|
|
" map_dfr(augment, new_data = test_set, .id = \"model\") %>%\n",
|
|
" # Select desired columns\n",
|
|
" select(model, cuisine, .pred_class) %>% \n",
|
|
" # Evaluate model performance\n",
|
|
" group_by(model) %>% \n",
|
|
" eval_metrics(truth = cuisine, estimate = .pred_class) %>% \n",
|
|
" ungroup()\n",
|
|
" )\n",
|
|
" \n",
|
|
"} # End of function"
|
|
],
|
|
"execution_count": null,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "Fwa712sNisDA"
|
|
},
|
|
"source": [
|
|
"ನಾವು ನಮ್ಮ ಫಂಕ್ಷನ್ ಅನ್ನು ಕರೆದು ಮಾದರಿಗಳ accuracy ಅನ್ನು ಹೋಲಿಸೋಣ.\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "3i4VJOi2iu-a"
|
|
},
|
|
"source": [
|
|
"# Make a list of workflows\n",
|
|
"workflow_list <- list(\n",
|
|
" \"svc\" = svc_linear_wf,\n",
|
|
" \"svm\" = svm_rbf_wf,\n",
|
|
" \"knn\" = knn_wf,\n",
|
|
" \"random_forest\" = rf_wf,\n",
|
|
" \"xgboost\" = boost_wf)\n",
|
|
"\n",
|
|
"# Call the function\n",
|
|
"set.seed(2056)\n",
|
|
"perf_metrics <- compare_models(workflow_list = workflow_list, train_set = cuisines_train, test_set = cuisines_test)\n",
|
|
"\n",
|
|
"# Print out performance metrics\n",
|
|
"perf_metrics %>% \n",
|
|
" group_by(.metric) %>% \n",
|
|
" arrange(desc(.estimate)) %>% \n",
|
|
" slice_head(n=7)\n",
|
|
"\n",
|
|
"# Compare accuracy\n",
|
|
"perf_metrics %>% \n",
|
|
" filter(.metric == \"accuracy\") %>% \n",
|
|
" arrange(desc(.estimate))\n"
|
|
],
|
|
"execution_count": null,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "KuWK_lEli4nW"
|
|
},
|
|
"source": [
|
|
"[**workflowset**](https://workflowsets.tidymodels.org/) ಪ್ಯಾಕೇಜ್ ಬಳಕೆದಾರರಿಗೆ ದೊಡ್ಡ ಸಂಖ್ಯೆಯ ಮಾದರಿಗಳನ್ನು ರಚಿಸಲು ಮತ್ತು ಸುಲಭವಾಗಿ ಹೊಂದಿಸಲು ಅನುಮತಿಸುತ್ತದೆ ಆದರೆ ಇದು ಮುಖ್ಯವಾಗಿ `cross-validation` ಎಂಬ ಪುನರಾವೃತ್ತಿ ತಂತ್ರಗಳನ್ನು ಬಳಸಲು ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ, ಇದು ನಾವು ಇನ್ನೂ ಆವರಿಸಬೇಕಾದ ವಿಧಾನವಾಗಿದೆ.\n",
|
|
"\n",
|
|
"## **🚀ಸವಾಲು**\n",
|
|
"\n",
|
|
"ಈ ತಂತ್ರಗಳ ಪ್ರತಿಯೊಂದಕ್ಕೂ ನೀವು ಬದಲಾಯಿಸಬಹುದಾದ ಹೆಚ್ಚಿನ ಪರಿಮಾಣಗಳಿವೆ ಉದಾಹರಣೆಗೆ SVM ಗಳಲ್ಲಿ `cost`, KNN ನಲ್ಲಿ `neighbors`, Random Forest ನಲ್ಲಿ `mtry` (ಯಾದೃಚ್ಛಿಕವಾಗಿ ಆಯ್ದ ನಿರೀಕ್ಷಕರು).\n",
|
|
"\n",
|
|
"ಪ್ರತಿಯೊಂದು ಮಾದರಿಯ ಡೀಫಾಲ್ಟ್ ಪರಿಮಾಣಗಳನ್ನು ಸಂಶೋಧಿಸಿ ಮತ್ತು ಈ ಪರಿಮಾಣಗಳನ್ನು ಬದಲಾಯಿಸುವುದರಿಂದ ಮಾದರಿಯ ಗುಣಮಟ್ಟಕ್ಕೆ ಏನು ಅರ್ಥವಾಗುತ್ತದೆ ಎಂದು ಯೋಚಿಸಿ.\n",
|
|
"\n",
|
|
"ನಿರ್ದಿಷ್ಟ ಮಾದರಿ ಮತ್ತು ಅದರ ಪರಿಮಾಣಗಳ ಬಗ್ಗೆ ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ, ಬಳಸಿ: `help(\"model\")` ಉದಾ: `help(\"rand_forest\")`\n",
|
|
"\n",
|
|
"> ಪ್ರಾಯೋಗಿಕವಾಗಿ, ನಾವು ಸಾಮಾನ್ಯವಾಗಿ ಈ ಪರಿಮಾಣಗಳ *ಉತ್ತಮ ಮೌಲ್ಯಗಳನ್ನು* ಅಂದಾಜು ಮಾಡುತ್ತೇವೆ `ನಕಲಿ ಡೇಟಾ ಸೆಟ್` ಮೇಲೆ ಅನೇಕ ಮಾದರಿಗಳನ್ನು ತರಬೇತುಗೊಳಿಸಿ ಮತ್ತು ಈ ಎಲ್ಲಾ ಮಾದರಿಗಳು ಎಷ್ಟು ಚೆನ್ನಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ ಎಂದು ಅಳೆಯುವ ಮೂಲಕ. ಈ ಪ್ರಕ್ರಿಯೆಯನ್ನು **ಟ್ಯೂನಿಂಗ್** ಎಂದು ಕರೆಯುತ್ತಾರೆ.\n",
|
|
"\n",
|
|
"### [**ಪಾಠದ ನಂತರದ ಪ್ರಶ್ನೋತ್ತರ**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/24/)\n",
|
|
"\n",
|
|
"### **ಪುನರಾವಲೋಕನ ಮತ್ತು ಸ್ವಯಂ ಅಧ್ಯಯನ**\n",
|
|
"\n",
|
|
"ಈ ಪಾಠಗಳಲ್ಲಿ ಬಹಳಷ್ಟು ತಾಂತ್ರಿಕ ಪದಗಳಿವೆ, ಆದ್ದರಿಂದ [ಈ ಪಟ್ಟಿ](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) ಯನ್ನು ಪರಿಶೀಲಿಸಲು ಒಂದು ನಿಮಿಷ ತೆಗೆದುಕೊಳ್ಳಿ!\n",
|
|
"\n",
|
|
"#### ಧನ್ಯವಾದಗಳು:\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",
|
|
"[Cassie Breviu](https://www.twitter.com/cassieview) ಮತ್ತು [Jen Looper](https://www.twitter.com/jenlooper) ಅವರಿಗೆ ಈ ಮಾಯಾಜಾಲದ ಮೂಲ Python ಆವೃತ್ತಿಯನ್ನು ಸೃಷ್ಟಿಸಿದಕ್ಕಾಗಿ ♥️\n",
|
|
"\n",
|
|
"ಶುಭ ಕಲಿಕೆ,\n",
|
|
"\n",
|
|
"[Eric](https://twitter.com/ericntay), ಗೋಲ್ಡ್ ಮೈಕ್ರೋಸಾಫ್ಟ್ ಲರ್ನ್ ವಿದ್ಯಾರ್ಥಿ ರಾಯಭಾರಿ.\n",
|
|
"\n",
|
|
"<p >\n",
|
|
" <img src=\"../../../../../../translated_images/kn/r_learners_sm.f9199f76f1e2e493.webp\"\n",
|
|
" width=\"569\"/>\n",
|
|
" <figcaption>@allison_horst ಅವರ ಕಲಾಕೃತಿ</figcaption>\n"
|
|
]
|
|
},
|
|
{
|
|
"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"
|
|
]
|
|
}
|
|
]
|
|
} |