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/my/2-Regression/4-Logistic/solution/R/lesson_4-R.ipynb

690 lines
57 KiB

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## လော့ဂစ်စတစ် ရီဂရက်ရှင်း မော်ဒယ် တည်ဆောက်ခြင်း - သင်ခန်းစာ ၄\n",
"\n",
"![လင်းနီးယားနှင့် လော့ဂစ်စတစ် ရီဂရက်ရှင်း အင်ဖိုဂရပ်](../../../../../../2-Regression/4-Logistic/images/linear-vs-logistic.png)\n",
"\n",
"#### **[သင်ခန်းစာမတိုင်မီ စမ်းမေးခွန်း](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15/)**\n",
"\n",
"#### အကျဉ်းချုပ်\n",
"\n",
"ဒီသင်ခန်းစာမှာ ရီဂရက်ရှင်းနဲ့ပတ်သက်တဲ့ *ရိုးရာ* ML နည်းလမ်းတစ်ခုဖြစ်တဲ့ လော့ဂစ်စတစ် ရီဂရက်ရှင်းကို လေ့လာသွားမှာဖြစ်ပါတယ်။ ဒီနည်းလမ်းကို သုံးပြီး binary categories (နှစ်မျိုးသာရှိတဲ့ အုပ်စုများ) ကိုခန့်မှန်းနိုင်ဖို့ ပုံစံတွေ ရှာဖွေမှာဖြစ်ပါတယ်။ ဥပမာ - ဒီချောကလက်က chocolate ဖြစ်မလား? ဒီရောဂါက ကူးစက်နိုင်မလား? ဒီဖောက်သည်က ဒီထုတ်ကုန်ကို ရွေးချယ်မလား?\n",
"\n",
"ဒီသင်ခန်းစာမှာ သင်လေ့လာနိုင်မယ့်အရာတွေက:\n",
"\n",
"- လော့ဂစ်စတစ် ရီဂရက်ရှင်းနည်းလမ်းများ\n",
"\n",
"✅ ဒီလိုရီဂရက်ရှင်းနဲ့ ပိုမိုနက်နက်ရှိုင်းရှိုင်း လေ့လာချင်ရင် ဒီ [Learn module](https://learn.microsoft.com/training/modules/introduction-classification-models/?WT.mc_id=academic-77952-leestott) ကိုကြည့်ပါ။\n",
"\n",
"## ကြိုတင်လိုအပ်ချက်\n",
"\n",
"Pumpkin data နဲ့အလုပ်လုပ်ပြီးသားဖြစ်တဲ့အတွက်၊ အခုတော့ binary category တစ်ခုကို အလုပ်လုပ်ဖို့ ရင်းနှီးလာပြီးဖြစ်ပါတယ်။ အဲဒါကတော့ `Color` ပါ။\n",
"\n",
"အခုတော့ လော့ဂစ်စတစ် ရီဂရက်ရှင်း မော်ဒယ်တစ်ခု တည်ဆောက်ပြီး၊ အချို့သော variable တွေကို အခြေခံပြီး *ပျဉ်ပြားတစ်ခုရဲ့ အရောင်က ဘယ်လိုဖြစ်နိုင်မလဲ* (လိမ္မော်ရောင် 🎃 ဒါမှမဟုတ် အဖြူရောင် 👻) ဆိုတာ ခန့်မှန်းကြည့်ရအောင်။\n",
"\n",
"> ဘာကြောင့် ရီဂရက်ရှင်းနဲ့ပတ်သက်တဲ့ သင်ခန်းစာအုပ်စုတစ်ခုမှာ binary classification ကို ပြောနေတာလဲ? ဒီဟာက စကားလုံးအသုံးအနှုန်းအဆင်ပြေမှုအတွက်သာဖြစ်ပါတယ်၊ လော့ဂစ်စတစ် ရီဂရက်ရှင်းက [တကယ်တော့ classification နည်းလမ်းတစ်ခု](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression) ဖြစ်ပါတယ်၊ သို့သော် linear-based ဖြစ်ပါတယ်။ အခြား classification နည်းလမ်းတွေကို နောက်သင်ခန်းစာအုပ်စုမှာ လေ့လာနိုင်ပါတယ်။\n",
"\n",
"ဒီသင်ခန်းစာအတွက် လိုအပ်မယ့် package တွေက:\n",
"\n",
"- `tidyverse`: [tidyverse](https://www.tidyverse.org/) က [R packages အစုတစ်စု](https://www.tidyverse.org/packages) ဖြစ်ပြီး၊ ဒေတာသိပ္ပံကို ပိုမိုလျင်မြန်စေပြီး လွယ်ကူစေကာ ပျော်ရွှင်စေပါတယ်။\n",
"\n",
"- `tidymodels`: [tidymodels](https://www.tidymodels.org/) framework က [packages အစုတစ်စု](https://www.tidymodels.org/packages/) ဖြစ်ပြီး၊ မော်ဒယ်တည်ဆောက်ခြင်းနှင့် machine learning အတွက် အသုံးပြုနိုင်ပါတယ်။\n",
"\n",
"- `janitor`: [janitor package](https://github.com/sfirke/janitor) က အညစ်အကြေးဒေတာတွေကို စစ်ဆေးပြီး သန့်ရှင်းစေဖို့ လွယ်ကူတဲ့ tools တွေ ပေးပါတယ်။\n",
"\n",
"- `ggbeeswarm`: [ggbeeswarm package](https://github.com/eclarke/ggbeeswarm) က ggplot2 ကို အသုံးပြုပြီး beeswarm ပုံစံ plot တွေ ဖန်တီးနိုင်စေတဲ့ နည်းလမ်းတွေ ပေးပါတယ်။\n",
"\n",
"ဒီ package တွေကို အောက်ပါအတိုင်း install လုပ်နိုင်ပါတယ်:\n",
"\n",
"`install.packages(c(\"tidyverse\", \"tidymodels\", \"janitor\", \"ggbeeswarm\"))`\n",
"\n",
"အခြားနည်းလမ်းအနေနဲ့၊ အောက်ပါ script က သင့်မှာ ဒီ module ကို ပြီးမြောက်ဖို့ လိုအပ်တဲ့ package တွေ ရှိမရှိ စစ်ဆေးပြီး မရှိသေးရင် install လုပ်ပေးပါမယ်။\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"suppressWarnings(if (!require(\"pacman\"))install.packages(\"pacman\"))\n",
"\n",
"pacman::p_load(tidyverse, tidymodels, janitor, ggbeeswarm)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## **မေးခွန်းကိုသတ်မှတ်ပါ**\n",
"\n",
"ကျွန်တော်တို့ရဲ့ရည်ရွယ်ချက်အရ၊ 'အဖြူ' သို့မဟုတ် 'အဖြူမဟုတ်' ဆိုတဲ့ binary အနေနဲ့ဖော်ပြပါမယ်။ ကျွန်တော်တို့ရဲ့ dataset မှာ 'striped' ဆိုတဲ့အမျိုးအစားလည်းရှိပေမယ့် အရေအတွက်နည်းနည်းသာရှိလို့ မသုံးတော့ပါဘူး။ Null values တွေကို dataset မှာဖယ်ရှားလိုက်တဲ့အခါမှာလည်း အဲဒီအမျိုးအစားကပျောက်သွားပါတယ်။\n",
"\n",
"> 🎃 အလွဲလွဲအချို့က အဖြူရောင်ဖရုံသီးတွေကို 'တစ်ဆိတ်' ဖရုံသီးလို့ခေါ်တယ်။ carving လုပ်ဖို့လွယ်ကူတဲ့အရာမဟုတ်လို့ လူကြိုက်များတဲ့လိမ္မော်ရောင်ဖရုံသီးတွေလိုမဟုတ်ပေမယ့် အရမ်းမိုက်တယ်။ ဒါကြောင့် ကျွန်တော်တို့ရဲ့မေးခွန်းကို 'တစ်ဆိတ်' သို့မဟုတ် 'တစ်ဆိတ်မဟုတ်' လို့ပြန်လည်ဖော်ပြနိုင်ပါတယ်။ 👻\n",
"\n",
"## **Logistic regression အကြောင်း**\n",
"\n",
"Logistic regression ဟာ linear regression နဲ့အရေးပါတဲ့အချက်အချို့မှာကွဲပြားပါတယ်။ Linear regression ကိုမကြာသေးခင်ကလေ့လာခဲ့ပြီးသားဖြစ်ပါတယ်။\n",
"\n",
"#### **Binary classification**\n",
"\n",
"Logistic regression ဟာ linear regression ရဲ့ features တွေကိုမပေးပါဘူး။ Logistic regression က `binary category` (\"လိမ္မော်ရောင် သို့မဟုတ် လိမ္မော်ရောင်မဟုတ်\") ကိုခန့်မှန်းပေးနိုင်ပြီး linear regression ကတော့ `continual values` တွေကိုခန့်မှန်းနိုင်ပါတယ်။ ဥပမာအားဖြင့် ဖရုံသီးရဲ့မူလနေရာနဲ့ရိတ်သိမ်းချိန်အပေါ်မူတည်ပြီး *ဈေးနှုန်းဘယ်လောက်တက်မလဲ* ဆိုတာကိုခန့်မှန်းနိုင်ပါတယ်။\n",
"\n",
"![Dasani Madipalli ရဲ့ Infographic](../../../../../../2-Regression/4-Logistic/images/pumpkin-classifier.png)\n",
"\n",
"### အခြား classification မျိုးစုံ\n",
"\n",
"Logistic regression ရဲ့အခြားမျိုးစုံတွေမှာ multinomial နဲ့ ordinal ပါဝင်ပါတယ်:\n",
"\n",
"- **Multinomial** - အမျိုးအစားတစ်ခုထက်ပိုရှိတဲ့အခါမှာသုံးတယ်။ \"လိမ္မော်ရောင်၊ အဖြူရောင်၊ နောက်ပြီး Striped\"။\n",
"\n",
"- **Ordinal** - အစီအစဉ်ရှိတဲ့အမျိုးအစားတွေကိုသုံးတယ်။ ဥပမာအားဖြင့် ဖရုံသီးတွေကို mini, sm, med, lg, xl, xxl ဆိုတဲ့အရွယ်အစားအတိုင်းအစီအစဉ်ထားချင်တဲ့အခါမှာအသုံးဝင်တယ်။\n",
"\n",
"![Multinomial vs ordinal regression](../../../../../../2-Regression/4-Logistic/images/multinomial-vs-ordinal.png)\n",
"\n",
"#### **Variables တွေကို correlation မလိုအပ်ပါ**\n",
"\n",
"Linear regression ဟာ variables တွေကပို correlation ရှိရင်ပိုကောင်းတယ်ဆိုတာကိုသတိရပါ။ Logistic regression ကတော့အတိအကျဆန့်ကျင်ဘက်ဖြစ်ပြီး variables တွေ alignment မလိုအပ်ပါဘူး။ ဒါဟာ correlation အနည်းငယ်ရှိတဲ့ဒီ data အတွက်အဆင်ပြေပါတယ်။\n",
"\n",
"#### **သန့်ရှင်းတဲ့ data အများကြီးလိုအပ်ပါတယ်**\n",
"\n",
"Logistic regression ဟာ data ပိုများရင်ပိုတိကျတဲ့ရလဒ်တွေကိုပေးနိုင်ပါတယ်။ ကျွန်တော်တို့ dataset ကအရမ်းသေးလို့ ဒီ task အတွက်မအကောင်းဆုံးဖြစ်တာကိုသတိထားပါ။\n",
"\n",
"✅ Logistic regression အတွက်သင့်တော်တဲ့ data အမျိုးအစားတွေကိုစဉ်းစားပါ\n",
"\n",
"## လေ့ကျင့်ခန်း - data ကို tidy လုပ်ပါ\n",
"\n",
"အရင်ဆုံး data ကိုအနည်းငယ်သန့်စင်ပြီး null values တွေကိုဖယ်ရှားပြီး column အချို့ကိုသာရွေးပါ:\n",
"\n",
"1. အောက်ပါ code ကိုထည့်ပါ:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"# Load the core tidyverse packages\n",
"library(tidyverse)\n",
"\n",
"# Import the data and clean column names\n",
"pumpkins <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/2-Regression/data/US-pumpkins.csv\") %>% \n",
" clean_names()\n",
"\n",
"# Select desired columns\n",
"pumpkins_select <- pumpkins %>% \n",
" select(c(city_name, package, variety, origin, item_size, color)) \n",
"\n",
"# Drop rows containing missing values and encode color as factor (category)\n",
"pumpkins_select <- pumpkins_select %>% \n",
" drop_na() %>% \n",
" mutate(color = factor(color))\n",
"\n",
"# View the first few rows\n",
"pumpkins_select %>% \n",
" slice_head(n = 5)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"သင့်ရဲ့ dataframe အသစ်ကို ကြည့်ရှုလိုပါက [*glimpse()*](https://pillar.r-lib.org/reference/glimpse.html) function ကို အောက်ပါအတိုင်း အသုံးပြုနိုင်ပါတယ်။\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"pumpkins_select %>% \n",
" glimpse()\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"အခုကျွန်တော်တို့ လုပ်မယ့်အလုပ်က binary classification problem တစ်ခုဖြစ်မယ်ဆိုတာ အတည်ပြုကြရအောင်:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"# Subset distinct observations in outcome column\n",
"pumpkins_select %>% \n",
" distinct(color)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### အမျိုးအစားအလိုက် ပုံဖော်မှု - ကဏ္ဍပုံကြမ်း\n",
"အခုအချိန်မှာ သင်သည် ဖရုံသီးဒေတာကို ထပ်မံတင်ပြီး၊ အချို့သော အပြောင်းအလဲများ (Color အပါအဝင်) ပါဝင်သော ဒေတာစနစ်တစ်ခုကို ထိန်းသိမ်းထားနိုင်ရန် သန့်ရှင်းစင်ကြယ်အောင် ပြင်ဆင်ပြီးဖြစ်ပါသည်။ ယခု ggplot စာကြည့်တိုက်ကို အသုံးပြု၍ notebook အတွင်းရှိ dataframe ကို ပုံဖော်ကြည့်ပါမည်။\n",
"\n",
"ggplot စာကြည့်တိုက်သည် သင့်ဒေတာကို ပုံဖော်ရန် အလွန်ကောင်းမွန်သော နည်းလမ်းများကို ပေးစွမ်းနိုင်ပါသည်။ ဥပမာအားဖြင့်၊ သင်သည် Variety နှင့် Color အလိုက် ဒေတာဖြန့်ဖြူးမှုများကို ကဏ္ဍပုံကြမ်းတစ်ခုဖြင့် နှိုင်းယှဉ်ကြည့်နိုင်ပါသည်။\n",
"\n",
"1. geombar function ကို အသုံးပြု၍ ဖရုံသီးဒေတာနှင့်အတူ ပုံကြမ်းတစ်ခုကို ဖန်တီးပါ၊ ဖရုံသီးအမျိုးအစား (လိမ္မော်ရောင် သို့မဟုတ် အဖြူရောင်) တစ်ခုစီအတွက် အရောင် mapping ကို သတ်မှတ်ပါ:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "python"
}
},
"outputs": [],
"source": [
"# Specify colors for each value of the hue variable\n",
"palette <- c(ORANGE = \"orange\", WHITE = \"wheat\")\n",
"\n",
"# Create the bar plot\n",
"ggplot(pumpkins_select, aes(y = variety, fill = color)) +\n",
" geom_bar(position = \"dodge\") +\n",
" scale_fill_manual(values = palette) +\n",
" labs(y = \"Variety\", fill = \"Color\") +\n",
" theme_minimal()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"ဒေတာကိုကြည့်ရှုခြင်းအားဖြင့် Color ဒေတာသည် Variety နှင့် ဘယ်လိုဆက်စပ်နေသည်ကို တွေ့နိုင်ပါသည်။\n",
"\n",
"✅ ဒီအမျိုးအစားအလိုက် ပုံစံကိုကြည့်ပြီး၊ သင်စိတ်ဝင်စားဖွယ် ရှာဖွေမှုများ ဘယ်လိုလုပ်နိုင်မလဲဆိုတာ စဉ်းစားကြည့်ပါ။\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### ဒေတာကြိုတင်အလုပ်လုပ်ခြင်း: လက္ခဏာအင်ကိုဒင်း\n",
"\n",
"ကျွန်တော်တို့ရဲ့ ဖရုံသီးဒေတာစုပေါင်းမှုမှာ ကော်လံအားလုံးအတွက် စာသားတန်ဖိုးတွေပါဝင်ပါတယ်။ လူတွေအတွက် အမျိုးအစားဒေတာနဲ့ အလုပ်လုပ်တာက အလွယ်တကူနားလည်နိုင်ပေမယ့်၊ စက်တွေအတွက်တော့ မဟုတ်ပါဘူး။ စက်သင်ယူအယ်လဂိုရီသမ်တွေက နံပါတ်တွေနဲ့ အလုပ်လုပ်ရင် ပိုကောင်းပါတယ်။ ဒါကြောင့် အမျိုးအစားဒေတာတွေကို နံပါတ်ဒေတာတွေဖြစ်အောင် ပြောင်းလဲပေးတဲ့ လက္ခဏာအင်ကိုဒင်းအဆင့်ဟာ ဒေတာကြိုတင်အလုပ်လုပ်ခြင်းအဆင့်မှာ အရေးကြီးပါတယ်။ ကောင်းမွန်တဲ့အင်ကိုဒင်းက ကောင်းမွန်တဲ့မော်ဒယ်တည်ဆောက်နိုင်စေပါတယ်။\n",
"\n",
"လက္ခဏာအင်ကိုဒင်းအတွက် အဓိကအင်ကိုဒါအမျိုးအစားနှစ်မျိုးရှိပါတယ်-\n",
"\n",
"1. **Ordinal encoder**: ဒါဟာ အဆင့်လိုက်အမျိုးအစားအတွက် သင့်တော်ပါတယ်။ အဆင့်လိုက်အမျိုးအစားဆိုတာက အမျိုးအစားဒေတာတွေဖြစ်ပြီး၊ ဒေတာတွေမှာ အဆင့်လိုက်အလျောက်စဉ်လိုက်နေတဲ့အခါပါ။ ဥပမာ- ကျွန်တော်တို့ရဲ့ ဒေတာစုပေါင်းမှုမှာ `item_size` ကော်လံလိုမျိုးပါ။ Ordinal encoder က အမျိုးအစားတစ်ခုစီကို နံပါတ်တစ်ခုနဲ့ ဖန်တီးပေးပြီး၊ အဲ့ဒီနံပါတ်ဟာ ကော်လံထဲမှာ အမျိုးအစားရဲ့ အဆင့်စဉ်လိုက်ဖြစ်ပါတယ်။\n",
"\n",
"2. **Categorical encoder**: ဒါဟာ အမည်လိုက်အမျိုးအစားအတွက် သင့်တော်ပါတယ်။ အမည်လိုက်အမျိုးအစားဆိုတာက အမျိုးအစားဒေတာတွေဖြစ်ပြီး၊ ဒေတာတွေမှာ အဆင့်လိုက်စဉ်မရှိတဲ့အခါပါ။ ဥပမာ- ကျွန်တော်တို့ရဲ့ ဒေတာစုပေါင်းမှုမှာ `item_size` ကွဲပြားမှုအပြင် အခြားသောလက္ခဏာအားလုံးလိုမျိုးပါ။ Categorical encoder က တစ်ခုချင်းစီအမျိုးအစားကို binary ကော်လံတစ်ခုနဲ့ ဖန်တီးပေးပါတယ်။ အဲ့ဒီ encoded variable ဟာ ဖရုံသီးက အဲ့ဒီ Variety ကိုယ်စားပြုရင် 1 ဖြစ်ပြီး၊ မဟုတ်ရင် 0 ဖြစ်ပါတယ်။\n",
"\n",
"Tidymodels က နောက်ထပ် အဆင်ပြေတဲ့ package တစ်ခုကို ပေးထားပါတယ်- [recipes](https://recipes.tidymodels.org/) ဆိုတဲ့ ဒေတာကြိုတင်အလုပ်လုပ်ဖို့အတွက် package တစ်ခုပါ။ ကျွန်တော်တို့ `recipe` တစ်ခုကို သတ်မှတ်ပြီး၊ အဲ့ဒီမှာ အားလုံးသော predictor ကော်လံတွေကို နံပါတ်အစုအဖြစ် encode လုပ်ဖို့ သတ်မှတ်ပါမယ်။ ပြီးတော့ `prep` ကို သုံးပြီး လိုအပ်တဲ့ အရေအတွက်တွေနဲ့ စာရင်းဇယားတွေကို ခန့်မှန်းပြီး၊ နောက်ဆုံးမှာ `bake` ကို သုံးပြီး အသစ်သော ဒေတာတွေအပေါ်မှာ အဲ့ဒီတွက်ချက်မှုတွေကို အကောင်အထည်ဖော်ပါမယ်။\n",
"\n",
"> ပုံမှန်အားဖြင့်၊ recipes ကို မော်ဒယ်တည်ဆောက်ဖို့ ကြိုတင်အလုပ်လုပ်တဲ့အခါမှာ အသုံးပြုကြပါတယ်။ ဒါဟာ ဒေတာစုပေါင်းမှုကို မော်ဒယ်တည်ဆောက်ဖို့ အဆင့်ဆင့်လုပ်ဆောင်ပေးဖို့ သတ်မှတ်ပေးပါတယ်။ အဲ့ဒီအခါမှာ `workflow()` ကို အသုံးပြုဖို့ အလွန်အရေးကြီးအကြံပြုပါတယ်၊ prep နဲ့ bake ကို ကိုယ်တိုင်သုံးမယ့်အစားပါ။ ကျွန်တော်တို့ ဒီအကြောင်းကို ခဏနောက်မှ ပြန်လည်ဆွေးနွေးပါမယ်။\n",
">\n",
"> ဒါပေမယ့် အခုအချိန်မှာတော့၊ recipes + prep + bake ကို အသုံးပြုပြီး ဒေတာစုပေါင်းမှုကို ဒေတာခွဲခြမ်းစိတ်ဖြာမှုအတွက် ပြင်ဆင်ဖို့ လုပ်ဆောင်ရမယ့် အဆင့်တွေကို သတ်မှတ်ပြီး၊ အဲ့ဒီအဆင့်တွေကို အကောင်အထည်ဖော်ထားတဲ့ ဒေတာကို ထုတ်ယူဖို့ သုံးနေပါတယ်။\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"# Preprocess and extract data to allow some data analysis\n",
"baked_pumpkins <- recipe(color ~ ., data = pumpkins_select) %>%\n",
" # Define ordering for item_size column\n",
" step_mutate(item_size = ordered(item_size, levels = c('sml', 'med', 'med-lge', 'lge', 'xlge', 'jbo', 'exjbo'))) %>%\n",
" # Convert factors to numbers using the order defined above (Ordinal encoding)\n",
" step_integer(item_size, zero_based = F) %>%\n",
" # Encode all other predictors using one hot encoding\n",
" step_dummy(all_nominal(), -all_outcomes(), one_hot = TRUE) %>%\n",
" prep(data = pumpkin_select) %>%\n",
" bake(new_data = NULL)\n",
"\n",
"# Display the first few rows of preprocessed data\n",
"baked_pumpkins %>% \n",
" slice_head(n = 5)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"✅ Item Size ကော်လံအတွက် ordinal encoder ကိုသုံးခြင်း၏ အကျိုးကျေးဇူးများကဘာလဲ?\n",
"\n",
"### အပြောင်းအလဲများအကြား ဆက်စပ်မှုများကို ခွဲခြမ်းစိတ်ဖြာပါ\n",
"\n",
"အခုတော့ ကျွန်တော်တို့ရဲ့ ဒေတာကို ကြိုတင်လုပ်ဆောင်ပြီးဖြစ်တဲ့အတွက်၊ feature တွေနဲ့ label အကြား ဆက်စပ်မှုတွေကို ခွဲခြမ်းစိတ်ဖြာနိုင်ပါပြီ။ ဒါကတော့ feature တွေကို အသုံးပြုပြီး label ကို မော်ဒယ်က ဘယ်လောက်တိကျစွာ ခန့်မှန်းနိုင်မလဲဆိုတာကို နားလည်ဖို့ အထောက်အကူဖြစ်စေမှာပါ။ ဒီလို ခွဲခြမ်းစိတ်ဖြာမှုကို လုပ်ဆောင်ဖို့ အကောင်းဆုံးနည်းလမ်းကတော့ ဒေတာကို ပုံဖော်ဖို့ ဖြစ်ပါတယ်။\n",
"\n",
"ဒီအတွက် ကျွန်တော်တို့ ggplot geom_boxplot_ function ကို ထပ်မံအသုံးပြုမှာဖြစ်ပြီး၊ Item Size, Variety နဲ့ Color တို့အကြား ဆက်စပ်မှုတွေကို categorical plot အနေနဲ့ မြင်နိုင်အောင် ပြသမှာဖြစ်ပါတယ်။ ဒေတာကို ပိုမိုကောင်းမွန်စွာ ပုံဖော်နိုင်ဖို့အတွက် encoded Item Size ကော်လံနဲ့ unencoded Variety ကော်လံကို အသုံးပြုသွားမှာ ဖြစ်ပါတယ်။\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"# Define the color palette\n",
"palette <- c(ORANGE = \"orange\", WHITE = \"wheat\")\n",
"\n",
"# We need the encoded Item Size column to use it as the x-axis values in the plot\n",
"pumpkins_select_plot<-pumpkins_select\n",
"pumpkins_select_plot$item_size <- baked_pumpkins$item_size\n",
"\n",
"# Create the grouped box plot\n",
"ggplot(pumpkins_select_plot, aes(x = `item_size`, y = color, fill = color)) +\n",
" geom_boxplot() +\n",
" facet_grid(variety ~ ., scales = \"free_x\") +\n",
" scale_fill_manual(values = palette) +\n",
" labs(x = \"Item Size\", y = \"\") +\n",
" theme_minimal() +\n",
" theme(strip.text = element_text(size = 12)) +\n",
" theme(axis.text.x = element_text(size = 10)) +\n",
" theme(axis.title.x = element_text(size = 12)) +\n",
" theme(axis.title.y = element_blank()) +\n",
" theme(legend.position = \"bottom\") +\n",
" guides(fill = guide_legend(title = \"Color\")) +\n",
" theme(panel.spacing = unit(0.5, \"lines\"))+\n",
" theme(strip.text.y = element_text(size = 4, hjust = 0)) \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### အုပ်စုပျံ့ပုံ (Swarm Plot) ကို အသုံးပြုပါ\n",
"\n",
"Color သည် binary အမျိုးအစား (အဖြူရောင် သို့မဟုတ် အဖြူမဟုတ်) ဖြစ်သောကြောင့်၊ ၎င်းကို 'မြင်ကွင်းဖော်ပြရန် [အထူးနည်းလမ်း](https://github.com/rstudio/cheatsheets/blob/main/data-visualization.pdf) တစ်ခု' လိုအပ်ပါသည်။\n",
"\n",
"အုပ်စုပျံ့ပုံ (swarm plot) ကို အသုံးပြု၍ item_size နှင့်ဆိုင်သော color ၏ ဖြန့်ဖြူးမှုကို ဖော်ပြကြည့်ပါ။\n",
"\n",
"ဤအတွက် [ggbeeswarm package](https://github.com/eclarke/ggbeeswarm) ကို အသုံးပြုမည်ဖြစ်ပြီး၊ ၎င်းသည် ggplot2 ကို အသုံးပြု၍ beeswarm ပုံစံရှိသော ပုံများ ဖန်တီးရန် နည်းလမ်းများပေးသည်။ Beeswarm ပုံစံသည် သာမန်အားဖြင့် တစ်နေရာတည်းတွင် တိုးတက်မှုရှိမည့် အချက်များကို အနီးအနားတွင် ပြသနိုင်ရန် ဖော်ပြသည့် နည်းလမ်းတစ်ခုဖြစ်သည်။\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"# Create beeswarm plots of color and item_size\n",
"baked_pumpkins %>% \n",
" mutate(color = factor(color)) %>% \n",
" ggplot(mapping = aes(x = color, y = item_size, color = color)) +\n",
" geom_quasirandom() +\n",
" scale_color_brewer(palette = \"Dark2\", direction = -1) +\n",
" theme(legend.position = \"none\")\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"အရောင်နှင့်အရွယ်အစားအုပ်စုကြီးတို့၏ binary အမျိုးအစားများအကြားဆက်နွယ်မှုကိုနားလည်ပြီးနောက်၊ သင့်ဖရုံသီးရဲ့အရောင်ဖြစ်နိုင်မှုကိုသတ်မှတ်ဖို့ logistic regression ကိုလေ့လာကြမယ်။\n",
"\n",
"## မော်ဒယ်ကိုတည်ဆောက်ပါ\n",
"\n",
"သင့် classification မော်ဒယ်မှာအသုံးပြုချင်တဲ့ variable တွေကိုရွေးချယ်ပြီး data ကို training set နဲ့ test set အဖြစ်ခွဲပါ။ [rsample](https://rsample.tidymodels.org/) ဟာ Tidymodels မှာပါဝင်တဲ့ package တစ်ခုဖြစ်ပြီး data ကိုထိရောက်စွာခွဲခြားခြင်းနဲ့ resampling အတွက်အခြေခံအဆောက်အအုံပေးပါတယ်။\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"# Split data into 80% for training and 20% for testing\n",
"set.seed(2056)\n",
"pumpkins_split <- pumpkins_select %>% \n",
" initial_split(prop = 0.8)\n",
"\n",
"# Extract the data in each split\n",
"pumpkins_train <- training(pumpkins_split)\n",
"pumpkins_test <- testing(pumpkins_split)\n",
"\n",
"# Print out the first 5 rows of the training set\n",
"pumpkins_train %>% \n",
" slice_head(n = 5)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"🙌 ယခုအခါ ကျွန်ုပ်တို့သည် သင်ကြားမှုအချက်အလက်များကို သင်ကြားမှုတံဆိပ် (အရောင်) နှင့် ကိုက်ညီစေရန် မော်ဒယ်ကို လေ့ကျင့်ရန် အသင့်ဖြစ်နေပါပြီ။\n",
"\n",
"မော်ဒယ်ဖန်တီးရန် အချက်အလက်များကို ပြင်ဆင်စေရန် လိုအပ်သော ကြိုတင်အဆင့်များကို ဖော်ပြသည့် recipe တစ်ခုကို စတင်ဖန်တီးပါမည်။ ဥပမာအားဖြင့် - အမျိုးအစားအချက်အလက်များကို ကိန်းဂဏန်းများအဖြစ် encode ပြုလုပ်ခြင်း။ `baked_pumpkins` နမူနာလိုပင်၊ `pumpkins_recipe` ကို ဖန်တီးပါမည်။ သို့သော် ယခုအချိန်တွင် `prep` နှင့် `bake` မပြုလုပ်သေးပါ၊ အကြောင်းမှာ ၎င်းကို workflow အတွင်းတွင် ထည့်သွင်းသွားမည်ဖြစ်ပြီး၊ အနည်းငယ်အဆင့်အနည်းငယ်အတွင်း တွေ့မြင်ရမည်ဖြစ်သည်။\n",
"\n",
"Tidymodels တွင် logistic regression မော်ဒယ်ကို ဖော်ပြနိုင်သော နည်းလမ်းများစွာ ရှိပါသည်။ `?logistic_reg()` ကို ကြည့်ပါ။ ယခုအချိန်တွင် `stats::glm()` engine ကို အသုံးပြု၍ logistic regression မော်ဒယ်ကို ပုံမှန်နည်းဖြင့် ဖော်ပြသွားပါမည်။\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"# Create a recipe that specifies preprocessing steps for modelling\n",
"pumpkins_recipe <- recipe(color ~ ., data = pumpkins_train) %>% \n",
" step_mutate(item_size = ordered(item_size, levels = c('sml', 'med', 'med-lge', 'lge', 'xlge', 'jbo', 'exjbo'))) %>%\n",
" step_integer(item_size, zero_based = F) %>% \n",
" step_dummy(all_nominal(), -all_outcomes(), one_hot = TRUE)\n",
"\n",
"# Create a logistic model specification\n",
"log_reg <- logistic_reg() %>% \n",
" set_engine(\"glm\") %>% \n",
" set_mode(\"classification\")\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"အခုတော့ ကျွန်တော်တို့မှာ အစားအစာချက်ပြုတ်နည်းနဲ့ မော်ဒယ်သတ်မှတ်ချက်ရှိပြီးသားဖြစ်တဲ့အတွက်၊ အဲဒီနှစ်ခုကို ပေါင်းစပ်ပြီး အရာဝတ္ထုတစ်ခုအဖြစ် ဖန်တီးဖို့ လိုအပ်ပါတယ်။ အဲဒီအရာဝတ္ထုက ဒေတာကို ပထမဦးဆုံး ကြိုတင်လုပ်ဆောင်ပေးမယ် (prep+bake ကို နောက်ကွယ်မှာလုပ်ဆောင်ပေးမယ်)၊ ပြီးတော့ ကြိုတင်လုပ်ဆောင်ပြီးသား ဒေတာပေါ်မှာ မော်ဒယ်ကို အဆင်ပြေစွာ တပ်ဆင်ပေးမယ်။ ထို့အပြင် နောက်ဆက်တွဲလုပ်ဆောင်မှုများကိုလည်း လုပ်ဆောင်နိုင်စေမှာ ဖြစ်ပါတယ်။\n",
"\n",
"Tidymodels မှာတော့ ဒီအဆင်ပြေတဲ့ အရာဝတ္ထုကို [`workflow`](https://workflows.tidymodels.org/) လို့ခေါ်ပြီး မော်ဒယ်ဖွဲ့စည်းမှု အစိတ်အပိုင်းတွေကို အဆင်ပြေစွာ ထိန်းသိမ်းပေးပါတယ်။\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"# Bundle modelling components in a workflow\n",
"log_reg_wf <- workflow() %>% \n",
" add_recipe(pumpkins_recipe) %>% \n",
" add_model(log_reg)\n",
"\n",
"# Print out the workflow\n",
"log_reg_wf\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"workflow ကို *သတ်မှတ်ပြီး* ဖြစ်တဲ့အခါ၊ [`fit()`](https://tidymodels.github.io/parsnip/reference/fit.html) function ကို အသုံးပြုပြီး model ကို `လေ့ကျင့်`နိုင်ပါတယ်။ workflow က recipe ကို ခန့်မှန်းပြီး training မလုပ်မီ data ကို preprocess လုပ်ပေးမှာဖြစ်တဲ့အတွက် prep နဲ့ bake ကို ကိုယ်တိုင် လုပ်စရာမလိုတော့ပါ။\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"# Train the model\n",
"wf_fit <- log_reg_wf %>% \n",
" fit(data = pumpkins_train)\n",
"\n",
"# Print the trained workflow\n",
"wf_fit\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"မော်ဒယ်ကိုလေ့ကျင့်စဉ်အတွင်း သင်ယူထားသော coefficients များကို print ထုတ်ပြသသည်။\n",
"\n",
"အခုတော့ လေ့ကျင့်မှုဒေတာကို အသုံးပြု၍ မော်ဒယ်ကိုလေ့ကျင့်ပြီးပြီဖြစ်သောကြောင့် [parsnip::predict()](https://parsnip.tidymodels.org/reference/predict.model_fit.html) ကို အသုံးပြု၍ စမ်းသပ်မှုဒေတာပေါ်တွင် ခန့်မှန်းချက်များပြုလုပ်နိုင်ပါပြီ။ အရင်ဆုံး မော်ဒယ်ကို အသုံးပြု၍ စမ်းသပ်မှု data set အတွက် label များနှင့် label တစ်ခုချင်းစီအတွက် probability များကို ခန့်မှန်းကြည့်ပါမည်။ Probability သည် 0.5 ထက်ပိုရှိပါက ခန့်မှန်းထားသော class သည် `WHITE` ဖြစ်ပြီး 0.5 ထက်နည်းပါက `ORANGE` ဖြစ်သည်။\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"# Make predictions for color and corresponding probabilities\n",
"results <- pumpkins_test %>% select(color) %>% \n",
" bind_cols(wf_fit %>% \n",
" predict(new_data = pumpkins_test)) %>%\n",
" bind_cols(wf_fit %>%\n",
" predict(new_data = pumpkins_test, type = \"prob\"))\n",
"\n",
"# Compare predictions\n",
"results %>% \n",
" slice_head(n = 10)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"ဒီဟာက logistic regression အလုပ်လုပ်ပုံကို ပိုမိုနားလည်စေဖို့ အချက်အလက်တွေ ပေးထားပါတယ်။\n",
"\n",
"### အလွယ်တကူ နားလည်နိုင်ဖို့ confusion matrix\n",
"\n",
"အကြိုတင်ခန့်မှန်းချက်တစ်ခုစီကို \"ground truth\" အဖြစ်မှန်တန်ဖိုးနဲ့ နှိုင်းယှဉ်တာက မော်ဒယ်က ခန့်မှန်းမှုအောင်မြင်မှုကို သတ်မှတ်ဖို့ အလွန်အကျွံ ထိရောက်တဲ့နည်းလမ်းမဟုတ်ပါဘူး။ ကံကောင်းစွာ Tidymodels မှာ အခြားနည်းလမ်းတွေ ရှိပါတယ်။ [`yardstick`](https://yardstick.tidymodels.org/) - performance metrics တွေကို အသုံးပြုပြီး မော်ဒယ်တွေ၏ ထိရောက်မှုကို တိုင်းတာဖို့ အသုံးပြုတဲ့ package တစ်ခုပါ။\n",
"\n",
"Classification ပြဿနာတွေနဲ့ ဆက်စပ်တဲ့ performance metric တစ်ခုက [`confusion matrix`](https://wikipedia.org/wiki/Confusion_matrix) ဖြစ်ပါတယ်။ Confusion matrix က classification မော်ဒယ်တစ်ခုရဲ့ အလုပ်လုပ်ပုံကို ဖော်ပြပေးပါတယ်။ Confusion matrix က မော်ဒယ်က class တစ်ခုစီမှာ အမှန်တကယ် ခွဲခြားနိုင်ခဲ့တဲ့ နမူနာအရေအတွက်ကို စာရင်းပြုစုပေးပါတယ်။ ကျွန်တော်တို့ရဲ့ အခြေအနေမှာတော့ orange pumpkins ကို orange အဖြစ် ခွဲခြားနိုင်ခဲ့တာ၊ white pumpkins ကို white အဖြစ် ခွဲခြားနိုင်ခဲ့တာ၊ နောက်ပြီး **မှားယွင်းတဲ့** အမျိုးအစားတွေထဲကို ခွဲခြားထားတာတွေကို ပြသပေးမှာ ဖြစ်ပါတယ်။\n",
"\n",
"[**`conf_mat()`**](https://tidymodels.github.io/yardstick/reference/conf_mat.html) function က yardstick မှာ observed classes နဲ့ predicted classes တွေကို cross-tabulation အဖြစ်တွက်ချက်ပေးပါတယ်။\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"# Confusion matrix for prediction results\n",
"conf_mat(data = results, truth = color, estimate = .pred_class)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"အခု ကျွန်တော်တို့ Confusion Matrix ကို နားလည်ကြည့်ကြမယ်။ ကျွန်တော်တို့ရဲ့ မော်ဒယ်ကို ဖရုံတွေကို `white` နဲ့ `not-white` ဆိုတဲ့ binary အမျိုးအစားနှစ်မျိုးအကြား ခွဲခြားဖို့ တောင်းဆိုထားပါတယ်။\n",
"\n",
"- မော်ဒယ်က ဖရုံတစ်လုံးကို `white` လို့ ခန့်မှန်းပြီး၊ အမှန်တကယ်မှာလည်း အဲဒီဖရုံက `white` အမျိုးအစားထဲမှာ ပါဝင်တယ်ဆိုရင်၊ ဒီလိုအခြေအနေကို `true positive` လို့ ခေါ်ပါတယ်။ ဒါကို အပေါ်ဘက် ဘယ်ဖက်နံပါတ်နဲ့ ပြထားပါတယ်။\n",
"\n",
"- မော်ဒယ်က ဖရုံတစ်လုံးကို `not white` လို့ ခန့်မှန်းပြီး၊ အမှန်တကယ်မှာတော့ အဲဒီဖရုံက `white` အမျိုးအစားထဲမှာ ပါဝင်တယ်ဆိုရင်၊ ဒီလိုအခြေအနေကို `false negative` လို့ ခေါ်ပါတယ်။ ဒါကို အောက်ဘက် ဘယ်ဖက်နံပါတ်နဲ့ ပြထားပါတယ်။\n",
"\n",
"- မော်ဒယ်က ဖရုံတစ်လုံးကို `white` လို့ ခန့်မှန်းပြီး၊ အမှန်တကယ်မှာတော့ အဲဒီဖရုံက `not-white` အမျိုးအစားထဲမှာ ပါဝင်တယ်ဆိုရင်၊ ဒီလိုအခြေအနေကို `false positive` လို့ ခေါ်ပါတယ်။ ဒါကို အပေါ်ဘက် ညာဖက်နံပါတ်နဲ့ ပြထားပါတယ်။\n",
"\n",
"- မော်ဒယ်က ဖရုံတစ်လုံးကို `not white` လို့ ခန့်မှန်းပြီး၊ အမှန်တကယ်မှာလည်း အဲဒီဖရုံက `not-white` အမျိုးအစားထဲမှာ ပါဝင်တယ်ဆိုရင်၊ ဒီလိုအခြေအနေကို `true negative` လို့ ခေါ်ပါတယ်။ ဒါကို အောက်ဘက် ညာဖက်နံပါတ်နဲ့ ပြထားပါတယ်။\n",
"\n",
"| Truth |\n",
"|:-----:|\n",
"\n",
"| | | |\n",
"|---------------|--------|-------|\n",
"| **Predicted** | WHITE | ORANGE |\n",
"| WHITE | TP | FP |\n",
"| ORANGE | FN | TN |\n",
"\n",
"သင်ခန့်မှန်းထားတဲ့အတိုင်း၊ `true positives` နဲ့ `true negatives` အရေအတွက်များပြီး၊ `false positives` နဲ့ `false negatives` အရေအတွက်နည်းရင် ပိုကောင်းပါတယ်။ ဒါက မော်ဒယ်က ပိုမိုကောင်းမွန်စွာ လုပ်ဆောင်နိုင်တယ်ဆိုတာကို ဖော်ပြပါတယ်။\n",
"\n",
"Confusion Matrix က အခြားသော metrics တွေကို ဖော်ထုတ်နိုင်စေပြီး၊ Classification Model ရဲ့ စွမ်းဆောင်ရည်ကို ပိုမိုကောင်းမွန်စွာ အကဲဖြတ်နိုင်စေပါတယ်။ အခု အဲဒီ metrics တွေကို ကြည့်ကြရအောင်။\n",
"\n",
"🎓 Precision: `TP/(TP + FP)` \n",
"အဓိပ္ပါယ်ကတော့ ခန့်မှန်းထားတဲ့ positive တွေထဲမှာ အမှန်တကယ် positive ဖြစ်တဲ့ အချိုးပါ။ [positive predictive value](https://en.wikipedia.org/wiki/Positive_predictive_value \"Positive predictive value\") လို့လည်း ခေါ်တယ်။\n",
"\n",
"🎓 Recall: `TP/(TP + FN)` \n",
"အဓိပ္ပါယ်ကတော့ အမှန်တကယ် positive ဖြစ်တဲ့ sample တွေထဲမှာ positive အဖြေကို ခန့်မှန်းနိုင်တဲ့ အချိုးပါ။ `sensitivity` လို့လည်း သိတယ်။\n",
"\n",
"🎓 Specificity: `TN/(TN + FP)` \n",
"အဓိပ္ပါယ်ကတော့ အမှန်တကယ် negative ဖြစ်တဲ့ sample တွေထဲမှာ negative အဖြေကို ခန့်မှန်းနိုင်တဲ့ အချိုးပါ။\n",
"\n",
"🎓 Accuracy: `TP + TN/(TP + TN + FP + FN)` \n",
"အဓိပ္ပါယ်ကတော့ sample တစ်ခုရဲ့ label ကို မှန်ကန်စွာ ခန့်မှန်းနိုင်တဲ့ ရာခိုင်နှုန်းပါ။\n",
"\n",
"🎓 F Measure: Precision နဲ့ Recall တို့ရဲ့ weighted average ဖြစ်ပြီး၊ အကောင်းဆုံးက 1 ဖြစ်ပြီး အဆိုးဆုံးက 0 ဖြစ်ပါတယ်။\n",
"\n",
"အခုတော့ ဒီ metrics တွေကို တွက်ကြည့်ကြရအောင်!\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"# Combine metric functions and calculate them all at once\n",
"eval_metrics <- metric_set(ppv, recall, spec, f_meas, accuracy)\n",
"eval_metrics(data = results, truth = color, estimate = .pred_class)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ဒီမော်ဒယ်ရဲ့ ROC curve ကိုမြင်နိုင်အောင် Visualization လုပ်ပါ\n",
"\n",
"အခုတော့ [`ROC curve`](https://en.wikipedia.org/wiki/Receiver_operating_characteristic) လို့ခေါ်တဲ့အရာကို မြင်နိုင်အောင် Visualization တစ်ခုထပ်လုပ်ကြည့်ရအောင်:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"# Make a roc_curve\n",
"results %>% \n",
" roc_curve(color, .pred_ORANGE) %>% \n",
" autoplot()\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"ROC curves များကို အများအားဖြင့် classifier ၏ true positives နှင့် false positives အချိုးအစားကို ကြည့်ရှုရန် အသုံးပြုကြသည်။ ROC curves တွင် `True Positive Rate`/Sensitivity ကို Y axis တွင် ပြသပြီး၊ `False Positive Rate`/1-Specificity ကို X axis တွင် ပြသလေ့ရှိသည်။ ထို့ကြောင့် curve ၏ တောင်တက်မှုနှင့် အလယ်လိုင်းနှင့် curve အကြားရှိ အကွာအဝေးသည် အရေးကြီးသည်။ သင်လိုချင်တာကတော့ လိုင်းသည် အမြန်တက်ပြီး အလယ်လိုင်းကို ကျော်သွားသော curve တစ်ခုဖြစ်သည်။ ကျွန်ုပ်တို့၏ အခွင့်အရေးတွင် false positives များစတင်ရှိပြီးနောက် လိုင်းသည် တက်ပြီး အကောင်းအတိုင်း ကျော်သွားသည်။\n",
"\n",
"နောက်ဆုံးတွင် `yardstick::roc_auc()` ကို အသုံးပြု၍ Area Under the Curve (AUC) ကို တွက်ချက်ကြမည်။ AUC ကို အဓိပ္ပာယ်ဖွင့်ဆိုသော နည်းလမ်းတစ်ခုမှာ မော်ဒယ်သည် အလွတ်ရွေးချယ်ထားသော positive ตัวอย่างတစ်ခုကို negative ตัวอย่างတစ်ခုထက် မြင့်မားစွာ အဆင့်သတ်မှတ်နိုင်မည့် အလားအလာအဖြစ် သတ်မှတ်နိုင်ခြင်းဖြစ်သည်။\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"# Calculate area under curve\n",
"results %>% \n",
" roc_auc(color, .pred_ORANGE)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"AUC ရလဒ်မှာ `0.975` လောက်ရှိပါတယ်။ AUC ဟာ 0 ကနေ 1 အထိရှိပြီး၊ အမှန်တကယ်ခန့်မှန်းမှု 100% မှန်ကန်တဲ့မော်ဒယ်ဟာ AUC 1 ရှိမယ်။ ဒီအခြေအနေမှာတော့ မော်ဒယ်ဟာ *တော်တော်ကောင်း*ပါတယ်။\n",
"\n",
"အနာဂတ်မှာ Classification ပညာရပ်တွေအကြောင်းသင်ယူတဲ့အခါမှာ မော်ဒယ်ရဲ့အမှန်တကယ်မှန်ကန်မှုကိုတိုးတက်အောင်လုပ်နည်းတွေ (ဥပမာ ဒီအခါမှာလိုမျိုး data imbalance ကိုဖြေရှင်းနည်း) သင်ယူရပါမယ်။\n",
"\n",
"## 🚀စိန်ခေါ်မှု\n",
"\n",
"Logistic regression အကြောင်းမှာသိရှိစရာတွေတော်တော်များပါတယ်! ဒါပေမယ့် အကောင်းဆုံးသင်ယူနည်းကတော့ စမ်းသပ်လုပ်ဆောင်တာပါပဲ။ ဒီအမျိုးအစားအတွက်သင့်တော်တဲ့ dataset တစ်ခုရှာပြီး မော်ဒယ်တစ်ခုတည်ဆောက်ပါ။ သင်ဘာတွေသင်ယူရမလဲ? အကြံပြုချက်: [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) မှာစိတ်ဝင်စားဖွယ် dataset တွေရှာကြည့်ပါ။\n",
"\n",
"## ပြန်လည်သုံးသပ်ခြင်းနှင့် ကိုယ်တိုင်လေ့လာခြင်း\n",
"\n",
"Stanford မှ [ဒီစာတမ်း](https://web.stanford.edu/~jurafsky/slp3/5.pdf) ရဲ့ ပထမပိုင်းစာမျက်နှာတွေကိုဖတ်ပါ။ Logistic regression ရဲ့ လက်တွေ့အသုံးချနည်းများအကြောင်းကိုလေ့လာပါ။ ယခုအချိန်အထိသင်ယူခဲ့တဲ့ regression tasks တွေထဲမှာ ဘယ်အမျိုးအစားကပိုသင့်တော်မလဲဆိုတာကိုစဉ်းစားပါ။ ဘယ်ဟာကပိုအဆင်ပြေမလဲ?\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**ဝက်ဘ်ဆိုက်မှတ်ချက်**: \nဤစာရွက်စာတမ်းကို AI ဘာသာပြန်ဝန်ဆောင်မှု [Co-op Translator](https://github.com/Azure/co-op-translator) ကို အသုံးပြု၍ ဘာသာပြန်ထားပါသည်။ ကျွန်ုပ်တို့သည် တိကျမှန်ကန်မှုအတွက် ကြိုးစားနေပါသော်လည်း၊ အလိုအလျောက်ဘာသာပြန်မှုများတွင် အမှားများ သို့မဟုတ် မမှန်ကန်မှုများ ပါဝင်နိုင်သည်ကို ကျေးဇူးပြု၍ သတိပြုပါ။ မူရင်းစာရွက်စာတမ်းကို ၎င်း၏ မူလဘာသာစကားဖြင့် အာဏာတည်သောရင်းမြစ်အဖြစ် သတ်မှတ်ရန် လိုအပ်ပါသည်။ အရေးကြီးသော အချက်အလက်များအတွက် လူက ဘာသာပြန်မှုကို အသုံးပြုရန် အကြံပြုပါသည်။ ဤဘာသာပြန်မှုကို အသုံးပြုခြင်းမှ ဖြစ်ပေါ်လာသော နားလည်မှုမှားမှုများ သို့မဟုတ် အဓိပ္ပာယ်မှားမှုများအတွက် ကျွန်ုပ်တို့သည် တာဝန်မယူပါ။\n"
]
}
],
"metadata": {
"anaconda-cloud": "",
"kernelspec": {
"display_name": "R",
"langauge": "R",
"name": "ir"
},
"language_info": {
"codemirror_mode": "r",
"file_extension": ".r",
"mimetype": "text/x-r-source",
"name": "R",
"pygments_lexer": "r",
"version": "3.4.1"
},
"coopTranslator": {
"original_hash": "feaf125f481a89c468fa115bf2aed580",
"translation_date": "2025-09-06T11:44:28+00:00",
"source_file": "2-Regression/4-Logistic/solution/R/lesson_4-R.ipynb",
"language_code": "my"
}
},
"nbformat": 4,
"nbformat_minor": 1
}