{ "nbformat": 4, "nbformat_minor": 2, "metadata": { "colab": { "name": "lesson_1-R.ipynb", "provenance": [], "collapsed_sections": [], "toc_visible": true }, "kernelspec": { "name": "ir", "display_name": "R" }, "language_info": { "name": "R" }, "coopTranslator": { "original_hash": "c18d3bd0bd8ae3878597e89dcd1fa5c1", "translation_date": "2025-09-04T01:36:12+00:00", "source_file": "2-Regression/1-Tools/solution/R/lesson_1-R.ipynb", "language_code": "hi" } }, "cells": [ { "cell_type": "markdown", "source": [], "metadata": { "id": "YJUHCXqK57yz" } }, { "cell_type": "markdown", "source": [ "## रिग्रेशन का परिचय - पाठ 1\n", "\n", "#### इसे परिप्रेक्ष्य में रखना\n", "\n", "✅ रिग्रेशन के कई प्रकार के तरीके होते हैं, और आप कौन सा तरीका चुनते हैं, यह इस पर निर्भर करता है कि आप किस प्रश्न का उत्तर ढूंढ रहे हैं। यदि आप किसी दिए गए उम्र के व्यक्ति की संभावित ऊंचाई का अनुमान लगाना चाहते हैं, तो आप `linear regression` का उपयोग करेंगे, क्योंकि आप एक **संख्यात्मक मान** की तलाश में हैं। यदि आप यह जानना चाहते हैं कि किसी प्रकार के व्यंजन को शाकाहारी माना जाना चाहिए या नहीं, तो आप एक **श्रेणी निर्धारण** की तलाश में हैं, इसलिए आप `logistic regression` का उपयोग करेंगे। आप बाद में लॉजिस्टिक रिग्रेशन के बारे में और जानेंगे। डेटा से पूछे जा सकने वाले कुछ प्रश्नों के बारे में सोचें, और इनमें से कौन सा तरीका अधिक उपयुक्त होगा।\n", "\n", "इस खंड में, आप [डायबिटीज़ पर एक छोटे डेटा सेट](https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html) के साथ काम करेंगे। कल्पना करें कि आप मधुमेह रोगियों के लिए एक उपचार का परीक्षण करना चाहते हैं। मशीन लर्निंग मॉडल यह निर्धारित करने में मदद कर सकते हैं कि कौन से रोगी उपचार के लिए बेहतर प्रतिक्रिया देंगे, विभिन्न चर के संयोजनों के आधार पर। यहां तक कि एक बहुत ही बुनियादी रिग्रेशन मॉडल, जब विज़ुअलाइज़ किया जाता है, तो उन चर के बारे में जानकारी दिखा सकता है जो आपके सैद्धांतिक नैदानिक परीक्षणों को व्यवस्थित करने में मदद कर सकते हैं।\n", "\n", "तो चलिए, इस कार्य को शुरू करते हैं!\n", "\n", "

\n", " \n", "

@allison_horst द्वारा कलाकृति
\n", "\n", "\n" ], "metadata": { "id": "LWNNzfqd6feZ" } }, { "cell_type": "markdown", "source": [ "## 1. हमारे टूल सेट को लोड करना\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", "आप इन्हें इस प्रकार इंस्टॉल कर सकते हैं:\n", "\n", "`install.packages(c(\"tidyverse\", \"tidymodels\"))`\n", "\n", "नीचे दिया गया स्क्रिप्ट यह जांचता है कि इस मॉड्यूल को पूरा करने के लिए आवश्यक पैकेज आपके पास हैं या नहीं, और यदि कुछ पैकेज गायब हैं तो उन्हें आपके लिए इंस्टॉल कर देता है।\n" ], "metadata": { "id": "FIo2YhO26wI9" } }, { "cell_type": "code", "execution_count": 2, "source": [ "suppressWarnings(if(!require(\"pacman\")) install.packages(\"pacman\"))\n", "pacman::p_load(tidyverse, tidymodels)" ], "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "Loading required package: pacman\n", "\n" ] } ], "metadata": { "id": "cIA9fz9v7Dss", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "2df7073b-86b2-4b32-cb86-0da605a0dc11" } }, { "cell_type": "markdown", "source": [ "अब, आइए इन शानदार पैकेजों को लोड करें और उन्हें हमारे वर्तमान R सत्र में उपलब्ध कराएं। (यह केवल उदाहरण के लिए है, `pacman::p_load()` ने यह पहले ही आपके लिए कर दिया है)\n" ], "metadata": { "id": "gpO_P_6f9WUG" } }, { "cell_type": "code", "execution_count": null, "source": [ "# load the core Tidyverse packages\r\n", "library(tidyverse)\r\n", "\r\n", "# load the core Tidymodels packages\r\n", "library(tidymodels)\r\n" ], "outputs": [], "metadata": { "id": "NLMycgG-9ezO" } }, { "cell_type": "markdown", "source": [ "## 2. डायबिटीज डेटा सेट\n", "\n", "इस अभ्यास में, हम अपने रिग्रेशन कौशल का प्रदर्शन करेंगे और डायबिटीज डेटा सेट पर भविष्यवाणियां करेंगे। [डायबिटीज डेटा सेट](https://www4.stat.ncsu.edu/~boos/var.select/diabetes.rwrite1.txt) में डायबिटीज से संबंधित `442 नमूनों` का डेटा शामिल है, जिसमें 10 भविष्यवाणी करने वाले फीचर वेरिएबल्स हैं: `उम्र`, `लिंग`, `बॉडी मास इंडेक्स`, `औसत ब्लड प्रेशर`, और `छह ब्लड सीरम माप`, साथ ही एक परिणाम वेरिएबल `y`: एक साल बाद बीमारी की प्रगति का मात्रात्मक माप।\n", "\n", "|अवलोकनों की संख्या|442|\n", "|------------------|:---|\n", "|भविष्यवाणी करने वाले वेरिएबल्स की संख्या|पहले 10 कॉलम संख्यात्मक भविष्यवाणी करने वाले हैं|\n", "|परिणाम/लक्ष्य|कॉलम 11 एक साल बाद बीमारी की प्रगति का मात्रात्मक माप है|\n", "|भविष्यवाणी करने वाले वेरिएबल्स की जानकारी|- उम्र (सालों में)\n", "||- लिंग\n", "||- बॉडी मास इंडेक्स (BMI)\n", "||- औसत ब्लड प्रेशर (BP)\n", "||- s1 tc, कुल सीरम कोलेस्ट्रॉल\n", "||- s2 ldl, लो-डेंसिटी लिपोप्रोटीन\n", "||- s3 hdl, हाई-डेंसिटी लिपोप्रोटीन\n", "||- s4 tch, कुल कोलेस्ट्रॉल / HDL\n", "||- s5 ltg, संभवतः सीरम ट्राइग्लिसराइड्स स्तर का लॉग\n", "||- s6 glu, ब्लड शुगर स्तर|\n", "\n", "> 🎓 याद रखें, यह सुपरवाइज्ड लर्निंग है, और हमें एक नामित 'y' लक्ष्य की आवश्यकता है।\n", "\n", "R के साथ डेटा को मैनिपुलेट करने से पहले, आपको डेटा को R की मेमोरी में इंपोर्ट करना होगा, या डेटा तक पहुंचने के लिए R के साथ एक कनेक्शन बनाना होगा।\n", "\n", "> [readr](https://readr.tidyverse.org/) पैकेज, जो Tidyverse का हिस्सा है, R में आयताकार डेटा को तेज़ और आसान तरीके से पढ़ने की सुविधा प्रदान करता है।\n", "\n", "अब, आइए इस स्रोत URL से प्रदान किए गए डायबिटीज डेटा सेट को लोड करें: \n", "\n", "साथ ही, हम अपने डेटा पर एक त्वरित जांच करेंगे `glimpse()` का उपयोग करके और पहले 5 पंक्तियों को `slice()` के माध्यम से प्रदर्शित करेंगे।\n", "\n", "आगे बढ़ने से पहले, आइए कुछ ऐसा भी जानें जिसे आप अक्सर R कोड में देखेंगे 🥁🥁: पाइप ऑपरेटर `%>%`\n", "\n", "पाइप ऑपरेटर (`%>%`) तार्किक क्रम में ऑपरेशन्स को अंजाम देता है, जिसमें एक ऑब्जेक्ट को आगे किसी फंक्शन या कॉल एक्सप्रेशन में पास किया जाता है। आप पाइप ऑपरेटर को अपने कोड में \"और फिर\" कहने जैसा समझ सकते हैं।\n" ], "metadata": { "id": "KM6iXLH996Cl" } }, { "cell_type": "code", "execution_count": null, "source": [ "# Import the data set\r\n", "diabetes <- read_table2(file = \"https://www4.stat.ncsu.edu/~boos/var.select/diabetes.rwrite1.txt\")\r\n", "\r\n", "\r\n", "# Get a glimpse and dimensions of the data\r\n", "glimpse(diabetes)\r\n", "\r\n", "\r\n", "# Select the first 5 rows of the data\r\n", "diabetes %>% \r\n", " slice(1:5)" ], "outputs": [], "metadata": { "id": "Z1geAMhM-bSP" } }, { "cell_type": "markdown", "source": [ "`glimpse()` हमें दिखाता है कि इस डेटा में 442 पंक्तियाँ और 11 कॉलम हैं, और सभी कॉलम का डेटा प्रकार `double` है।\n", "\n", "
\n", "\n", "> `glimpse()` और `slice()` [`dplyr`](https://dplyr.tidyverse.org/) की फंक्शन हैं। Dplyr, जो Tidyverse का हिस्सा है, डेटा को मैनेज करने का एक व्याकरण है, जो एक समान सेट के क्रियाओं (verbs) को प्रदान करता है, जिससे आप डेटा मैनेजमेंट से जुड़ी आम समस्याओं को हल कर सकते हैं।\n", "\n", "
\n", "\n", "अब जब हमारे पास डेटा है, तो इस अभ्यास के लिए हम एक फीचर (`bmi`) पर ध्यान केंद्रित करेंगे। इसके लिए हमें वांछित कॉलम को चुनना होगा। तो, हम यह कैसे करेंगे?\n", "\n", "[`dplyr::select()`](https://dplyr.tidyverse.org/reference/select.html) हमें डेटा फ्रेम में कॉलम को *चुनने* (और वैकल्पिक रूप से उनका नाम बदलने) की अनुमति देता है।\n" ], "metadata": { "id": "UwjVT1Hz-c3Z" } }, { "cell_type": "code", "execution_count": null, "source": [ "# Select predictor feature `bmi` and outcome `y`\r\n", "diabetes_select <- diabetes %>% \r\n", " select(c(bmi, y))\r\n", "\r\n", "# Print the first 5 rows\r\n", "diabetes_select %>% \r\n", " slice(1:10)" ], "outputs": [], "metadata": { "id": "RDY1oAKI-m80" } }, { "cell_type": "markdown", "source": [ "## 3. प्रशिक्षण और परीक्षण डेटा\n", "\n", "सुपरवाइज्ड लर्निंग में डेटा को दो उपसेट्स में *विभाजित* करना आम प्रथा है; एक (आमतौर पर बड़ा) सेट जिसका उपयोग मॉडल को प्रशिक्षित करने के लिए किया जाता है, और एक छोटा \"होल्ड-बैक\" सेट जिसका उपयोग यह देखने के लिए किया जाता है कि मॉडल ने कैसा प्रदर्शन किया।\n", "\n", "अब जब हमारे पास डेटा तैयार है, तो हम देख सकते हैं कि क्या मशीन इस डेटासेट में संख्याओं के बीच एक तार्किक विभाजन निर्धारित करने में मदद कर सकती है। हम [rsample](https://tidymodels.github.io/rsample/) पैकेज का उपयोग कर सकते हैं, जो Tidymodels फ्रेमवर्क का हिस्सा है, एक ऑब्जेक्ट बनाने के लिए जिसमें डेटा को *कैसे* विभाजित करना है इसकी जानकारी होती है, और फिर दो और rsample फ़ंक्शन्स का उपयोग करके बनाए गए प्रशिक्षण और परीक्षण सेट्स को निकाल सकते हैं:\n" ], "metadata": { "id": "SDk668xK-tc3" } }, { "cell_type": "code", "execution_count": null, "source": [ "set.seed(2056)\r\n", "# Split 67% of the data for training and the rest for tesing\r\n", "diabetes_split <- diabetes_select %>% \r\n", " initial_split(prop = 0.67)\r\n", "\r\n", "# Extract the resulting train and test sets\r\n", "diabetes_train <- training(diabetes_split)\r\n", "diabetes_test <- testing(diabetes_split)\r\n", "\r\n", "# Print the first 3 rows of the training set\r\n", "diabetes_train %>% \r\n", " slice(1:10)" ], "outputs": [], "metadata": { "id": "EqtHx129-1h-" } }, { "cell_type": "markdown", "source": [ "## 4. Tidymodels के साथ एक लीनियर रिग्रेशन मॉडल ट्रेन करें\n", "\n", "अब हम अपने मॉडल को ट्रेन करने के लिए तैयार हैं!\n", "\n", "Tidymodels में, आप `parsnip()` का उपयोग करके तीन मुख्य अवधारणाओं को निर्दिष्ट करके मॉडल सेट करते हैं:\n", "\n", "- मॉडल का **प्रकार** विभिन्न मॉडलों को अलग करता है, जैसे लीनियर रिग्रेशन, लॉजिस्टिक रिग्रेशन, डिसीजन ट्री मॉडल, आदि।\n", "\n", "- मॉडल का **मोड** सामान्य विकल्पों जैसे रिग्रेशन और क्लासिफिकेशन को शामिल करता है; कुछ मॉडल प्रकार इनमें से किसी एक को सपोर्ट करते हैं, जबकि कुछ केवल एक ही मोड रखते हैं।\n", "\n", "- मॉडल का **इंजन** वह गणनात्मक टूल है जिसका उपयोग मॉडल को फिट करने के लिए किया जाएगा। अक्सर ये R पैकेज होते हैं, जैसे **`\"lm\"`** या **`\"ranger\"`**।\n", "\n", "यह मॉडलिंग जानकारी एक मॉडल स्पेसिफिकेशन में कैप्चर की जाती है, तो चलिए इसे बनाते हैं!\n" ], "metadata": { "id": "sBOS-XhB-6v7" } }, { "cell_type": "code", "execution_count": null, "source": [ "# Build a linear model specification\r\n", "lm_spec <- \r\n", " # Type\r\n", " linear_reg() %>% \r\n", " # Engine\r\n", " set_engine(\"lm\") %>% \r\n", " # Mode\r\n", " set_mode(\"regression\")\r\n", "\r\n", "\r\n", "# Print the model specification\r\n", "lm_spec" ], "outputs": [], "metadata": { "id": "20OwEw20--t3" } }, { "cell_type": "markdown", "source": [ "एक बार मॉडल को *निर्धारित* कर लिया गया हो, तो मॉडल को [`fit()`](https://parsnip.tidymodels.org/reference/fit.html) फ़ंक्शन का उपयोग करके `अनुमानित` या `प्रशिक्षित` किया जा सकता है, आमतौर पर एक सूत्र और कुछ डेटा का उपयोग करके।\n", "\n", "`y ~ .` का मतलब है कि हम `y` को पूर्वानुमानित मात्रा/लक्ष्य के रूप में फिट करेंगे, जिसे सभी पूर्वानुमानकों/विशेषताओं द्वारा समझाया जाएगा, यानी `.` (इस मामले में, हमारे पास केवल एक पूर्वानुमानक है: `bmi`)।\n" ], "metadata": { "id": "_oDHs89k_CJj" } }, { "cell_type": "code", "execution_count": null, "source": [ "# Build a linear model specification\r\n", "lm_spec <- linear_reg() %>% \r\n", " set_engine(\"lm\") %>%\r\n", " set_mode(\"regression\")\r\n", "\r\n", "\r\n", "# Train a linear regression model\r\n", "lm_mod <- lm_spec %>% \r\n", " fit(y ~ ., data = diabetes_train)\r\n", "\r\n", "# Print the model\r\n", "lm_mod" ], "outputs": [], "metadata": { "id": "YlsHqd-q_GJQ" } }, { "cell_type": "markdown", "source": [ "मॉडल आउटपुट से, हम प्रशिक्षण के दौरान सीखे गए गुणांक देख सकते हैं। ये गुणांक उस सर्वश्रेष्ठ फिट लाइन के गुणांक को दर्शाते हैं, जो वास्तविक और अनुमानित चर के बीच कुल त्रुटि को न्यूनतम करता है। \n", "
\n", "\n", "## 5. परीक्षण सेट पर भविष्यवाणियां करें\n", "\n", "अब जब हमने एक मॉडल प्रशिक्षित कर लिया है, तो हम इसका उपयोग परीक्षण डेटासेट के लिए बीमारी की प्रगति y की भविष्यवाणी करने के लिए कर सकते हैं, [parsnip::predict()](https://parsnip.tidymodels.org/reference/predict.model_fit.html) का उपयोग करके। इसका उपयोग डेटा समूहों के बीच रेखा खींचने के लिए किया जाएगा। \n" ], "metadata": { "id": "kGZ22RQj_Olu" } }, { "cell_type": "code", "execution_count": null, "source": [ "# Make predictions for the test set\r\n", "predictions <- lm_mod %>% \r\n", " predict(new_data = diabetes_test)\r\n", "\r\n", "# Print out some of the predictions\r\n", "predictions %>% \r\n", " slice(1:5)" ], "outputs": [], "metadata": { "id": "nXHbY7M2_aao" } }, { "cell_type": "markdown", "source": [ "वाह! 💃🕺 हमने अभी एक मॉडल को प्रशिक्षित किया और इसका उपयोग भविष्यवाणियां करने के लिए किया!\n", "\n", "भविष्यवाणियां करते समय, tidymodels की परंपरा है कि हमेशा परिणामों का एक टिबल/डेटा फ्रेम तैयार किया जाए जिसमें मानकीकृत कॉलम नाम हों। यह मूल डेटा और भविष्यवाणियों को एक उपयोगी प्रारूप में संयोजित करना आसान बनाता है, जिसे बाद के कार्यों जैसे कि प्लॉटिंग के लिए उपयोग किया जा सकता है।\n", "\n", "`dplyr::bind_cols()` कई डेटा फ्रेम्स को कॉलम के रूप में कुशलतापूर्वक जोड़ता है।\n" ], "metadata": { "id": "R_JstwUY_bIs" } }, { "cell_type": "code", "execution_count": null, "source": [ "# Combine the predictions and the original test set\r\n", "results <- diabetes_test %>% \r\n", " bind_cols(predictions)\r\n", "\r\n", "\r\n", "results %>% \r\n", " slice(1:5)" ], "outputs": [], "metadata": { "id": "RybsMJR7_iI8" } }, { "cell_type": "markdown", "source": [ "## 6. मॉडलिंग परिणामों का प्लॉट करें\n", "\n", "अब, इसे विज़ुअली देखने का समय है 📈। हम टेस्ट सेट के सभी `y` और `bmi` मानों का एक स्कैटर प्लॉट बनाएंगे, फिर भविष्यवाणियों का उपयोग करके मॉडल के डेटा समूहों के बीच सबसे उपयुक्त स्थान पर एक रेखा खींचेंगे।\n", "\n", "R में ग्राफ बनाने के लिए कई सिस्टम हैं, लेकिन `ggplot2` सबसे सुंदर और सबसे बहुमुखी में से एक है। यह आपको **स्वतंत्र घटकों को मिलाकर** ग्राफ बनाने की अनुमति देता है।\n" ], "metadata": { "id": "XJbYbMZW_n_s" } }, { "cell_type": "code", "execution_count": null, "source": [ "# Set a theme for the plot\r\n", "theme_set(theme_light())\r\n", "# Create a scatter plot\r\n", "results %>% \r\n", " ggplot(aes(x = bmi)) +\r\n", " # Add a scatter plot\r\n", " geom_point(aes(y = y), size = 1.6) +\r\n", " # Add a line plot\r\n", " geom_line(aes(y = .pred), color = \"blue\", size = 1.5)" ], "outputs": [], "metadata": { "id": "R9tYp3VW_sTn" } }, { "cell_type": "markdown", "source": [ "✅ यहाँ थोड़ा सोचें कि यहाँ क्या हो रहा है। एक सीधी रेखा कई छोटे डेटा बिंदुओं के बीच से गुजर रही है, लेकिन यह वास्तव में क्या कर रही है? क्या आप देख सकते हैं कि इस रेखा का उपयोग करके आप यह अनुमान कैसे लगा सकते हैं कि एक नया, अनदेखा डेटा बिंदु प्लॉट के y अक्ष के संबंध में कहाँ फिट होगा? इस मॉडल के व्यावहारिक उपयोग को शब्दों में व्यक्त करने की कोशिश करें।\n", "\n", "बधाई हो, आपने अपना पहला लीनियर रिग्रेशन मॉडल बनाया, इसके साथ एक भविष्यवाणी की, और इसे एक प्लॉट में प्रदर्शित किया!\n" ], "metadata": { "id": "zrPtHIxx_tNI" } }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n---\n\n**अस्वीकरण**: \nयह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \n" ] } ] }