{ "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-29T14:57:02+00:00", "source_file": "2-Regression/1-Tools/solution/R/lesson_1-R.ipynb", "language_code": "ur" } }, "cells": [ { "cell_type": "markdown", "source": [ "ریگریشن ماڈل بنائیں: ریگریشن ماڈلز کے لیے R اور Tidymodels کے ساتھ شروعات کریں\n" ], "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 کا حصہ ہے، ڈیٹا کو منظم کرنے کا ایک گرامر ہے جو ایک مستقل سیٹ فراہم کرتا ہے تاکہ آپ عام ڈیٹا منیپولیشن کے مسائل کو حل کر سکیں۔\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. ٹائیڈی ماڈلز کے ساتھ ایک لینیئر ریگریشن ماڈل ٹرین کریں\n",
"\n",
"اب ہم اپنے ماڈل کو ٹرین کرنے کے لیے تیار ہیں!\n",
"\n",
"ٹائیڈی ماڈلز میں، آپ ماڈلز کو `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": [
"ماڈل کے نتائج سے، ہم تربیت کے دوران سیکھے گئے coefficients دیکھ سکتے ہیں۔ یہ coefficients بہترین فٹ کی لائن کے coefficients کی نمائندگی کرتے ہیں جو ہمیں اصل اور پیش گوئی شدہ متغیر کے درمیان کم سے کم مجموعی غلطی فراہم کرتے ہیں۔\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 کا اصول ہمیشہ نتائج کے لیے ایک 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"
]
}
]
}