{ "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-06T11:50:45+00:00", "source_file": "2-Regression/1-Tools/solution/R/lesson_1-R.ipynb", "language_code": "my" } }, "cells": [ { "cell_type": "markdown", "source": [], "metadata": { "id": "YJUHCXqK57yz" } }, { "cell_type": "markdown", "source": [ "## ရေဂရက်ရှင်းကို နားလည်ခြင်း - ပထမပိုင်း သင်ခန်းစာ\n", "\n", "#### အခြေအနေကို နားလည်ခြင်း\n", "\n", "✅ ရေဂရက်ရှင်းနည်းလမ်းအမျိုးမျိုး ရှိပြီး သင်ရွေးချယ်မည့်နည်းလမ်းသည် သင်လိုချင်သော အဖြေကို မူတည်ပါသည်။ ဥပမာအားဖြင့် သတ်မှတ်အသက်ရှိသူတစ်ဦး၏ အမြင့်ကို ခန့်မှန်းလိုပါက သင်သည် **ဂဏန်းတန်ဖိုး** ရှာဖွေလိုသောကြောင့် `linear regression` ကို အသုံးပြုမည်ဖြစ်သည်။ သို့သော် အစားအစာအမျိုးအစားတစ်ခုကို သက်သေရှင်းလင်းစွာ သက်သေပြ၍ vegan ဟုတ်မဟုတ်ကို သတ်မှတ်လိုပါက သင်သည် **အမျိုးအစားခွဲခြားမှု** ရှာဖွေလိုသောကြောင့် `logistic regression` ကို အသုံးပြုမည်ဖြစ်သည်။ Logistic regression အကြောင်းကို နောက်ပိုင်းတွင် ပိုမိုလေ့လာနိုင်ပါမည်။ ဒေတာမှ မေးခွန်းတစ်ချို့ကို မေးနိုင်မည့်အကြောင်းနှင့် အထိုက်အလျောက် နည်းလမ်းများကို သုံးသင့်မည်ကို စဉ်းစားကြည့်ပါ။\n", "\n", "ဤအပိုင်းတွင် သင်သည် [ဆေးချိုရောဂါဆိုင်ရာ ဒေတာအနည်းငယ်](https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html) နှင့် အလုပ်လုပ်မည်ဖြစ်သည်။ ဆေးချိုရောဂါရှိသူများအတွက် ကုသမှုတစ်ခုကို စမ်းသပ်လိုကြောင်း စဉ်းစားကြည့်ပါ။ Machine Learning မော်ဒယ်များက မျိုးစုံသော အချက်အလက်ပေါင်းစပ်မှုများအပေါ် မူတည်၍ ဘယ်သူတွေက ကုသမှုကို ပိုမိုတုံ့ပြန်နိုင်မည်ကို သတ်မှတ်ရန် ကူညီနိုင်ပါသည်။ ရိုးရှင်းသော ရေဂရက်ရှင်းမော်ဒယ်တစ်ခုတောင် visualization ပြုလုပ်ပါက သင်၏ သီအိုရီဆိုင်ရာ ဆေးဘက်ဆိုင်ရာ စမ်းသပ်မှုများကို စီမံခန့်ခွဲရန် အထောက်အကူဖြစ်စေမည့် အချက်အလက်များကို ပြသနိုင်ပါသည်။\n", "\n", "ဒါဆိုရင် ဒီအလုပ်ကို စတင်လိုက်ကြစို့!\n", "\n", "
\n",
" \n",
"
\n",
"\n",
"> glimpse() နဲ့ slice() ဟာ [`dplyr`](https://dplyr.tidyverse.org/) မှာပါတဲ့ function တွေဖြစ်ပါတယ်။ Dplyr ဟာ Tidyverse ရဲ့ အစိတ်အပိုင်းတစ်ခုဖြစ်ပြီး ဒေတာကို စနစ်တကျ ပြုပြင်နိုင်ဖို့ အထောက်အကူပြုတဲ့ verbs တွေကို ပေးစွမ်းတဲ့ grammar တစ်ခုဖြစ်ပါတယ်။\n",
"\n",
"
\n",
"\n",
"အခု ဒေတာရရှိပြီးတဲ့အခါမှာ ဒီအတန်းအတွက် `bmi` feature တစ်ခုကို ရွေးချယ်ပြီး အာရုံစိုက်ဖို့ narrow down လုပ်မယ်။ ဒါကို လုပ်ဖို့အတွက် လိုအပ်တဲ့ ကော်လံတွေကို ရွေးချယ်ရမယ်။ ဒါကို ဘယ်လိုလုပ်မလဲ?\n",
"\n",
"[`dplyr::select()`](https://dplyr.tidyverse.org/reference/select.html) ဟာ data frame ထဲက ကော်လံတွေကို *ရွေးချယ်* (လိုအပ်လျှင် အမည်ပြောင်း) လုပ်နိုင်စေတဲ့ function တစ်ခုဖြစ်ပါတယ်။\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": [
"## ၃။ သင်ကြားမှုနှင့် စမ်းသပ်မှု ဒေတာ\n",
"\n",
"အထောက်အထားအပေါ်မူတည်သော သင်ကြားမှု (supervised learning) တွင် ဒေတာကို *ခွဲခြား*၍ အသုံးပြုခြင်းသည် ရိုးရာအလေ့အထဖြစ်သည်။ ဒေတာကို (အများအားဖြင့် ပိုကြီးမားသော) သင်ကြားမှုအတွက် အသုံးပြုမည့်အစုနှင့်၊ မော်ဒယ်၏ စွမ်းဆောင်ရည်ကို စမ်းသပ်ရန် အသုံးပြုမည့် ပိုသေးငယ်သော \"အနားထား\" အစုအဖြစ် ခွဲခြားသည်။\n",
"\n",
"ယခုအခါ ဒေတာများကို ပြင်ဆင်ပြီးဖြစ်သောကြောင့်၊ ဒီဒေတာအစုအတွင်းရှိ နံပါတ်များကို သဘာဝကျကျ ခွဲခြားနိုင်ရန် စက်တစ်လုံးက ကူညီပေးနိုင်မလားဆိုတာ ကြည့်နိုင်ပါပြီ။ [rsample](https://tidymodels.github.io/rsample/) package ကို အသုံးပြုနိုင်ပြီး၊ ၎င်းသည် Tidymodels framework ၏ အစိတ်အပိုင်းတစ်ခုဖြစ်သည်။ ဒီ package ကို အသုံးပြု၍ ဒေတာကို *ဘယ်လို* ခွဲမည်ဆိုသည်ကို သိရှိထားသော object တစ်ခုကို ဖန်တီးနိုင်ပြီး၊ ထို့နောက် ဖန်တီးထားသော သင်ကြားမှုနှင့် စမ်းသပ်မှုအစုများကို ထုတ်ယူရန် rsample function နှစ်ခုကို အသုံးပြုနိုင်ပါသည်။\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 ကို အသုံးပြု၍ Linear Regression မော်ဒယ် တည်ဆောက်ခြင်း\n",
"\n",
"အခုတော့ မော်ဒယ်ကို တည်ဆောက်ဖို့ အဆင်သင့် ဖြစ်ပါပြီ!\n",
"\n",
"Tidymodels မှာ မော်ဒယ်တွေကို `parsnip()` ကို အသုံးပြုပြီး အောက်ပါ သုံးခုကို သတ်မှတ်ရပါတယ်-\n",
"\n",
"- မော်ဒယ် **အမျိုးအစား** က Linear Regression, Logistic Regression, Decision Tree မော်ဒယ်တွေလို မော်ဒယ်အမျိုးအစားကို ခွဲခြားပေးပါတယ်။\n",
"\n",
"- မော်ဒယ် **mode** က Regression နဲ့ Classification လို ရိုးရိုးနည်းလမ်းတွေ ပါဝင်ပြီး၊ မော်ဒယ်အမျိုးအစားတချို့က နှစ်ခုလုံးကို ပံ့ပိုးပေးနိုင်သလို တချို့က mode တစ်ခုတည်းသာ ပါဝင်ပါတယ်။\n",
"\n",
"- မော်ဒယ် **engine** က မော်ဒယ်ကို တည်ဆောက်ဖို့ အသုံးပြုမယ့် ကွန်ပျူတာဆိုင်ရာ tool ဖြစ်ပါတယ်။ အများအားဖြင့် R packages တွေဖြစ်ပြီး၊ **`\"lm\"`** သို့မဟုတ် **`\"ranger\"`** လိုမျိုးတွေ ပါဝင်ပါတယ်။\n",
"\n",
"ဒီ မော်ဒယ်ဆိုင်ရာ အချက်အလက်တွေကို model specification အနေနဲ့ သိမ်းဆည်းထားပြီး၊ အခုတော့ တစ်ခု တည်ဆောက်လိုက်ရအောင်!\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": [
"မော်ဒယ်ကိုလေ့ကျင့်စဉ်တွင် သင်ယူထားသော coefficient များကို output မှာတွေ့နိုင်ပါတယ်။ အဲဒီ coefficient များက အမှန်တကယ် variable နဲ့ ခန့်မှန်းထားတဲ့ variable အကြား error အနည်းဆုံးဖြစ်စေတဲ့ အကောင်းဆုံးလိုင်းရဲ့ coefficient များကို ကိုယ်စားပြုပါတယ်။\n",
"
\n",
"\n",
"## 5. စမ်းသပ်မှုအစုအပေါ် ခန့်မှန်းချက်များပြုလုပ်ပါ\n",
"\n",
"အခုတော့ မော်ဒယ်ကိုလေ့ကျင့်ပြီးပြီဖြစ်တဲ့အတွက် [parsnip::predict()](https://parsnip.tidymodels.org/reference/predict.model_fit.html) ကို အသုံးပြုပြီး စမ်းသပ်မှု dataset အတွက် ရောဂါတိုးတက်မှု y ကို ခန့်မှန်းနိုင်ပါပြီ။ ဒါကို data group များအကြားလိုင်းဆွဲဖို့ အသုံးပြုမယ်။\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 ရဲ့ သဘောတရားက standardized column names တွေပါဝင်တဲ့ tibble/data frame အဖြစ် အမြဲထုတ်လုပ်ဖို့ ရည်ရွယ်ထားပါတယ်။ ဒါက အစပိုင်းဒေတာနဲ့ ခန့်မှန်းချက်တွေကို နောက်ထပ်လုပ်ဆောင်မှုတွေ (ဥပမာ- ပုံဆွဲခြင်း) အတွက် အသုံးဝင်တဲ့ format အဖြစ် ပေါင်းစည်းဖို့ လွယ်ကူစေပါတယ်။\n",
"\n",
"`dplyr::bind_cols()` က data frame အများအပြားကို column အဖြစ် ထိရောက်စွာ ပေါင်းစည်းပေးပါတယ်။\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": [
"## ၆။ မော်ဒယ်ရလဒ်များကို ရှုမြင်ခြင်း\n",
"\n",
"အခုတော့ ဤအရာကို အမြင်အာရုံဖြင့် ကြည့်ရှုလိုက်ရအောင် 📈။ `y` နှင့် `bmi` တန်ဖိုးများကို စမ်းသပ်မှုအစုအဖွဲ့မှ scatter plot တစ်ခုဖန်တီးပြီး၊ မော်ဒယ်၏ အချက်အလက်အစုအဖွဲ့များအကြား အကောင်းဆုံးနေရာတွင် မျဉ်းတန်းတစ်ခုကို ခန့်မှန်းချက်များကို အသုံးပြု၍ ရေးဆွဲပါမည်။\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 axis ရဲ့ ဆက်နွယ်မှုအပေါ်မှာ ဘယ်လိုနေရာချထားရမလဲဆိုတာကို အဲ့လိုင်းကို အသုံးပြုနိုင်ပုံကို မြင်နိုင်ပါသလား။ ဒီမော်ဒယ်ရဲ့ အကျိုးကျေးဇူးကို လက်တွေ့အသုံးချပုံအနေနဲ့ စကားလုံးတွေနဲ့ ဖော်ပြကြည့်ပါ။\n",
"\n",
"အောင်မြင်ပါတယ်၊ သင့်ရဲ့ ပထမဆုံး linear regression မော်ဒယ်ကို တည်ဆောက်ပြီး၊ အဲ့ဒီနဲ့ အတူ အနာဂတ်ခန့်မှန်းချက်တစ်ခုကို ဖန်တီးပြီး၊ အဲ့ဒီကို plot ထဲမှာ ပြသနိုင်ခဲ့ပါပြီ!\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"
]
}
]
}