{ "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",
"
\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"
]
}
]
}