{ "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", "
\n",
" \n",
"
\n",
"\n",
"> `glimpse()` आणि `slice()` या [`dplyr`](https://dplyr.tidyverse.org/) मधील फंक्शन्स आहेत. Dplyr, जो Tidyverse चा भाग आहे, हा डेटा मॅनिप्युलेशनसाठी एक व्याकरण आहे, जो आपल्याला सर्वसामान्य डेटा मॅनिप्युलेशनच्या समस्यांचे निराकरण करण्यासाठी एकसंध क्रियापदांचा संच प्रदान करतो.\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",
"## ५. चाचणी संचावर अंदाज वर्तवा\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"
]
}
]
}