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.
719 lines
43 KiB
719 lines
43 KiB
{
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2,
|
|
"metadata": {
|
|
"colab": {
|
|
"name": "lesson_10-R.ipynb",
|
|
"provenance": [],
|
|
"collapsed_sections": []
|
|
},
|
|
"kernelspec": {
|
|
"name": "ir",
|
|
"display_name": "R"
|
|
},
|
|
"language_info": {
|
|
"name": "R"
|
|
},
|
|
"coopTranslator": {
|
|
"original_hash": "2621e24705e8100893c9bf84e0fc8aef",
|
|
"translation_date": "2025-08-29T19:34:54+00:00",
|
|
"source_file": "4-Classification/1-Introduction/solution/R/lesson_10-R.ipynb",
|
|
"language_code": "mr"
|
|
}
|
|
},
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [],
|
|
"metadata": {
|
|
"id": "ItETB4tSFprR"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"## वर्गीकरणाची ओळख: डेटा स्वच्छ करा, तयार करा आणि व्हिज्युअलाइझ करा\n",
|
|
"\n",
|
|
"या चार धड्यांमध्ये, तुम्ही क्लासिक मशीन लर्निंगचा एक मूलभूत भाग - *वर्गीकरण* - शोधाल. आम्ही आशिया आणि भारतातील विविध अप्रतिम खाद्यपदार्थांबद्दलच्या डेटासेटसह विविध वर्गीकरण अल्गोरिदम वापरण्याची प्रक्रिया पाहणार आहोत. आशा आहे की तुम्हाला भूक लागली आहे!\n",
|
|
"\n",
|
|
"<p >\n",
|
|
" <img src=\"../../images/pinch.png\"\n",
|
|
" width=\"600\"/>\n",
|
|
" <figcaption>या धड्यांमध्ये पॅन-आशियाई खाद्यपदार्थ साजरे करा! प्रतिमा: जेन लूपर</figcaption>\n",
|
|
"\n",
|
|
"\n",
|
|
"<!---->\n",
|
|
"\n",
|
|
"वर्गीकरण हे [सुपरव्हाइज्ड लर्निंग](https://wikipedia.org/wiki/Supervised_learning) चे एक प्रकार आहे ज्यामध्ये रिग्रेशन तंत्रांशी बरेच साम्य आहे. वर्गीकरणामध्ये, तुम्ही एखाद्या आयटमचा `वर्ग` कोणता आहे हे भाकीत करण्यासाठी मॉडेल तयार करता. जर मशीन लर्निंग हे डेटासेट्स वापरून गोष्टींचे मूल्य किंवा नाव भाकीत करण्याबद्दल असेल, तर वर्गीकरण प्रामुख्याने दोन गटांमध्ये विभागले जाते: *द्वि-वर्गीकरण* आणि *बहु-वर्गीकरण*.\n",
|
|
"\n",
|
|
"लक्षात ठेवा:\n",
|
|
"\n",
|
|
"- **रेखीय रिग्रेशन** तुम्हाला व्हेरिएबल्समधील संबंध भाकीत करण्यात आणि नवीन डेटा पॉइंट त्या रेषेच्या संदर्भात कुठे पडेल याचे अचूक भाकीत करण्यात मदत करते. त्यामुळे, तुम्ही संख्यात्मक मूल्ये भाकीत करू शकता, जसे की *सप्टेंबर आणि डिसेंबरमध्ये भोपळ्याची किंमत किती असेल*.\n",
|
|
"\n",
|
|
"- **लॉजिस्टिक रिग्रेशन** तुम्हाला \"द्वि-वर्ग\" शोधण्यात मदत करते: या किंमतीच्या पातळीवर, *हा भोपळा नारंगी आहे की नाही*?\n",
|
|
"\n",
|
|
"वर्गीकरण विविध अल्गोरिदम वापरून डेटा पॉइंटचा लेबल किंवा वर्ग ठरवण्याचे इतर मार्ग शोधते. चला, या खाद्यपदार्थांच्या डेटासह काम करूया आणि पाहूया की घटकांचा समूह पाहून आपण त्याचा मूळ खाद्यपदार्थाचा प्रकार ओळखू शकतो का.\n",
|
|
"\n",
|
|
"### [**पूर्व-व्याख्यान प्रश्नमंजुषा**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/19/)\n",
|
|
"\n",
|
|
"### **परिचय**\n",
|
|
"\n",
|
|
"वर्गीकरण हे मशीन लर्निंग संशोधक आणि डेटा वैज्ञानिकाचे एक मूलभूत कार्य आहे. द्वि-मूल्य वर्गीकरण (\"हा ईमेल स्पॅम आहे की नाही?\") पासून ते संगणकीय दृष्टिकोन वापरून जटिल प्रतिमा वर्गीकरण आणि विभागणीपर्यंत, डेटा वर्गांमध्ये विभागणे आणि त्यावर प्रश्न विचारणे नेहमीच उपयुक्त ठरते.\n",
|
|
"\n",
|
|
"प्रक्रिया अधिक वैज्ञानिक पद्धतीने सांगायची झाल्यास, तुमची वर्गीकरण पद्धत एक प्रेडिक्टिव मॉडेल तयार करते जे इनपुट व्हेरिएबल्स आणि आउटपुट व्हेरिएबल्समधील संबंध मॅप करण्यास सक्षम करते.\n",
|
|
"\n",
|
|
"<p >\n",
|
|
" <img src=\"../../images/binary-multiclass.png\"\n",
|
|
" width=\"600\"/>\n",
|
|
" <figcaption>वर्गीकरण अल्गोरिदम हाताळण्यासाठी द्वि-वर्ग आणि बहु-वर्ग समस्या. माहितीग्राफिक: जेन लूपर</figcaption>\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"आपला डेटा स्वच्छ करण्याची, व्हिज्युअलाइझ करण्याची आणि एमएल कार्यांसाठी तयार करण्याची प्रक्रिया सुरू करण्यापूर्वी, मशीन लर्निंग डेटा वर्गीकृत करण्यासाठी कसे वापरले जाऊ शकते याबद्दल थोडेसे शिकूया.\n",
|
|
"\n",
|
|
"[सांख्यिकी](https://wikipedia.org/wiki/Statistical_classification) मधून घेतलेले, क्लासिक मशीन लर्निंग वापरून वर्गीकरण `smoker`, `weight`, आणि `age` सारख्या वैशिष्ट्यांचा वापर करून *X आजार होण्याची शक्यता* ठरवते. रिग्रेशन सरावांप्रमाणेच एक सुपरव्हाइज्ड लर्निंग तंत्र म्हणून, तुमचा डेटा लेबल केलेला असतो आणि एमएल अल्गोरिदम त्या लेबल्सचा वापर करून डेटासेटच्या वर्ग (किंवा 'वैशिष्ट्ये') वर्गीकृत आणि भाकीत करतो आणि त्यांना गट किंवा परिणामाशी जोडतो.\n",
|
|
"\n",
|
|
"✅ एका खाद्यपदार्थांच्या डेटासेटची कल्पना करा. बहु-वर्ग मॉडेल कोणते प्रश्न विचारू शकेल? द्वि-वर्ग मॉडेल कोणते प्रश्न विचारू शकेल? जर तुम्हाला एखाद्या खाद्यपदार्थात मेथी वापरण्याची शक्यता ठरवायची असेल तर काय? जर तुम्हाला स्टार अनीस, आर्टिचोक, फुलकोबी आणि हॉर्सरॅडिशने भरलेल्या किराणा पिशवीच्या आधारे पारंपरिक भारतीय पदार्थ तयार करता येईल का हे पाहायचे असेल तर काय?\n",
|
|
"\n",
|
|
"### **हॅलो 'क्लासिफायर'**\n",
|
|
"\n",
|
|
"या खाद्यपदार्थांच्या डेटासेटसाठी आपण विचारू इच्छित असलेला प्रश्न प्रत्यक्षात एक **बहु-वर्ग प्रश्न** आहे, कारण आपल्याकडे काम करण्यासाठी अनेक संभाव्य राष्ट्रीय खाद्यपदार्थ आहेत. घटकांचा एक समूह दिल्यास, डेटा कोणत्या अनेक वर्गांमध्ये बसतो?\n",
|
|
"\n",
|
|
"Tidymodels विविध प्रकारचे अल्गोरिदम ऑफर करते जे तुम्हाला तुमच्या समस्येच्या प्रकारानुसार डेटा वर्गीकृत करण्यासाठी वापरता येतात. पुढील दोन धड्यांमध्ये, तुम्ही या अल्गोरिदम्सबद्दल शिकाल.\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",
|
|
"- `DataExplorer`: [DataExplorer पॅकेज](https://cran.r-project.org/web/packages/DataExplorer/vignettes/dataexplorer-intro.html) EDA प्रक्रिया आणि अहवाल निर्मिती सुलभ आणि स्वयंचलित करण्यासाठी आहे.\n",
|
|
"\n",
|
|
"- `themis`: [themis पॅकेज](https://themis.tidymodels.org/) असंतुलित डेटाशी संबंधित अतिरिक्त रेसिपी स्टेप्स प्रदान करते.\n",
|
|
"\n",
|
|
"तुम्ही खालीलप्रमाणे पॅकेजेस इन्स्टॉल करू शकता:\n",
|
|
"\n",
|
|
"`install.packages(c(\"tidyverse\", \"tidymodels\", \"DataExplorer\", \"here\"))`\n",
|
|
"\n",
|
|
"पर्यायाने, खालील स्क्रिप्ट तपासते की तुम्हाला या मॉड्यूल पूर्ण करण्यासाठी आवश्यक पॅकेजेस आहेत का आणि जर ती गहाळ असतील तर ती तुमच्यासाठी इन्स्टॉल करते.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "ri5bQxZ-Fz_0"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"suppressWarnings(if (!require(\"pacman\"))install.packages(\"pacman\"))\r\n",
|
|
"\r\n",
|
|
"pacman::p_load(tidyverse, tidymodels, DataExplorer, themis, here)"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "KIPxa4elGAPI"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"आम्ही नंतर हे अप्रतिम पॅकेजेस लोड करू आणि आमच्या सध्याच्या R सत्रात त्यांना उपलब्ध करून देऊ. (हे फक्त उदाहरणासाठी आहे, `pacman::p_load()` ने आधीच तुमच्यासाठी ते केले आहे)\n"
|
|
],
|
|
"metadata": {
|
|
"id": "YkKAxOJvGD4C"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"## व्यायाम - तुमचा डेटा स्वच्छ करा आणि संतुलित करा\n",
|
|
"\n",
|
|
"या प्रकल्पाची सुरुवात करण्यापूर्वीची पहिली जबाबदारी म्हणजे तुमचा डेटा स्वच्छ करणे आणि **संतुलित** करणे, जेणेकरून तुम्हाला चांगले परिणाम मिळतील.\n",
|
|
"\n",
|
|
"चला डेटा पाहूया!🕵️\n"
|
|
],
|
|
"metadata": {
|
|
"id": "PFkQDlk0GN5O"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Import data\r\n",
|
|
"df <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/4-Classification/data/cuisines.csv\")\r\n",
|
|
"\r\n",
|
|
"# View the first 5 rows\r\n",
|
|
"df %>% \r\n",
|
|
" slice_head(n = 5)\r\n"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "Qccw7okxGT0S"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [],
|
|
"metadata": {
|
|
"id": "XrWnlgSrGVmR"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Basic information about the data\r\n",
|
|
"df %>%\r\n",
|
|
" introduce()\r\n",
|
|
"\r\n",
|
|
"# Visualize basic information above\r\n",
|
|
"df %>% \r\n",
|
|
" plot_intro(ggtheme = theme_light())"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "4UcGmxRxGieA"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"आम्हाला लगेचच दिसते की आमच्याकडे `2448` ओळी आणि `385` स्तंभ आहेत आणि `0` गहाळ मूल्ये आहेत. तसेच आमच्याकडे 1 विवक्षित स्तंभ आहे, *cuisine*.\n",
|
|
"\n",
|
|
"## व्यायाम - पाककृतींबद्दल शिकणे\n",
|
|
"\n",
|
|
"आता काम अधिक मनोरंजक होऊ लागते. चला प्रत्येक पाककृतीनुसार डेटाचा वितरण शोधूया.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "AaPubl__GmH5"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Count observations per cuisine\r\n",
|
|
"df %>% \r\n",
|
|
" count(cuisine) %>% \r\n",
|
|
" arrange(n)\r\n",
|
|
"\r\n",
|
|
"# Plot the distribution\r\n",
|
|
"theme_set(theme_light())\r\n",
|
|
"df %>% \r\n",
|
|
" count(cuisine) %>% \r\n",
|
|
" ggplot(mapping = aes(x = n, y = reorder(cuisine, -n))) +\r\n",
|
|
" geom_col(fill = \"midnightblue\", alpha = 0.7) +\r\n",
|
|
" ylab(\"cuisine\")"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "FRsBVy5eGrrv"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"भोजनशैलींची संख्या मर्यादित आहे, परंतु डेटाचे वितरण असमान आहे. तुम्ही हे सुधारू शकता! त्याआधी, थोडं अधिक शोधून पाहा.\n",
|
|
"\n",
|
|
"आता, प्रत्येक भोजनशैलीसाठी स्वतंत्र टिबल तयार करूया आणि प्रत्येक भोजनशैलीसाठी किती डेटा उपलब्ध आहे (ओळी, स्तंभ) हे शोधून काढूया.\n",
|
|
"\n",
|
|
"> [टिबल](https://tibble.tidyverse.org/) म्हणजे आधुनिक डेटा फ्रेम.\n",
|
|
"\n",
|
|
"<p >\n",
|
|
" <img src=\"../../images/dplyr_filter.jpg\"\n",
|
|
" width=\"600\"/>\n",
|
|
" <figcaption>@allison_horst यांचे कलाकृती</figcaption>\n"
|
|
],
|
|
"metadata": {
|
|
"id": "vVvyDb1kG2in"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Create individual tibble for the cuisines\r\n",
|
|
"thai_df <- df %>% \r\n",
|
|
" filter(cuisine == \"thai\")\r\n",
|
|
"japanese_df <- df %>% \r\n",
|
|
" filter(cuisine == \"japanese\")\r\n",
|
|
"chinese_df <- df %>% \r\n",
|
|
" filter(cuisine == \"chinese\")\r\n",
|
|
"indian_df <- df %>% \r\n",
|
|
" filter(cuisine == \"indian\")\r\n",
|
|
"korean_df <- df %>% \r\n",
|
|
" filter(cuisine == \"korean\")\r\n",
|
|
"\r\n",
|
|
"\r\n",
|
|
"# Find out how much data is available per cuisine\r\n",
|
|
"cat(\" thai df:\", dim(thai_df), \"\\n\",\r\n",
|
|
" \"japanese df:\", dim(japanese_df), \"\\n\",\r\n",
|
|
" \"chinese_df:\", dim(chinese_df), \"\\n\",\r\n",
|
|
" \"indian_df:\", dim(indian_df), \"\\n\",\r\n",
|
|
" \"korean_df:\", dim(korean_df))"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "0TvXUxD3G8Bk"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"## **व्यायाम - dplyr वापरून प्रत्येक खाद्यसंस्कृतीसाठी प्रमुख घटक शोधणे**\n",
|
|
"\n",
|
|
"आता तुम्ही डेटामध्ये अधिक खोलवर जाऊ शकता आणि प्रत्येक खाद्यसंस्कृतीसाठी नेहमी वापरले जाणारे घटक कोणते आहेत ते शोधू शकता. तुम्हाला अशा पुनरावृत्ती होणाऱ्या डेटाचा साफसफाई करायचा आहे जो खाद्यसंस्कृतींमध्ये गोंधळ निर्माण करतो, तर चला या समस्येबद्दल शिकूया.\n",
|
|
"\n",
|
|
"R मध्ये `create_ingredient()` नावाची एक फंक्शन तयार करा जी घटकांचा डेटा फ्रेम परत करते. ही फंक्शन सुरुवातीला एक निरुपयोगी कॉलम काढून टाकेल आणि घटकांना त्यांच्या गणनेनुसार क्रमवारी लावेल.\n",
|
|
"\n",
|
|
"R मध्ये फंक्शनची मूलभूत रचना अशी आहे:\n",
|
|
"\n",
|
|
"`myFunction <- function(arglist){`\n",
|
|
"\n",
|
|
"**`...`**\n",
|
|
"\n",
|
|
"**`return`**`(value)`\n",
|
|
"\n",
|
|
"`}`\n",
|
|
"\n",
|
|
"R फंक्शनसाठी एक व्यवस्थित परिचय तुम्हाला [इथे](https://skirmer.github.io/presentations/functions_with_r.html#1) मिळू शकतो.\n",
|
|
"\n",
|
|
"चला सुरुवात करूया! आपण [dplyr verbs](https://dplyr.tidyverse.org/) चा वापर करू, ज्याबद्दल आपण मागील धड्यांमध्ये शिकत आलो आहोत. पुनरावलोकन म्हणून:\n",
|
|
"\n",
|
|
"- `dplyr::select()`: तुम्हाला कोणते **कॉलम्स** ठेवायचे किंवा वगळायचे आहेत ते निवडण्यास मदत करते.\n",
|
|
"\n",
|
|
"- `dplyr::pivot_longer()`: डेटा \"लांब\" करण्यास मदत करते, म्हणजेच रकाने कमी करून ओळी वाढवते.\n",
|
|
"\n",
|
|
"- `dplyr::group_by()` आणि `dplyr::summarise()`: तुम्हाला वेगवेगळ्या गटांसाठी सारांश आकडेवारी शोधण्यास आणि ती एका चांगल्या टेबलमध्ये ठेवण्यास मदत करते.\n",
|
|
"\n",
|
|
"- `dplyr::filter()`: फक्त तुमच्या अटी पूर्ण करणाऱ्या ओळींचा डेटा उपसंच तयार करते.\n",
|
|
"\n",
|
|
"- `dplyr::mutate()`: तुम्हाला कॉलम तयार करण्यास किंवा बदलण्यास मदत करते.\n",
|
|
"\n",
|
|
"Allison Horst यांनी तयार केलेल्या [*art*-ने भरलेल्या learnr ट्युटोरियल](https://allisonhorst.shinyapps.io/dplyr-learnr/#section-welcome) वर एक नजर टाका, ज्यामध्ये dplyr *(Tidyverse चा भाग)* मधील काही उपयुक्त डेटा व्यवस्थापन फंक्शन्सची ओळख करून दिली आहे.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "K3RF5bSCHC76"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Creates a functions that returns the top ingredients by class\r\n",
|
|
"\r\n",
|
|
"create_ingredient <- function(df){\r\n",
|
|
" \r\n",
|
|
" # Drop the id column which is the first colum\r\n",
|
|
" ingredient_df = df %>% select(-1) %>% \r\n",
|
|
" # Transpose data to a long format\r\n",
|
|
" pivot_longer(!cuisine, names_to = \"ingredients\", values_to = \"count\") %>% \r\n",
|
|
" # Find the top most ingredients for a particular cuisine\r\n",
|
|
" group_by(ingredients) %>% \r\n",
|
|
" summarise(n_instances = sum(count)) %>% \r\n",
|
|
" filter(n_instances != 0) %>% \r\n",
|
|
" # Arrange by descending order\r\n",
|
|
" arrange(desc(n_instances)) %>% \r\n",
|
|
" mutate(ingredients = factor(ingredients) %>% fct_inorder())\r\n",
|
|
" \r\n",
|
|
" \r\n",
|
|
" return(ingredient_df)\r\n",
|
|
"} # End of function"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "uB_0JR82HTPa"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"आता आपण ही फंक्शन वापरून वेगवेगळ्या प्रकारच्या खाद्यपदार्थांमध्ये सर्वाधिक लोकप्रिय घटकांची टॉप दहा यादी मिळवू शकतो. चला `thai_df` सह याचा वापर करून पाहू.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "h9794WF8HWmc"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Call create_ingredient and display popular ingredients\r\n",
|
|
"thai_ingredient_df <- create_ingredient(df = thai_df)\r\n",
|
|
"\r\n",
|
|
"thai_ingredient_df %>% \r\n",
|
|
" slice_head(n = 10)"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "agQ-1HrcHaEA"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"मागील विभागात, आपण `geom_col()` वापरले, चला पाहूया की तुम्ही `geom_bar` देखील कसा वापरू शकता, बार चार्ट तयार करण्यासाठी. अधिक वाचनासाठी `?geom_bar` वापरा.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "kHu9ffGjHdcX"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Make a bar chart for popular thai cuisines\r\n",
|
|
"thai_ingredient_df %>% \r\n",
|
|
" slice_head(n = 10) %>% \r\n",
|
|
" ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
|
|
" geom_bar(stat = \"identity\", width = 0.5, fill = \"steelblue\") +\r\n",
|
|
" xlab(\"\") + ylab(\"\")"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "fb3Bx_3DHj6e"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [],
|
|
"metadata": {
|
|
"id": "RHP_xgdkHnvM"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Get popular ingredients for Japanese cuisines and make bar chart\r\n",
|
|
"create_ingredient(df = japanese_df) %>% \r\n",
|
|
" slice_head(n = 10) %>%\r\n",
|
|
" ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
|
|
" geom_bar(stat = \"identity\", width = 0.5, fill = \"darkorange\", alpha = 0.8) +\r\n",
|
|
" xlab(\"\") + ylab(\"\")\r\n"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "019v8F0XHrRU"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"चिनी खाद्यपदार्थांबद्दल काय?\n"
|
|
],
|
|
"metadata": {
|
|
"id": "iIGM7vO8Hu3v"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Get popular ingredients for Chinese cuisines and make bar chart\r\n",
|
|
"create_ingredient(df = chinese_df) %>% \r\n",
|
|
" slice_head(n = 10) %>%\r\n",
|
|
" ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
|
|
" geom_bar(stat = \"identity\", width = 0.5, fill = \"cyan4\", alpha = 0.8) +\r\n",
|
|
" xlab(\"\") + ylab(\"\")"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "lHd9_gd2HyzU"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [],
|
|
"metadata": {
|
|
"id": "ir8qyQbNH1c7"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Get popular ingredients for Indian cuisines and make bar chart\r\n",
|
|
"create_ingredient(df = indian_df) %>% \r\n",
|
|
" slice_head(n = 10) %>%\r\n",
|
|
" ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
|
|
" geom_bar(stat = \"identity\", width = 0.5, fill = \"#041E42FF\", alpha = 0.8) +\r\n",
|
|
" xlab(\"\") + ylab(\"\")"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "ApukQtKjH5FO"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [],
|
|
"metadata": {
|
|
"id": "qv30cwY1H-FM"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Get popular ingredients for Korean cuisines and make bar chart\r\n",
|
|
"create_ingredient(df = korean_df) %>% \r\n",
|
|
" slice_head(n = 10) %>%\r\n",
|
|
" ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
|
|
" geom_bar(stat = \"identity\", width = 0.5, fill = \"#852419FF\", alpha = 0.8) +\r\n",
|
|
" xlab(\"\") + ylab(\"\")"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "lumgk9cHIBie"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"डेटा व्हिज्युअलायझेशनमधून, आपण आता वेगवेगळ्या खाद्यसंस्कृतींमध्ये गोंधळ निर्माण करणारे सर्वसामान्य घटक `dplyr::select()` वापरून वगळू शकतो.\n",
|
|
"\n",
|
|
"सर्वांनाच भात, लसूण आणि आलं खूप आवडतं!\n"
|
|
],
|
|
"metadata": {
|
|
"id": "iO4veMXuIEta"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Drop id column, rice, garlic and ginger from our original data set\r\n",
|
|
"df_select <- df %>% \r\n",
|
|
" select(-c(1, rice, garlic, ginger))\r\n",
|
|
"\r\n",
|
|
"# Display new data set\r\n",
|
|
"df_select %>% \r\n",
|
|
" slice_head(n = 5)"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "iHJPiG6rIUcK"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"## रेसिपी वापरून डेटा पूर्वतयारी 👩🍳👨🍳 - असमतोल डेटाशी सामना ⚖️\n",
|
|
"\n",
|
|
"<p >\n",
|
|
" <img src=\"../../images/recipes.png\"\n",
|
|
" width=\"600\"/>\n",
|
|
" <figcaption>चित्रकृती: @allison_horst</figcaption>\n",
|
|
"\n",
|
|
"या धड्याचा विषय स्वयंपाकशास्त्राशी संबंधित असल्याने, आपल्याला `recipes` संदर्भात ठेवावे लागेल.\n",
|
|
"\n",
|
|
"Tidymodels एक आणखी छान पॅकेज प्रदान करते: `recipes` - डेटा पूर्वतयारीसाठी एक पॅकेज.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "kkFd-JxdIaL6"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"चला पुन्हा एकदा आपल्या खाद्यपदार्थांच्या वितरणावर नजर टाकूया.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "6l2ubtTPJAhY"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Distribution of cuisines\r\n",
|
|
"old_label_count <- df_select %>% \r\n",
|
|
" count(cuisine) %>% \r\n",
|
|
" arrange(desc(n))\r\n",
|
|
"\r\n",
|
|
"old_label_count"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "1e-E9cb7JDVi"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"जसे तुम्ही पाहू शकता, वेगवेगळ्या प्रकारच्या खाद्यसंस्कृतींच्या संख्येमध्ये खूपच असमान वितरण आहे. कोरियन खाद्यसंस्कृती थाई खाद्यसंस्कृतींपेक्षा जवळजवळ तीन पट जास्त आहेत. असंतुलित डेटा मॉडेलच्या कार्यक्षमतेवर नकारात्मक परिणाम करू शकतो. बायनरी वर्गीकरणाचा विचार करा. जर तुमच्या डेटामधील बहुतांश भाग एका वर्गाचा असेल, तर मशीन लर्निंग मॉडेल त्या वर्गाचीच जास्त वेळा भविष्यवाणी करेल, कारण त्यासाठी अधिक डेटा उपलब्ध आहे. डेटाचे संतुलन साधणे म्हणजे कोणत्याही असमान डेटाला समतोलात आणणे आणि हा असमतोल दूर करणे. अनेक मॉडेल्स तेव्हा चांगले कार्य करतात जेव्हा निरीक्षणांची संख्या समान असते आणि त्यामुळे असंतुलित डेटासह त्यांना अडचण येते.\n",
|
|
"\n",
|
|
"असंतुलित डेटासेट्स हाताळण्यासाठी मुख्यतः दोन पद्धती आहेत:\n",
|
|
"\n",
|
|
"- अल्पसंख्याक वर्गामध्ये निरीक्षणे वाढवणे: `Over-sampling` उदा. SMOTE अल्गोरिदमचा वापर\n",
|
|
"\n",
|
|
"- बहुसंख्य वर्गामधून निरीक्षणे काढून टाकणे: `Under-sampling`\n",
|
|
"\n",
|
|
"आता आपण `recipe` चा वापर करून असंतुलित डेटासेट्स कसे हाताळायचे ते दाखवू. एक recipe म्हणजे एक प्रकारचा आराखडा आहे, जो डेटासेटवर कोणते टप्पे लागू करायचे आहेत हे सांगतो, जेणेकरून तो डेटा विश्लेषणासाठी तयार होईल.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "soAw6826JKx9"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Load themis package for dealing with imbalanced data\r\n",
|
|
"library(themis)\r\n",
|
|
"\r\n",
|
|
"# Create a recipe for preprocessing data\r\n",
|
|
"cuisines_recipe <- recipe(cuisine ~ ., data = df_select) %>% \r\n",
|
|
" step_smote(cuisine)\r\n",
|
|
"\r\n",
|
|
"cuisines_recipe"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "HS41brUIJVJy"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"चला आपल्या पूर्वतयारीच्या टप्प्यांचे विश्लेषण करूया.\n",
|
|
"\n",
|
|
"- `recipe()` ला फॉर्म्युलासह कॉल केल्यावर, `df_select` डेटाचा संदर्भ वापरून रेसिपीला व्हेरिएबल्सचे *roles* सांगितले जातात. उदाहरणार्थ, `cuisine` कॉलमला `outcome` भूमिका दिली गेली आहे, तर उर्वरित कॉलम्सना `predictor` भूमिका दिली गेली आहे.\n",
|
|
"\n",
|
|
"- [`step_smote(cuisine)`](https://themis.tidymodels.org/reference/step_smote.html) एक रेसिपी स्टेपची *specification* तयार करते जी अल्पसंख्याक वर्गाचे नवीन उदाहरणे सिंथेटिक पद्धतीने तयार करते, ज्यासाठी त्या केसचे जवळचे शेजारी वापरले जातात.\n",
|
|
"\n",
|
|
"आता, जर आपल्याला पूर्वतयार केलेला डेटा पाहायचा असेल, तर आपल्याला [**`prep()`**](https://recipes.tidymodels.org/reference/prep.html) आणि [**`bake()`**](https://recipes.tidymodels.org/reference/bake.html) आपल्या रेसिपीवर वापरावे लागेल.\n",
|
|
"\n",
|
|
"`prep()`: प्रशिक्षण सेटमधून आवश्यक पॅरामीटर्सचा अंदाज घेतो, जे नंतर इतर डेटा सेट्सवर लागू करता येतात.\n",
|
|
"\n",
|
|
"`bake()`: पूर्वतयार केलेल्या रेसिपीला घेऊन कोणत्याही डेटा सेटवर ऑपरेशन्स लागू करतो.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "Yb-7t7XcJaC8"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Prep and bake the recipe\r\n",
|
|
"preprocessed_df <- cuisines_recipe %>% \r\n",
|
|
" prep() %>% \r\n",
|
|
" bake(new_data = NULL) %>% \r\n",
|
|
" relocate(cuisine)\r\n",
|
|
"\r\n",
|
|
"# Display data\r\n",
|
|
"preprocessed_df %>% \r\n",
|
|
" slice_head(n = 5)\r\n",
|
|
"\r\n",
|
|
"# Quick summary stats\r\n",
|
|
"preprocessed_df %>% \r\n",
|
|
" introduce()"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "9QhSgdpxJl44"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"आता आपण आपल्या खाद्यपदार्थांचे वितरण तपासूया आणि त्यांची असंतुलित डेटाशी तुलना करूया.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "dmidELh_LdV7"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Distribution of cuisines\r\n",
|
|
"new_label_count <- preprocessed_df %>% \r\n",
|
|
" count(cuisine) %>% \r\n",
|
|
" arrange(desc(n))\r\n",
|
|
"\r\n",
|
|
"list(new_label_count = new_label_count,\r\n",
|
|
" old_label_count = old_label_count)"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "aSh23klBLwDz"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"यम! डेटा स्वच्छ, संतुलित आणि खूपच स्वादिष्ट आहे 😋!\n",
|
|
"\n",
|
|
"> सामान्यतः, एखाद्या कृतीचा वापर मॉडेलिंगसाठी पूर्वप्रक्रिया म्हणून केला जातो, जिथे ती डेटा सेटवर कोणते पायऱ्या लागू करायच्या आहेत हे ठरवते, जेणेकरून तो मॉडेलिंगसाठी तयार होईल. अशा परिस्थितीत, `workflow()` चा वापर सामान्यतः केला जातो (जसे आपण आपल्या मागील धड्यांमध्ये पाहिले आहे) कृतीचा अंदाज स्वतःहून न लावता.\n",
|
|
">\n",
|
|
"> त्यामुळे, तुम्हाला सामान्यतः **`prep()`** आणि **`bake()`** कृतींची गरज नसते जेव्हा तुम्ही tidymodels वापरता, पण त्या तुमच्या टूलकिटमध्ये उपयुक्त फंक्शन्स असतात, जे कृती अपेक्षेप्रमाणे कार्य करत आहेत का हे पुष्टी करण्यासाठी उपयोगी ठरतात, जसे आपल्या उदाहरणात आहे.\n",
|
|
">\n",
|
|
"> जेव्हा तुम्ही **`bake()`** केलेल्या कृतीला **`new_data = NULL`** सह वापरता, तेव्हा तुम्हाला कृती परिभाषित करताना दिलेला डेटा परत मिळतो, पण तो पूर्वप्रक्रिया पायऱ्यांमधून गेला असतो.\n",
|
|
"\n",
|
|
"आता भविष्यातील धड्यांसाठी या डेटाची एक प्रत सेव्ह करूया:\n"
|
|
],
|
|
"metadata": {
|
|
"id": "HEu80HZ8L7ae"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Save preprocessed data\r\n",
|
|
"write_csv(preprocessed_df, \"../../../data/cleaned_cuisines_R.csv\")"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "cBmCbIgrMOI6"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"हा नवीन CSV आता मूळ डेटा फोल्डरमध्ये उपलब्ध आहे.\n",
|
|
"\n",
|
|
"**🚀चॅलेंज**\n",
|
|
"\n",
|
|
"या अभ्यासक्रमात अनेक मनोरंजक डेटासेट्स आहेत. `data` फोल्डर्समध्ये शोधा आणि तपासा की त्यामध्ये बायनरी किंवा मल्टी-क्लास वर्गीकरणासाठी योग्य डेटासेट्स आहेत का? तुम्ही या डेटासेटबद्दल कोणते प्रश्न विचाराल?\n",
|
|
"\n",
|
|
"## [**व्याख्यानानंतरचा क्विझ**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/20/)\n",
|
|
"\n",
|
|
"## **पुनरावलोकन आणि स्व-अभ्यास**\n",
|
|
"\n",
|
|
"- [पॅकेज themis](https://github.com/tidymodels/themis) तपासा. असमतोल डेटाशी व्यवहार करण्यासाठी आपण कोणत्या इतर तंत्रांचा वापर करू शकतो?\n",
|
|
"\n",
|
|
"- टायडी मॉडेल्स [संदर्भ वेबसाइट](https://www.tidymodels.org/start/).\n",
|
|
"\n",
|
|
"- एच. विकहॅम आणि जी. ग्रोलमंड, [*R फॉर डेटा सायन्स: व्हिज्युअलाइझ, मॉडेल, ट्रान्सफॉर्म, टायडी, आणि इम्पोर्ट डेटा*](https://r4ds.had.co.nz/).\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",
|
|
"<p >\n",
|
|
" <img src=\"../../images/r_learners_sm.jpeg\"\n",
|
|
" width=\"600\"/>\n",
|
|
" <figcaption>@allison_horst यांचे कलाकृती</figcaption>\n"
|
|
],
|
|
"metadata": {
|
|
"id": "WQs5621pMGwf"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"\n---\n\n**अस्वीकरण**: \nहा दस्तऐवज AI भाषांतर सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) वापरून भाषांतरित करण्यात आला आहे. आम्ही अचूकतेसाठी प्रयत्नशील असलो तरी कृपया लक्षात ठेवा की स्वयंचलित भाषांतरांमध्ये त्रुटी किंवा अचूकतेचा अभाव असू शकतो. मूळ भाषेतील दस्तऐवज हा अधिकृत स्रोत मानला जावा. महत्त्वाच्या माहितीसाठी व्यावसायिक मानवी भाषांतराची शिफारस केली जाते. या भाषांतराचा वापर करून निर्माण होणाऱ्या कोणत्याही गैरसमज किंवा चुकीच्या अर्थासाठी आम्ही जबाबदार राहणार नाही.\n"
|
|
]
|
|
}
|
|
]
|
|
} |