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.
ML-For-Beginners/translations/mr/2-Regression/1-Tools/solution/R/lesson_1-R.ipynb

447 lines
28 KiB

{
"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-08-29T19:00:29+00:00",
"source_file": "2-Regression/1-Tools/solution/R/lesson_1-R.ipynb",
"language_code": "mr"
}
},
"cells": [
{
"cell_type": "markdown",
"source": [],
"metadata": {
"id": "YJUHCXqK57yz"
}
},
{
"cell_type": "markdown",
"source": [
"## रिग्रेशनची ओळख - धडा 1\n",
"\n",
"#### दृष्टीकोनातून पाहणे\n",
"\n",
"✅ रिग्रेशनच्या अनेक पद्धती आहेत, आणि तुम्ही कोणती निवडता हे तुम्हाला शोधायच्या उत्तरावर अवलंबून असते. जर तुम्हाला दिलेल्या वयाच्या व्यक्तीची संभाव्य उंची अंदाज करायची असेल, तर तुम्ही `linear regression` वापराल, कारण तुम्ही **सांख्यिकीय मूल्य** शोधत आहात. जर तुम्हाला एखाद्या प्रकारच्या खाद्यपदार्थाला शाकाहारी मानावे की नाही हे शोधायचे असेल, तर तुम्ही **वर्गीकृत असाइनमेंट** शोधत आहात, त्यामुळे तुम्ही `logistic regression` वापराल. तुम्ही नंतर logistic regression बद्दल अधिक शिकाल. डेटा संबंधित काही प्रश्न विचार करा आणि या पद्धतींपैकी कोणती अधिक योग्य असेल याचा विचार करा.\n",
"\n",
"या विभागात, तुम्ही [डायबेटीससंबंधित एक छोटे डेटासेट](https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html) वापराल. कल्पना करा की तुम्हाला मधुमेह असलेल्या रुग्णांसाठी उपचाराची चाचणी करायची आहे. मशीन लर्निंग मॉडेल्स तुम्हाला विविध व्हेरिएबल्सच्या संयोजनांवर आधारित कोणते रुग्ण उपचाराला चांगला प्रतिसाद देतील हे ठरवण्यास मदत करू शकतात. अगदी मूलभूत रिग्रेशन मॉडेल, जेव्हा व्हिज्युअलाइज केले जाते, तेव्हा व्हेरिएबल्सबद्दल माहिती दाखवू शकते जी तुम्हाला तुमच्या सैद्धांतिक क्लिनिकल चाचण्या आयोजित करण्यात मदत करू शकते.\n",
"\n",
"तर, चला या कार्याला सुरुवात करूया!\n",
"\n",
"<p >\n",
" <img src=\"../../images/encouRage.jpg\"\n",
" width=\"630\"/>\n",
" <figcaption>कला @allison_horst</figcaption>\n",
"\n",
"<!--![कला \\@allison_horst](../../../../../../translated_images/encouRage.e75d5fe0367fb9136b78104baf4e2032a7622bc42a2bc34c0ad36c294eeb83f5.mr.jpg)<br>कला @allison_horst-->\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 वर दिलेला मधुमेह डेटासेट लोड करूया: <https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html>\n",
"\n",
"तसेच, आपण आपल्या डेटावर `glimpse()` वापरून एक साधारण तपासणी करू आणि `slice()` वापरून पहिल्या 5 ओळी प्रदर्शित करू.\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",
"<br>\n",
"\n",
"> `glimpse()` आणि `slice()` या [`dplyr`](https://dplyr.tidyverse.org/) मधील फंक्शन्स आहेत. Dplyr, जो Tidyverse चा भाग आहे, हा डेटा मॅनिप्युलेशनसाठी एक व्याकरण आहे, जो आपल्याला सर्वसामान्य डेटा मॅनिप्युलेशनच्या समस्यांचे निराकरण करण्यासाठी एकसंध क्रियापदांचा संच प्रदान करतो.\n",
"\n",
"<br>\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",
"<br>\n",
"\n",
"## ५. चाचणी संचावर अंदाज वर्तवा\n",
"\n",
"आता आपण एक मॉडेल प्रशिक्षित केले आहे, आपण [parsnip::predict()](https://parsnip.tidymodels.org/reference/predict.model_fit.html) वापरून चाचणी डेटासेटसाठी रोग प्रगती y चा अंदाज वर्तवू शकतो. हे डेटा गटांमधील रेषा काढण्यासाठी वापरले जाईल.\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 चा प्रघात नेहमीच परिणामांसाठी मानक स्तंभ नावांसह tibble/data frame तयार करणे आहे. यामुळे मूळ डेटा आणि अंदाज एकत्र करून त्याचा वापर पुढील ऑपरेशन्ससाठी, जसे की प्लॉटिंग, सोप्या स्वरूपात करता येतो.\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"
]
}
]
}