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/ml/2-Regression/1-Tools/solution/R/lesson_1-R.ipynb

454 lines
30 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-12-19T16:30:34+00:00",
"source_file": "2-Regression/1-Tools/solution/R/lesson_1-R.ipynb",
"language_code": "ml"
}
},
"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",
"<p >\n",
" <img src=\"../../../../../../translated_images/ml/encouRage.e75d5fe0367fb913.webp\"\n",
" width=\"630\"/>\n",
" <figcaption>@allison_horst രചിച്ച കലാസൃഷ്ടി</figcaption>\n",
"\n",
"<!--![Artwork by \\@allison_horst](../../../../../../translated_images/ml/encouRage.e75d5fe0367fb913.webp)<br>Artwork by @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",
"\n",
"\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",
"\n",
"\n",
"> glimpse() ഉം slice() ഉം [`dplyr`](https://dplyr.tidyverse.org/) ലെ ഫംഗ്ഷനുകളാണ്. Tidyverse ന്റെ ഭാഗമായ Dplyr, ഡാറ്റ മാനിപ്പുലേഷന്റെ ഒരു വ്യാകരണം ആണ്, ഇത് സാധാരണ ഡാറ്റ മാനിപ്പുലേഷൻ പ്രശ്നങ്ങൾ പരിഹരിക്കാൻ സഹായിക്കുന്ന സ്ഥിരമായ ക്രിയാപദങ്ങളുടെ ഒരു സെറ്റ് നൽകുന്നു\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",
"ഇപ്പോൾ ഡാറ്റ തയ്യാറായതിനാൽ, ഈ ഡാറ്റാസെറ്റിലെ സംഖ്യകളിൽ ലജിക്കൽ സ്പ്ലിറ്റ് നിർണ്ണയിക്കാൻ യന്ത്രം സഹായിക്കുമോ എന്ന് നോക്കാം. ഡാറ്റ പിരിക്കാൻ *എങ്ങനെ* എന്ന വിവരങ്ങൾ ഉൾക്കൊള്ളുന്ന ഒരു ഒബ്ജക്റ്റ് സൃഷ്ടിക്കാൻ, Tidymodels ഫ്രെയിംവർകിന്റെ ഭാഗമായ [rsample](https://tidymodels.github.io/rsample/) പാക്കേജ് ഉപയോഗിക്കാം, തുടർന്ന് സൃഷ്ടിച്ച പരിശീലനവും പരിശോധനാ സെറ്റുകളും എടുക്കാൻ രണ്ട് 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": [
"ഒരു മോഡൽ *നിർവചിച്ചശേഷം*, മോഡൽ `estimated` അല്ലെങ്കിൽ `trained` ചെയ്യാൻ സാധിക്കും, സാധാരണയായി ഒരു ഫോർമുലയും ചില ഡാറ്റയും ഉപയോഗിച്ച് [`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": [
"From the model output, we can see the coefficients learned during training. They represent the coefficients of the line of best fit that gives us the lowest overall error between the actual and predicted variable.\n",
"<br>\n",
"\n",
"## 5. Make predictions on the test set\n",
"\n",
"Now that we've trained a model, we can use it to predict the disease progression y for the test dataset using [parsnip::predict()](https://parsnip.tidymodels.org/reference/predict.model_fit.html). This will be used to draw the line between data groups.\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 പരമ്പരാഗതം എപ്പോഴും ഫലങ്ങളുടെ ഒരു ടിബിൾ/ഡാറ്റാ ഫ്രെയിം സ്റ്റാൻഡർഡൈസ്ഡ് കോളം പേരുകളോടെ ഉത്പാദിപ്പിക്കുകയാണ്. ഇത് മിക്കവാറും plotting പോലുള്ള തുടര്‍ന്നുള്ള പ്രവർത്തനങ്ങൾക്ക് ഉപയോഗയോഗ്യമായ ഫോർമാറ്റിൽ യഥാർത്ഥ ഡാറ്റയും പ്രവചനങ്ങളും സംയോജിപ്പിക്കാൻ എളുപ്പമാക്കുന്നു.\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<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**അസൂയാ**: \nഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖയാണ് പ്രാമാണികമായ ഉറവിടം എന്ന് പരിഗണിക്കേണ്ടതാണ്. നിർണായകമായ വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
]
}
]
}