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
44 KiB
719 lines
44 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-09-04T02:51:22+00:00",
|
|
"source_file": "4-Classification/1-Introduction/solution/R/lesson_10-R.ipynb",
|
|
"language_code": "hi"
|
|
}
|
|
},
|
|
"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) ईडीए प्रक्रिया और रिपोर्ट जनरेशन को सरल और स्वचालित करने के लिए बनाया गया है।\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": [
|
|
"दिलचस्प! देखने से लगता है कि पहली कॉलम एक प्रकार की `id` कॉलम है। आइए डेटा के बारे में थोड़ी और जानकारी प्राप्त करें।\n"
|
|
],
|
|
"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",
|
|
"> एक [tibble](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 क्रियाओं](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 द्वारा बनाया गया यह [*कला*-युक्त 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",
|
|
"- अल्पसंख्यक वर्ग में अवलोकन जोड़ना: `ओवर-सैंपलिंग`, जैसे SMOTE एल्गोरिदम का उपयोग करना\n",
|
|
"\n",
|
|
"- बहुसंख्यक वर्ग से अवलोकन हटाना: `अंडर-सैंपलिंग`\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": [],
|
|
"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",
|
|
"> इस प्रकार, जब आप tidymodels का उपयोग करते हैं तो आपको आमतौर पर **`prep()`** और **`bake()`** रेसिपी की आवश्यकता नहीं होती है, लेकिन ये आपके टूलकिट में उपयोगी फंक्शन होते हैं ताकि यह सुनिश्चित किया जा सके कि रेसिपी वही कर रही है जो आप उम्मीद कर रहे हैं, जैसे कि हमारे मामले में।\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",
|
|
"[`एलिसन हॉर्स्ट`](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",
|
|
"[कैसी ब्रेवियू](https://www.twitter.com/cassieview) और [जेन लूपर](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"
|
|
]
|
|
}
|
|
]
|
|
} |