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.
1084 lines
72 KiB
1084 lines
72 KiB
{
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2,
|
|
"metadata": {
|
|
"colab": {
|
|
"name": "lesson_3-R.ipynb",
|
|
"provenance": [],
|
|
"collapsed_sections": [],
|
|
"toc_visible": true
|
|
},
|
|
"kernelspec": {
|
|
"name": "ir",
|
|
"display_name": "R"
|
|
},
|
|
"language_info": {
|
|
"name": "R"
|
|
},
|
|
"coopTranslator": {
|
|
"original_hash": "5015d65d61ba75a223bfc56c273aa174",
|
|
"translation_date": "2025-12-19T16:25:20+00:00",
|
|
"source_file": "2-Regression/3-Linear/solution/R/lesson_3-R.ipynb",
|
|
"language_code": "ml"
|
|
}
|
|
},
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"# ഒരു റെഗ്രഷൻ മോഡൽ നിർമ്മിക്കുക: ലീനിയർ மற்றும் പോളിനോമിയൽ റെഗ്രഷൻ മോഡലുകൾ\n"
|
|
],
|
|
"metadata": {
|
|
"id": "EgQw8osnsUV-"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"## പംപ്കിൻ വിലനിർണ്ണയത്തിനുള്ള ലീനിയർ ആൻഡ് പോളിനോമിയൽ റെഗ്രഷൻ - പാഠം 3\n",
|
|
"<p >\n",
|
|
" <img src=\"../../../../../../translated_images/ml/linear-polynomial.5523c7cb6576ccab.webp\"\n",
|
|
" width=\"800\"/>\n",
|
|
" <figcaption>ഇൻഫോഗ്രാഫിക് - ദാസാനി മടിപള്ളി</figcaption>\n",
|
|
"\n",
|
|
"\n",
|
|
"<!--{width=\"800\"}-->\n",
|
|
"\n",
|
|
"#### പരിചയം\n",
|
|
"\n",
|
|
"ഇതുവരെ നിങ്ങൾ പംപ്കിൻ വിലനിർണ്ണയ ഡാറ്റാസെറ്റിൽ നിന്നുള്ള സാമ്പിൾ ഡാറ്റ ഉപയോഗിച്ച് റെഗ്രഷൻ എന്താണെന്ന് അന്വേഷിച്ചു. നിങ്ങൾ അത് `ggplot2` ഉപയോഗിച്ച് ദൃശ്യവൽക്കരിക്കുകയും ചെയ്തു.💪\n",
|
|
"\n",
|
|
"ഇപ്പോൾ നിങ്ങൾ മെഷീൻ ലേണിംഗിനുള്ള റെഗ്രഷനിൽ കൂടുതൽ ആഴത്തിൽ പ്രവേശിക്കാൻ തയ്യാറാണ്. ഈ പാഠത്തിൽ, നിങ്ങൾക്ക് രണ്ട് തരത്തിലുള്ള റെഗ്രഷനുകൾക്കുറിച്ച് കൂടുതൽ അറിയാം: *അടിസ്ഥാന ലീനിയർ റെഗ്രഷൻ*യും *പോളിനോമിയൽ റെഗ്രഷൻ*യും, കൂടാതെ ഈ സാങ്കേതികവിദ്യകളുടെ പിന്നിലെ ചില ഗണിതശാസ്ത്രവും.\n",
|
|
"\n",
|
|
"> ഈ പാഠ്യപദ്ധതിയിൽ, ഗണിതത്തിലെ അടിസ്ഥാന അറിവുകൾ മാത്രമേ ആവശ്യമായുള്ളൂ എന്ന് നാം കരുതുന്നു, മറ്റ് മേഖലകളിൽ നിന്നുള്ള വിദ്യാർത്ഥികൾക്ക് ഇത് സുലഭമാക്കാൻ നോട്ടുകൾ, 🧮 വിളിപ്പറയലുകൾ, ചിത്രങ്ങൾ, മറ്റ് പഠനോപകരണങ്ങൾ എന്നിവ ഉപയോഗിക്കുന്നു.\n",
|
|
"\n",
|
|
"#### തയ്യാറെടുപ്പ്\n",
|
|
"\n",
|
|
"ഓർമ്മപ്പെടുത്തലായി, നിങ്ങൾ ഈ ഡാറ്റ ലോഡ് ചെയ്യുന്നത് അതിൽ നിന്നുള്ള ചോദ്യങ്ങൾ ചോദിക്കാൻ ആണ്.\n",
|
|
"\n",
|
|
"- പംപ്കിനുകൾ വാങ്ങാൻ ഏറ്റവും നല്ല സമയം എപ്പോൾ?\n",
|
|
"\n",
|
|
"- ഒരു മിനിയേച്ചർ പംപ്കിൻ കേസിന്റെ വില എത്ര പ്രതീക്ഷിക്കാം?\n",
|
|
"\n",
|
|
"- അവയെ അർദ്ധ-ബഷൽ ബാസ്കറ്റുകളിൽ വാങ്ങണോ, 1 1/9 ബഷൽ ബോക്സിൽ വാങ്ങണോ? ഈ ഡാറ്റയിൽ കൂടുതൽ അന്വേഷിക്കാം.\n",
|
|
"\n",
|
|
"മുൻപത്തെ പാഠത്തിൽ, നിങ്ങൾ ഒരു `tibble` (ഡാറ്റാ ഫ്രെയിമിന്റെ ആധുനിക രൂപം) സൃഷ്ടിച്ച് അതിൽ യഥാർത്ഥ ഡാറ്റാസെറ്റിന്റെ ഭാഗം ഉൾപ്പെടുത്തി, വില ബഷലിനനുസരിച്ച് സ്റ്റാൻഡർഡൈസ് ചെയ്തു. എന്നാൽ അതിലൂടെ നിങ്ങൾക്ക് ഏകദേശം 400 ഡാറ്റാ പോയിന്റുകൾ മാത്രമേ ലഭിച്ചുള്ളൂ, അത് പോലും പകുതിവർഷ കാലയളവിനുള്ളിൽ മാത്രം. ഡാറ്റയുടെ സ്വഭാവത്തെ കുറിച്ച് കൂടുതൽ വിശദാംശങ്ങൾ ലഭിക്കാൻ നാം കൂടുതൽ ശുദ്ധീകരണം നടത്താമോ? നോക്കാം... 🕵️♀️\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",
|
|
"- `janitor`: [janitor പാക്കേജ്](https://github.com/sfirke/janitor) മാലിന്യമായ ഡാറ്റ പരിശോധിക്കാനും ശുദ്ധമാക്കാനും സഹായിക്കുന്ന ലളിതമായ ഉപകരണങ്ങൾ നൽകുന്നു.\n",
|
|
"\n",
|
|
"- `corrplot`: [corrplot പാക്കേജ്](https://cran.r-project.org/web/packages/corrplot/vignettes/corrplot-intro.html) കോറിലേഷൻ മാട്രിക്സിന്റെ ദൃശ്യപരിശോധനാ ഉപകരണം ആണ്, സ്വയം വേരിയബിൾ ക്രമീകരണം പിന്തുണയ്ക്കുന്നു, ഇതിലൂടെ വേരിയബിളുകൾക്കിടയിലെ മറഞ്ഞിരിക്കുന്ന മാതൃകകൾ കണ്ടെത്താൻ സഹായിക്കുന്നു.\n",
|
|
"\n",
|
|
"ഇവ ഇൻസ്റ്റാൾ ചെയ്യാൻ:\n",
|
|
"\n",
|
|
"`install.packages(c(\"tidyverse\", \"tidymodels\", \"janitor\", \"corrplot\"))`\n",
|
|
"\n",
|
|
"താഴെ കൊടുത്തിരിക്കുന്ന സ്ക്രിപ്റ്റ് ഈ മോഡ്യൂൾ പൂർത്തിയാക്കാൻ ആവശ്യമായ പാക്കേജുകൾ നിങ്ങൾക്കുണ്ടോ എന്ന് പരിശോധിച്ച്, ഇല്ലെങ്കിൽ ഇൻസ്റ്റാൾ ചെയ്യും.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "WqQPS1OAsg3H"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"suppressWarnings(if (!require(\"pacman\")) install.packages(\"pacman\"))\n",
|
|
"\n",
|
|
"pacman::p_load(tidyverse, tidymodels, janitor, corrplot)"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "tA4C2WN3skCf",
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"outputId": "c06cd805-5534-4edc-f72b-d0d1dab96ac0"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"നാം പിന്നീട് ഈ അത്ഭുതകരമായ പാക്കേജുകൾ ലോഡ് ചെയ്ത് നമ്മുടെ നിലവിലെ R സെഷനിൽ ലഭ്യമാക്കും. (ഇത് വെറും ഉദാഹരണത്തിന് ആണ്, `pacman::p_load()` ഇതിനകം തന്നെ അത് ചെയ്തിട്ടുണ്ട്)\n",
|
|
"\n",
|
|
"## 1. ഒരു ലീനിയർ റെഗ്രഷൻ ലൈൻ\n",
|
|
"\n",
|
|
"പാഠം 1-ൽ നിങ്ങൾ പഠിച്ചതുപോലെ, ഒരു ലീനിയർ റെഗ്രഷൻ അഭ്യാസത്തിന്റെ ലക്ഷ്യം ഒരു *ബെസ്റ്റ് ഫിറ്റ്* *ലൈൻ* വരയ്ക്കാനാകണം:\n",
|
|
"\n",
|
|
"- **വേരിയബിൾ ബന്ധങ്ങൾ കാണിക്കുക**. വേരിയബിളുകൾ തമ്മിലുള്ള ബന്ധം കാണിക്കുക\n",
|
|
"\n",
|
|
"- **ഭാവി പ്രവചനങ്ങൾ നടത്തുക**. ഒരു പുതിയ ഡാറ്റാ പോയിന്റ് ആ ലൈൻ സംബന്ധിച്ച് എവിടെ വരുമെന്ന് കൃത്യമായി പ്രവചിക്കുക.\n",
|
|
"\n",
|
|
"ഈ തരത്തിലുള്ള ഒരു ലൈൻ വരയ്ക്കാൻ, നാം **ലീസ്റ്റ്-സ്ക്വയർസ് റെഗ്രഷൻ** എന്ന സ്റ്റാറ്റിസ്റ്റിക്കൽ സാങ്കേതിക വിദ്യ ഉപയോഗിക്കുന്നു. `least-squares` എന്ന പദം അർത്ഥമാക്കുന്നത് റെഗ്രഷൻ ലൈൻ ചുറ്റുമുള്ള എല്ലാ ഡാറ്റാ പോയിന്റുകളും സ്ക്വയർ ചെയ്ത് കൂട്ടിച്ചേർക്കുന്നതാണ്. ആശയവിനിമയമായി, ആ അവസാനത്തുക όσο ചെറുതായിരിക്കണം, കാരണം നാം കുറവ് പിശകുകൾ (errors) ആഗ്രഹിക്കുന്നു, അതായത് `least-squares`. അതിനാൽ, ബെസ്റ്റ് ഫിറ്റ് ലൈൻ എന്നത് സ്ക്വയർ ചെയ്ത പിശകുകളുടെ മൊത്തം മൂല്യം ഏറ്റവും കുറഞ്ഞ ലൈൻ ആണ് - അതുകൊണ്ടാണ് ഇതിന് *least squares regression* എന്ന് പേരിട്ടിരിക്കുന്നത്.\n",
|
|
"\n",
|
|
"നാം ഇങ്ങനെ ചെയ്യുന്നത് എല്ലാ ഡാറ്റാ പോയിന്റുകളിലേക്കുള്ള കൂറ്റൻ ദൂരം കുറഞ്ഞ ഒരു ലൈൻ മോഡൽ ചെയ്യാൻ ആഗ്രഹിക്കുന്നതിനാൽ ആണ്. ദിശയേക്കാൾ അതിന്റെ വലിപ്പം (magnitude) പ്രധാനമാണെന്ന് കണക്കിലെടുത്ത് നാം സ്ക്വയർ ചെയ്യുന്നു.\n",
|
|
"\n",
|
|
"> **🧮 ഗണിതം കാണിക്കൂ**\n",
|
|
">\n",
|
|
"> *ബെസ്റ്റ് ഫിറ്റ് ലൈൻ* എന്ന് വിളിക്കുന്ന ഈ ലൈൻ [ഒരു സമവാക്യം](https://en.wikipedia.org/wiki/Simple_linear_regression) ഉപയോഗിച്ച് പ്രകടിപ്പിക്കാം:\n",
|
|
">\n",
|
|
"> Y = a + bX\n",
|
|
">\n",
|
|
"> `X` എന്നത് '`വ്യാഖ്യാന വേരിയബിൾ` അല്ലെങ്കിൽ `പ്രെഡിക്ടർ`' ആണ്. `Y` '`അനുഭവ വേരിയബിൾ` അല്ലെങ്കിൽ `ഫലം`' ആണ്. ലൈന്റെ സ്ലോപ്പ് `b` ആണ്, `a` y-ഇന്റർസെപ്റ്റ് ആണ്, അതായത് `X = 0` ആയപ്പോൾ `Y` യുടെ മൂല്യം.\n",
|
|
"\n",
|
|
"> \n",
|
|
" Jen Looper-ന്റെ ഇൻഫോഗ്രാഫിക്\n",
|
|
">\n",
|
|
"> ആദ്യം, സ്ലോപ്പ് `b` കണക്കാക്കുക.\n",
|
|
">\n",
|
|
"> മറ്റൊരു വാക്കിൽ പറഞ്ഞാൽ, നമ്മുടെ പംപ്കിൻ ഡാറ്റയുടെ പ്രാഥമിക ചോദ്യത്തെ ആശ്രയിച്ച്: \"ഒരു മാസത്തിൽ പംപ്കിന്റെ വില ബുഷലിന് എത്ര predict ചെയ്യുക\", `X` വിലയെ സൂചിപ്പിക്കും, `Y` വിൽപ്പന മാസത്തെ സൂചിപ്പിക്കും.\n",
|
|
">\n",
|
|
"> \n",
|
|
" Jen Looper-ന്റെ ഇൻഫോഗ്രാഫിക്\n",
|
|
"> \n",
|
|
"> Y യുടെ മൂല്യം കണക്കാക്കുക. നിങ്ങൾ ഏകദേശം \\$4 നൽകുകയാണെങ്കിൽ, അത് ഏപ്രിൽ ആയിരിക്കണം!\n",
|
|
">\n",
|
|
"> ലൈൻ കണക്കാക്കുന്ന ഗണിതം സ്ലോപ്പും ഇന്റർസെപ്റ്റും ആശ്രയിച്ചിരിക്കുന്നു, അതായത് `X = 0` ആയപ്പോൾ `Y` എവിടെയാണ് എന്നതും.\n",
|
|
">\n",
|
|
"> ഈ മൂല്യങ്ങൾ കണക്കാക്കുന്ന രീതി [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) വെബ്സൈറ്റിൽ കാണാം. കൂടാതെ [ഈ Least-squares കാൽക്കുലേറ്റർ](https://www.mathsisfun.com/data/least-squares-calculator.html) സന്ദർശിച്ച് സംഖ്യകളുടെ മൂല്യങ്ങൾ ലൈൻ എങ്ങനെ ബാധിക്കുന്നുവെന്ന് കാണാം.\n",
|
|
"\n",
|
|
"അതിനാൽ ഭയപ്പെടേണ്ട കാര്യമില്ല, അല്ലേ? 🤓\n",
|
|
"\n",
|
|
"#### സഹസംബന്ധം (Correlation)\n",
|
|
"\n",
|
|
"കൂടുതൽ മനസ്സിലാക്കേണ്ട മറ്റൊരു പദം **Correlation Coefficient** ആണ്, ഇത് നൽകിയ X, Y വേരിയബിളുകൾക്കിടയിലെ ബന്ധം അളക്കുന്നു. സ്കാറ്റർപ്ലോട്ട് ഉപയോഗിച്ച് ഈ കോഫിഷ്യന്റ് എളുപ്പത്തിൽ കാണാം. ഡാറ്റാപോയിന്റുകൾ ഒരു സുതാര്യമായ ലൈൻ രൂപത്തിൽ പടർന്നാൽ correlation ഉയർന്നതാണ്, എന്നാൽ X, Y ഇടയിൽ എല്ലായിടത്തും പടർന്നാൽ correlation കുറവാണ്.\n",
|
|
"\n",
|
|
"ഒരു നല്ല ലീനിയർ റെഗ്രഷൻ മോഡൽ Least-Squares Regression രീതിയിൽ regression ലൈൻ ഉപയോഗിച്ച് Correlation Coefficient 1-ന് അടുത്ത (0-ന് പകരം) ഉയർന്ന മൂല്യമുള്ളതായിരിക്കും.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "cdX5FRpvsoP5"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"## **2. ഡാറ്റയുമായി ഒരു നൃത്തം: മോഡലിംഗിനായി ഉപയോഗിക്കപ്പെടുന്ന ഒരു ഡാറ്റാ ഫ്രെയിം സൃഷ്ടിക്കൽ**\n",
|
|
"\n",
|
|
"<p >\n",
|
|
" <img src=\"../../../../../../translated_images/ml/janitor.e4a77dd3d3e6a32e.webp\"\n",
|
|
" width=\"700\"/>\n",
|
|
" <figcaption>@allison_horst എന്നവരുടെ കലാസൃഷ്ടി</figcaption>\n",
|
|
"\n",
|
|
"\n",
|
|
"<!--{width=\"700\"}-->\n"
|
|
],
|
|
"metadata": {
|
|
"id": "WdUKXk7Bs8-V"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"Load up required libraries and dataset. Convert the data to a data frame containing a subset of the data:\n",
|
|
"\n",
|
|
"- ബസൽ വിലയിട്ട പംപ്കിനുകൾ മാത്രം നേടുക\n",
|
|
"\n",
|
|
"- തീയതി ഒരു മാസമായി മാറ്റുക\n",
|
|
"\n",
|
|
"- വില ഉയർന്നതും താഴ്ന്നതും ശരാശരി ആയി കണക്കാക്കുക\n",
|
|
"\n",
|
|
"- വില ബസൽ അളവിൽ വിലയിടുന്നതായി മാറ്റുക\n",
|
|
"\n",
|
|
"> We covered these steps in the [previous lesson](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/2-Data/solution/lesson_2-R.ipynb).\n"
|
|
],
|
|
"metadata": {
|
|
"id": "fMCtu2G2s-p8"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Load the core Tidyverse packages\n",
|
|
"library(tidyverse)\n",
|
|
"library(lubridate)\n",
|
|
"\n",
|
|
"# Import the pumpkins data\n",
|
|
"pumpkins <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/2-Regression/data/US-pumpkins.csv\")\n",
|
|
"\n",
|
|
"\n",
|
|
"# Get a glimpse and dimensions of the data\n",
|
|
"glimpse(pumpkins)\n",
|
|
"\n",
|
|
"\n",
|
|
"# Print the first 50 rows of the data set\n",
|
|
"pumpkins %>% \n",
|
|
" slice_head(n = 5)"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "ryMVZEEPtERn"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"ശുദ്ധമായ സാഹസികതയുടെ ആത്മാവിൽ, മാലിന്യമായ ഡാറ്റ പരിശോധിക്കാനും ശുദ്ധമാക്കാനും എളുപ്പമുള്ള ഫംഗ്ഷനുകൾ നൽകുന്ന [`janitor package`](../../../../../../2-Regression/3-Linear/solution/R/github.com/sfirke/janitor) പരിശോധിക്കാം. ഉദാഹരണത്തിന്, നമ്മുടെ ഡാറ്റയുടെ കോളം നാമങ്ങൾ നോക്കാം:\n"
|
|
],
|
|
"metadata": {
|
|
"id": "xcNxM70EtJjb"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Return column names\n",
|
|
"pumpkins %>% \n",
|
|
" names()"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "5XtpaIigtPfW"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"🤔 നാം കൂടുതൽ മെച്ചപ്പെടുത്താം. ഈ കോളം നാമങ്ങൾ `janitor::clean_names` ഉപയോഗിച്ച് [snake_case](https://en.wikipedia.org/wiki/Snake_case) രീതി അനുസരിച്ച് `friendR` ആക്കാം. ഈ ഫംഗ്ഷൻ കുറിച്ച് കൂടുതൽ അറിയാൻ: `?clean_names`\n"
|
|
],
|
|
"metadata": {
|
|
"id": "IbIqrMINtSHe"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Clean names to the snake_case convention\n",
|
|
"pumpkins <- pumpkins %>% \n",
|
|
" clean_names(case = \"snake\")\n",
|
|
"\n",
|
|
"# Return column names\n",
|
|
"pumpkins %>% \n",
|
|
" names()"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "a2uYvclYtWvX"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"കൂടുതൽ tidyR 🧹! ഇപ്പോൾ, മുൻപത്തെ പാഠത്തിൽപോലെ `dplyr` ഉപയോഗിച്ച് ഡാറ്റയുമായി ഒരു നൃത്തം! 💃\n"
|
|
],
|
|
"metadata": {
|
|
"id": "HfhnuzDDtaDd"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Select desired columns\n",
|
|
"pumpkins <- pumpkins %>% \n",
|
|
" select(variety, city_name, package, low_price, high_price, date)\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"# Extract the month from the dates to a new column\n",
|
|
"pumpkins <- pumpkins %>%\n",
|
|
" mutate(date = mdy(date),\n",
|
|
" month = month(date)) %>% \n",
|
|
" select(-date)\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"# Create a new column for average Price\n",
|
|
"pumpkins <- pumpkins %>% \n",
|
|
" mutate(price = (low_price + high_price)/2)\n",
|
|
"\n",
|
|
"\n",
|
|
"# Retain only pumpkins with the string \"bushel\"\n",
|
|
"new_pumpkins <- pumpkins %>% \n",
|
|
" filter(str_detect(string = package, pattern = \"bushel\"))\n",
|
|
"\n",
|
|
"\n",
|
|
"# Normalize the pricing so that you show the pricing per bushel, not per 1 1/9 or 1/2 bushel\n",
|
|
"new_pumpkins <- new_pumpkins %>% \n",
|
|
" mutate(price = case_when(\n",
|
|
" str_detect(package, \"1 1/9\") ~ price/(1.1),\n",
|
|
" str_detect(package, \"1/2\") ~ price*2,\n",
|
|
" TRUE ~ price))\n",
|
|
"\n",
|
|
"# Relocate column positions\n",
|
|
"new_pumpkins <- new_pumpkins %>% \n",
|
|
" relocate(month, .before = variety)\n",
|
|
"\n",
|
|
"\n",
|
|
"# Display the first 5 rows\n",
|
|
"new_pumpkins %>% \n",
|
|
" slice_head(n = 5)"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "X0wU3gQvtd9f"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"നല്ല ജോലി!👌 നിങ്ങൾക്ക് ഇപ്പോൾ ഒരു ശുദ്ധവും ക്രമവുമുള്ള ഡാറ്റാ സെറ്റ് ലഭിച്ചു, അതിൽ നിങ്ങൾക്ക് നിങ്ങളുടെ പുതിയ റെഗ്രഷൻ മോഡൽ നിർമ്മിക്കാം!\n",
|
|
"\n",
|
|
"ഒരു സ്കാറ്റർ പ്ലോട്ട് വേണോ?\n"
|
|
],
|
|
"metadata": {
|
|
"id": "UpaIwaxqth82"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Set theme\n",
|
|
"theme_set(theme_light())\n",
|
|
"\n",
|
|
"# Make a scatter plot of month and price\n",
|
|
"new_pumpkins %>% \n",
|
|
" ggplot(mapping = aes(x = month, y = price)) +\n",
|
|
" geom_point(size = 1.6)\n"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "DXgU-j37tl5K"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"ഒരു സ്കാറ്റർ പ്ലോട്ട് നമ്മെ ഓർമ്മിപ്പിക്കുന്നു ആഗസ്റ്റ് മുതൽ ഡിസംബർ വരെ മാത്രമേ ഞങ്ങൾക്ക് മാസ ഡാറ്റ ഉണ്ടായുള്ളൂ. ലീനിയർ രീതിയിൽ നിഗമനങ്ങൾ വരുത്താൻ കൂടുതൽ ഡാറ്റ ആവശ്യമുണ്ടാകാം.\n",
|
|
"\n",
|
|
"നമ്മുടെ മോഡലിംഗ് ഡാറ്റ വീണ്ടും നോക്കാം:\n"
|
|
],
|
|
"metadata": {
|
|
"id": "Ve64wVbwtobI"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Display first 5 rows\n",
|
|
"new_pumpkins %>% \n",
|
|
" slice_head(n = 5)"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "HFQX2ng1tuSJ"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"നാം `city` അല്ലെങ്കിൽ `package` എന്ന ടൈപ്പ് കറക്ടർ ആയ കോളങ്ങളിലെ അടിസ്ഥാനത്തിൽ ഒരു പംപ്കിന്റെ `price` പ്രവചിക്കാൻ ആഗ്രഹിക്കുന്നുവെങ്കിൽ എന്താകും? അല്ലെങ്കിൽ കൂടുതൽ ലളിതമായി, ഉദാഹരണത്തിന് `package` ഉം `price` ഉം തമ്മിലുള്ള സഹസംബന്ധം (correlation) കണ്ടെത്താൻ എങ്ങനെ സാധിക്കും, ഇത് രണ്ടും ന്യുമറിക് ആയിരിക്കണം? 🤷🤷\n",
|
|
"\n",
|
|
"മെഷീൻ ലേണിംഗ് മോഡലുകൾ ടെക്സ്റ്റ് മൂല്യങ്ങളേക്കാൾ ന്യുമറിക് ഫീച്ചറുകളുമായി മികച്ച രീതിയിൽ പ്രവർത്തിക്കുന്നു, അതിനാൽ സാധാരണയായി കാറ്റഗോറിയൽ ഫീച്ചറുകൾ ന്യുമറിക് പ്രതിനിധാനങ്ങളായി മാറ്റേണ്ടതുണ്ട്.\n",
|
|
"\n",
|
|
"ഇത് അർത്ഥമാക്കുന്നത്, മോഡലിന് ഫലപ്രദമായി ഉപയോഗിക്കാൻ എളുപ്പമാക്കാൻ നമ്മുടെ പ്രവചനങ്ങളായ ഫീച്ചറുകൾ പുനരൂപീകരിക്കേണ്ടതുണ്ട്, ഇത് `feature engineering` എന്നറിയപ്പെടുന്ന പ്രക്രിയയാണ്.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "7hsHoxsStyjJ"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"## 3. മോഡലിംഗിനായി ഡാറ്റ പ്രീപ്രോസസ്സ് ചെയ്യൽ recipes ഉപയോഗിച്ച് 👩🍳👨🍳\n",
|
|
"\n",
|
|
"മോഡലിന് എളുപ്പത്തിൽ ഉപയോഗിക്കാൻ പ്രിഡിക്ടർ മൂല്യങ്ങൾ പുനരൂപീകരിക്കുന്ന പ്രവർത്തനങ്ങളെ `ഫീച്ചർ എഞ്ചിനീയറിംഗ്` എന്ന് വിളിക്കുന്നു.\n",
|
|
"\n",
|
|
"വിവിധ മോഡലുകൾക്ക് വ്യത്യസ്തമായ പ്രീപ്രോസസിംഗ് ആവശ്യകതകൾ ഉണ്ട്. ഉദാഹരണത്തിന്, ലിസ്റ്റ് സ്ക്വയർസ് മാസവും, വൈവിധ്യവും, city_name പോലുള്ള `കാറ്റഗോറിയൽ വേരിയബിളുകൾ എങ്കോഡിംഗ്` ആവശ്യമാണ്. ഇത് ഒരു `കാറ്റഗോറിയൽ മൂല്യങ്ങൾ` ഉള്ള കോളം ഒന്ന് അല്ലെങ്കിൽ കൂടുതൽ `സംഖ്യാത്മക കോളങ്ങളായി` മാറ്റുന്നതാണ്, അവ ഒറിജിനലിന്റെ സ്ഥാനത്ത് വരും.\n",
|
|
"\n",
|
|
"ഉദാഹരണത്തിന്, നിങ്ങളുടെ ഡാറ്റയിൽ താഴെ കാണുന്ന കാറ്റഗോറിയൽ ഫീച്ചർ ഉണ്ടെന്ന് കരുതുക:\n",
|
|
"\n",
|
|
"| city |\n",
|
|
"|:-------:|\n",
|
|
"| Denver |\n",
|
|
"| Nairobi |\n",
|
|
"| Tokyo |\n",
|
|
"\n",
|
|
"ഓർഡിനൽ എങ്കോഡിംഗ് ഉപയോഗിച്ച് ഓരോ വിഭാഗത്തിനും ഒരു പ്രത്യേക പൂർണ്ണസംഖ്യ മൂല്യം നൽകാം, ഇങ്ങനെ:\n",
|
|
"\n",
|
|
"| city |\n",
|
|
"|:----:|\n",
|
|
"| 0 |\n",
|
|
"| 1 |\n",
|
|
"| 2 |\n",
|
|
"\n",
|
|
"ഇതാണ് നാം നമ്മുടെ ഡാറ്റയിൽ ചെയ്യാൻ പോകുന്നത്!\n",
|
|
"\n",
|
|
"ഈ വിഭാഗത്തിൽ, നാം മറ്റൊരു അത്ഭുതകരമായ Tidymodels പാക്കേജ്: [recipes](https://tidymodels.github.io/recipes/) പരിചയപ്പെടും - ഇത് നിങ്ങളുടെ മോഡൽ പരിശീലിപ്പിക്കുന്നതിന് **മുമ്പ്** നിങ്ങളുടെ ഡാറ്റ പ്രീപ്രോസസ്സ് ചെയ്യാൻ സഹായിക്കുന്നതിന് രൂപകൽപ്പന ചെയ്തതാണ്. ഒരു റെസിപ്പി എന്നത് ഒരു ഒബ്ജക്റ്റ് ആണ്, അത് ഒരു ഡാറ്റ സെറ്റിൽ ഏത് ഘട്ടങ്ങൾ പ്രയോഗിക്കണമെന്ന് നിർവചിക്കുന്നു, മോഡലിംഗിനായി അത് തയ്യാറാക്കാൻ.\n",
|
|
"\n",
|
|
"ഇപ്പോൾ, പ്രിഡിക്ടർ കോളങ്ങളിലെ എല്ലാ നിരീക്ഷണങ്ങൾക്കും ഒരു പ്രത്യേക പൂർണ്ണസംഖ്യ നൽകുന്ന റെസിപ്പി സൃഷ്ടിക്കാം:\n"
|
|
],
|
|
"metadata": {
|
|
"id": "AD5kQbcvt3Xl"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Specify a recipe\n",
|
|
"pumpkins_recipe <- recipe(price ~ ., data = new_pumpkins) %>% \n",
|
|
" step_integer(all_predictors(), zero_based = TRUE)\n",
|
|
"\n",
|
|
"\n",
|
|
"# Print out the recipe\n",
|
|
"pumpkins_recipe"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "BNaFKXfRt9TU"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"അദ്ഭുതം! 👏 നാം ഇപ്പോൾ ഒരു ഔട്ട്കം (വില) നിർദ്ദേശിക്കുന്നതും അതിന്റെ അനുബന്ധ പ്രവചനങ്ങൾ നിർദ്ദേശിക്കുന്നതുമായ ആദ്യത്തെ റെസിപ്പി സൃഷ്ടിച്ചു, കൂടാതെ എല്ലാ പ്രവചന കോളങ്ങളെയും പൂർണ്ണസംഖ്യകളുടെ ഒരു സെറ്റായി എൻകോഡ് ചെയ്യണം 🙌! നമുക്ക് അതിനെ വേഗത്തിൽ വിഭജിക്കാം:\n",
|
|
"\n",
|
|
"- `recipe()` എന്ന ഫോർമുല ഉപയോഗിച്ച് വിളിക്കുന്നത്, `new_pumpkins` ഡാറ്റയെ റഫറൻസായി ഉപയോഗിച്ച് വേരിയബിളുകളുടെ *റോളുകൾ* റെസിപ്പിക്ക് പറയുന്നു. ഉദാഹരണത്തിന്, `price` കോളത്തിന് `outcome` റോളാണ് നൽകിയിരിക്കുന്നത്, ബാക്കി കോളങ്ങൾക്കു `predictor` റോളാണ് നൽകിയിരിക്കുന്നത്.\n",
|
|
"\n",
|
|
"- `step_integer(all_predictors(), zero_based = TRUE)` എല്ലാ പ്രവചനങ്ങൾ 0 മുതൽ സംഖ്യപ്പെടുത്തുന്ന പൂർണ്ണസംഖ്യകളായി മാറ്റണമെന്ന് വ്യക്തമാക്കുന്നു.\n",
|
|
"\n",
|
|
"നിങ്ങൾക്ക് ഇങ്ങനെ ചിന്തകൾ ഉണ്ടാകാം: \"ഇത് വളരെ കൂൾ ആണ്!! പക്ഷേ റെസിപ്പികൾ ഞാൻ പ്രതീക്ഷിക്കുന്നതുപോലെ പ്രവർത്തിക്കുന്നുണ്ടെന്ന് എങ്ങനെ ഉറപ്പാക്കാം? 🤔\"\n",
|
|
"\n",
|
|
"അത് ഒരു അത്ഭുതകരമായ ചിന്തയാണ്! നിങ്ങൾറെ റെസിപ്പി നിർവചിച്ചതിന് ശേഷം, ഡാറ്റ പ്രീപ്രോസസ് ചെയ്യാൻ ആവശ്യമായ പാരാമീറ്ററുകൾ കണക്കാക്കാനും, പ്രോസസ് ചെയ്ത ഡാറ്റ എടുക്കാനും കഴിയും. Tidymodels ഉപയോഗിക്കുമ്പോൾ സാധാരണയായി ഇത് ചെയ്യേണ്ടതില്ല (നമുക്ക് ഉടൻ കാണാം - `workflows`), പക്ഷേ റെസിപ്പികൾ നിങ്ങൾ പ്രതീക്ഷിക്കുന്നതുപോലെ പ്രവർത്തിക്കുന്നുണ്ടെന്ന് ഉറപ്പാക്കാൻ sanity check ചെയ്യേണ്ടപ്പോൾ ഇത് സഹായിക്കും.\n",
|
|
"\n",
|
|
"അതിനായി, നിങ്ങൾക്ക് രണ്ട് കൂടുതൽ ക്രിയകൾ വേണം: `prep()` ഉം `bake()` ഉം, കൂടാതെ എപ്പോഴും പോലെ, നമ്മുടെ ചെറിയ R സുഹൃത്തുക്കൾ [`Allison Horst`](https://github.com/allisonhorst/stats-illustrations) നിങ്ങളെ ഇത് മനസ്സിലാക്കാൻ സഹായിക്കുന്നു!\n",
|
|
"\n",
|
|
"<p >\n",
|
|
" <img src=\"../../../../../../translated_images/ml/recipes.9ad10d8a4056bf89.webp\"\n",
|
|
" width=\"550\"/>\n",
|
|
" <figcaption>Artwork by @allison_horst</figcaption>\n"
|
|
],
|
|
"metadata": {
|
|
"id": "KEiO0v7kuC9O"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"[`prep()`](https://recipes.tidymodels.org/reference/prep.html): പരിശീലന സെറ്റിൽ നിന്നുള്ള ആവശ്യമായ പാരാമീറ്ററുകൾ കണക്കാക്കുന്നു, പിന്നീട് മറ്റ് ഡാറ്റാ സെറ്റുകളിൽ പ്രയോഗിക്കാവുന്നതാണ്. ഉദാഹരണത്തിന്, ഒരു നൽകിയ പ്രവചന കോളത്തിനായി, ഏത് നിരീക്ഷണം ഇന്റിജർ 0 അല്ലെങ്കിൽ 1 അല്ലെങ്കിൽ 2 എന്നിവയ്ക്ക് നിയോഗിക്കപ്പെടും.\n",
|
|
"\n",
|
|
"[`bake()`](https://recipes.tidymodels.org/reference/bake.html): ഒരു പ്രീപ് ചെയ്ത റെസിപ്പി എടുത്ത് പ്രവർത്തനങ്ങൾ ഏതെങ്കിലും ഡാറ്റാ സെറ്റിൽ പ്രയോഗിക്കുന്നു.\n",
|
|
"\n",
|
|
"അത് പറഞ്ഞ്, നമുക്ക് നമ്മുടെ റെസിപ്പികൾ പ്രീപ് ചെയ്ത് ബേക്ക് ചെയ്യാം, അതിലൂടെ ഉറപ്പാക്കാം മോഡൽ ഫിറ്റ് ചെയ്യുന്നതിന് മുമ്പ് പ്രവചന കോളങ്ങൾ ആദ്യം എൻകോഡ് ചെയ്യപ്പെടും.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "Q1xtzebuuTCP"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Prep the recipe\n",
|
|
"pumpkins_prep <- prep(pumpkins_recipe)\n",
|
|
"\n",
|
|
"# Bake the recipe to extract a preprocessed new_pumpkins data\n",
|
|
"baked_pumpkins <- bake(pumpkins_prep, new_data = NULL)\n",
|
|
"\n",
|
|
"# Print out the baked data set\n",
|
|
"baked_pumpkins %>% \n",
|
|
" slice_head(n = 10)"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "FGBbJbP_uUUn"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"വൂ-ഹൂ!🥳 പ്രോസസ്സ് ചെയ്ത ഡാറ്റ `baked_pumpkins`-ൽ അതിന്റെ എല്ലാ പ്രവചനകാർക്കും എൻകോഡ് ചെയ്തിട്ടുണ്ട്, ഇത് നമ്മുടെ റെസിപ്പി നിർവചിച്ച പ്രീപ്രോസസ്സിംഗ് ഘട്ടങ്ങൾ പ്രതീക്ഷിച്ചതുപോലെ പ്രവർത്തിക്കുമെന്ന് സ്ഥിരീകരിക്കുന്നു. ഇത് വായിക്കാൻ നിങ്ങൾക്ക് കുറച്ച് ബുദ്ധിമുട്ടുണ്ടാക്കും, പക്ഷേ Tidymodels-ക്ക് വളരെ കൂടുതൽ ബോധ്യമായിരിക്കും! ഏതൊരു നിരീക്ഷണം അനുയോജ്യമായ ഒരു പൂർണ്ണസംഖ്യയിലേക്ക് മാപ്പ് ചെയ്തിട്ടുണ്ടെന്ന് കണ്ടെത്താൻ കുറച്ച് സമയം ചെലവഴിക്കൂ.\n",
|
|
"\n",
|
|
"`baked_pumpkins` ഒരു ഡാറ്റാ ഫ്രെയിം ആണെന്നും അതിൽ കണക്കുകൂട്ടലുകൾ നടത്താൻ കഴിയുമെന്നും പറയേണ്ടതാണ്.\n",
|
|
"\n",
|
|
"ഉദാഹരണത്തിന്, നിങ്ങളുടെ ഡാറ്റയിലെ രണ്ട് പോയിന്റുകൾക്കിടയിൽ നല്ലൊരു സഹസംബന്ധം കണ്ടെത്താൻ ശ്രമിക്കാം, ഇത് നല്ലൊരു പ്രവചന മോഡൽ നിർമ്മിക്കാൻ സഹായിക്കാം. ഇതിന് `cor()` ഫംഗ്ഷൻ ഉപയോഗിക്കും. ഫംഗ്ഷൻ കുറിച്ച് കൂടുതൽ അറിയാൻ `?cor()` ടൈപ്പ് ചെയ്യുക.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "1dvP0LBUueAW"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Find the correlation between the city_name and the price\n",
|
|
"cor(baked_pumpkins$city_name, baked_pumpkins$price)\n",
|
|
"\n",
|
|
"# Find the correlation between the package and the price\n",
|
|
"cor(baked_pumpkins$package, baked_pumpkins$price)\n"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "3bQzXCjFuiSV"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"എന്തായാലും, സിറ്റി ಮತ್ತು വില തമ്മിൽ വളരെ ദുർബലമായ ബന്ധം മാത്രമേ ഉള്ളൂ. എന്നാൽ പാക്കേജ് ಮತ್ತು അതിന്റെ വില തമ്മിൽ കുറച്ച് മെച്ചപ്പെട്ട ബന്ധം കാണാം. അത് യുക്തിയുള്ളതാണ്, അല്ലേ? സാധാരണയായി, ഉൽപ്പന്ന ബോക്സ് വലുതായിരിക്കും, വില കൂടും.\n",
|
|
"\n",
|
|
"നാം ഇതിൽ തന്നെ, `corrplot` പാക്കേജ് ഉപയോഗിച്ച് എല്ലാ കോളങ്ങളുടെയും ബന്ധമാറ്റ്രിക്സ് ദൃശ്യവൽക്കരിക്കാൻ ശ്രമിക്കാം.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "BToPWbgjuoZw"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Load the corrplot package\n",
|
|
"library(corrplot)\n",
|
|
"\n",
|
|
"# Obtain correlation matrix\n",
|
|
"corr_mat <- cor(baked_pumpkins %>% \n",
|
|
" # Drop columns that are not really informative\n",
|
|
" select(-c(low_price, high_price)))\n",
|
|
"\n",
|
|
"# Make a correlation plot between the variables\n",
|
|
"corrplot(corr_mat, method = \"shade\", shade.col = NA, tl.col = \"black\", tl.srt = 45, addCoef.col = \"black\", cl.pos = \"n\", order = \"original\")"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "ZwAL3ksmutVR"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"🤩🤩 വളരെ മെച്ചപ്പെട്ടു.\n",
|
|
"\n",
|
|
"ഇപ്പോൾ ഈ ഡാറ്റയെക്കുറിച്ച് ചോദിക്കേണ്ട നല്ല ചോദ്യം: '`ഒരു നൽകിയ പംപ്കിൻ പാക്കേജിന്റെ വില എത്ര പ്രതീക്ഷിക്കാം?`' നമുക്ക് ഉടൻ തന്നെ തുടങ്ങാം!\n",
|
|
"\n",
|
|
"> Note: നിങ്ങൾ **`bake()`** ചെയ്താൽ തയ്യാറാക്കിയ റെസിപ്പി **`pumpkins_prep`** **`new_data = NULL`** ഉപയോഗിച്ച്, നിങ്ങൾ പ്രോസസ്സ് ചെയ്ത (അഥവാ എൻകോഡ് ചെയ്ത) പരിശീലന ഡാറ്റ എടുക്കും. ഉദാഹരണത്തിന് മറ്റൊരു ഡാറ്റ സെറ്റ് ഉണ്ടെങ്കിൽ, ഒരു ടെസ്റ്റ് സെറ്റ് പോലുള്ളത്, ഒരു റെസിപ്പി അതിനെ എങ്ങനെ പ്രീ-പ്രോസസ് ചെയ്യും എന്ന് കാണാൻ നിങ്ങൾക്ക് **`pumpkins_prep`** **`new_data = test_set`** ഉപയോഗിച്ച് bake ചെയ്യാം.\n",
|
|
"\n",
|
|
"## 4. ഒരു ലീനിയർ റെഗ്രഷൻ മോഡൽ നിർമ്മിക്കുക\n",
|
|
"\n",
|
|
"<p >\n",
|
|
" <img src=\"../../../../../../translated_images/ml/linear-polynomial.5523c7cb6576ccab.webp\"\n",
|
|
" width=\"800\"/>\n",
|
|
" <figcaption>ഡാസാനി മടിപള്ളി ഒരുക്കിയ ഇൻഫോഗ്രാഫിക്</figcaption>\n"
|
|
],
|
|
"metadata": {
|
|
"id": "YqXjLuWavNxW"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"ഇപ്പോൾ നമുക്ക് ഒരു റെസിപ്പി നിർമ്മിച്ച്, ഡാറ്റ ശരിയായി പ്രീ-പ്രോസസ് ചെയ്യപ്പെടുമെന്ന് സ്ഥിരീകരിച്ചതിനുശേഷം, ചോദ്യത്തിന് ഉത്തരം നൽകാൻ ഒരു റെഗ്രഷൻ മോഡൽ നിർമ്മിക്കാം: `ഒരു നൽകിയ പംപ്കിൻ പാക്കേജിന്റെ വില എത്ര പ്രതീക്ഷിക്കാം?`\n",
|
|
"\n",
|
|
"#### ട്രെയിനിംഗ് സെറ്റ് ഉപയോഗിച്ച് ഒരു ലീനിയർ റെഗ്രഷൻ മോഡൽ ട്രെയിൻ ചെയ്യുക\n",
|
|
"\n",
|
|
"നിങ്ങൾക്ക് ഇതിനകം മനസ്സിലായിരിക്കാം, *price* കോളം `outcome` വേരിയബിളാണ്, *package* കോളം `predictor` വേരിയബിളാണ്.\n",
|
|
"\n",
|
|
"ഇത് ചെയ്യാൻ, ആദ്യം ഡാറ്റ 80% ട്രെയിനിംഗിനും 20% ടെസ്റ്റ് സെറ്റിനും വിഭജിച്ച്, പിന്നീട് predictor കോളം ഇന്റിജറുകളുടെ സെറ്റായി എൻകോഡ് ചെയ്യാനുള്ള ഒരു റെസിപ്പി നിർവചിച്ച്, മോഡൽ സ്പെസിഫിക്കേഷൻ നിർമ്മിക്കും. റെസിപ്പി പ്രീപ്പ് ചെയ്ത് ബേക്ക് ചെയ്യില്ല, കാരണം അത് ഡാറ്റ പ്രതീക്ഷിച്ചതുപോലെ പ്രോസസ് ചെയ്യും എന്ന് നമുക്ക് ഇതിനകം അറിയാം.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "Pq0bSzCevW-h"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"set.seed(2056)\n",
|
|
"# Split the data into training and test sets\n",
|
|
"pumpkins_split <- new_pumpkins %>% \n",
|
|
" initial_split(prop = 0.8)\n",
|
|
"\n",
|
|
"\n",
|
|
"# Extract training and test data\n",
|
|
"pumpkins_train <- training(pumpkins_split)\n",
|
|
"pumpkins_test <- testing(pumpkins_split)\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"# Create a recipe for preprocessing the data\n",
|
|
"lm_pumpkins_recipe <- recipe(price ~ package, data = pumpkins_train) %>% \n",
|
|
" step_integer(all_predictors(), zero_based = TRUE)\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"# Create a linear model specification\n",
|
|
"lm_spec <- linear_reg() %>% \n",
|
|
" set_engine(\"lm\") %>% \n",
|
|
" set_mode(\"regression\")"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "CyoEh_wuvcLv"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"നല്ല ജോലി! ഇനി നമുക്ക് ഒരു റെസിപ്പിയും ഒരു മോഡൽ സ്പെസിഫിക്കേഷനും ഉണ്ടാകുമ്പോൾ, അവയെ ഒന്നിച്ച് ബണ്ടിൽ ചെയ്ത് ഒരു ഒബ്ജക്റ്റായി മാറ്റേണ്ടതുണ്ട്, അത് ആദ്യം ഡാറ്റ പ്രീപ്രോസസ് ചെയ്യും (പ്രീപ്+ബേക്ക് പിന്നിൽ), പ്രീപ്രോസസ് ചെയ്ത ഡാറ്റയിൽ മോഡൽ ഫിറ്റ് ചെയ്യും, കൂടാതെ സാധ്യതയുള്ള പോസ്റ്റ്-പ്രോസസ്സിംഗ് പ്രവർത്തനങ്ങൾക്കും അനുവദിക്കും. നിങ്ങളുടെ മനസിന് ഇത്രയും ആശ്വാസമുണ്ടോ!🤩\n",
|
|
"\n",
|
|
"Tidymodels-ൽ, ഈ സൗകര്യപ്രദമായ ഒബ്ജക്റ്റ് [`workflow`](https://workflows.tidymodels.org/) എന്ന് വിളിക്കുന്നു, ഇത് നിങ്ങളുടെ മോഡലിംഗ് ഘടകങ്ങൾ സൗകര്യപ്രദമായി കൈവശം വയ്ക്കുന്നു! Python-ൽ ഇതിനെ *pipelines* എന്ന് വിളിക്കും.\n",
|
|
"\n",
|
|
"അപ്പോൾ നമുക്ക് എല്ലാം workflow-യിലേക്ക് ബണ്ടിൽ ചെയ്യാം!📦\n"
|
|
],
|
|
"metadata": {
|
|
"id": "G3zF_3DqviFJ"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Hold modelling components in a workflow\n",
|
|
"lm_wf <- workflow() %>% \n",
|
|
" add_recipe(lm_pumpkins_recipe) %>% \n",
|
|
" add_model(lm_spec)\n",
|
|
"\n",
|
|
"# Print out the workflow\n",
|
|
"lm_wf"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "T3olroU3v-WX"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"👌 കൂടാതെ, ഒരു വർക്ക്ഫ്ലോ ഒരു മോഡലിനെ പോലെ തന്നെ ഫിറ്റ്/ട്രെയിൻ ചെയ്യാൻ കഴിയും.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "zd1A5tgOwEPX"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Train the model\n",
|
|
"lm_wf_fit <- lm_wf %>% \n",
|
|
" fit(data = pumpkins_train)\n",
|
|
"\n",
|
|
"# Print the model coefficients learned \n",
|
|
"lm_wf_fit"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "NhJagFumwFHf"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"മോഡൽ ഔട്ട്പുട്ടിൽ നിന്ന്, പരിശീലനത്തിനിടെ പഠിച്ച കോഫിഷ്യന്റുകൾ കാണാം. അവ യഥാർത്ഥവും പ്രവചിച്ചവുമായ വ്യത്യാസം ഏറ്റവും കുറവുള്ള മികച്ച ഫിറ്റ് വരിയുടെ കോഫിഷ്യന്റുകളാണ്.\n",
|
|
"\n",
|
|
"#### ടെസ്റ്റ് സെറ്റ് ഉപയോഗിച്ച് മോഡൽ പ്രകടനം വിലയിരുത്തുക\n",
|
|
"\n",
|
|
"മോഡൽ എങ്ങനെ പ്രവർത്തിച്ചു എന്ന് കാണാനുള്ള സമയം 📏! ഇത് എങ്ങനെ ചെയ്യാം?\n",
|
|
"\n",
|
|
"ഇപ്പോൾ മോഡൽ പരിശീലിപ്പിച്ചതിനാൽ, `parsnip::predict()` ഉപയോഗിച്ച് test_set നുള്ള പ്രവചനങ്ങൾ നടത്താം. പിന്നീട് ഈ പ്രവചനങ്ങളെ യഥാർത്ഥ ലേബൽ മൂല്യങ്ങളുമായി താരതമ്യം ചെയ്ത് മോഡൽ എത്രത്തോളം (അല്ലെങ്കിൽ എത്രത്തോളം അല്ല!) പ്രവർത്തിക്കുന്നുവെന്ന് വിലയിരുത്താം.\n",
|
|
"\n",
|
|
"ആദ്യം ടെസ്റ്റ് സെറ്റിനുള്ള പ്രവചനങ്ങൾ നടത്താം, പിന്നീട് ആ കോളങ്ങൾ ടെസ്റ്റ് സെറ്റിനോട് ചേർക്കാം.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "_4QkGtBTwItF"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Make predictions for the test set\n",
|
|
"predictions <- lm_wf_fit %>% \n",
|
|
" predict(new_data = pumpkins_test)\n",
|
|
"\n",
|
|
"\n",
|
|
"# Bind predictions to the test set\n",
|
|
"lm_results <- pumpkins_test %>% \n",
|
|
" select(c(package, price)) %>% \n",
|
|
" bind_cols(predictions)\n",
|
|
"\n",
|
|
"\n",
|
|
"# Print the first ten rows of the tibble\n",
|
|
"lm_results %>% \n",
|
|
" slice_head(n = 10)"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "UFZzTG0gwTs9"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"അതെ, നിങ്ങൾ ഒരു മോഡൽ പരിശീലിപ്പിച്ച് അത് പ്രവചനങ്ങൾ നടത്താൻ ഉപയോഗിച്ചു!🔮 അത് എത്രത്തോളം നല്ലതാണെന്ന് നോക്കാം, മോഡലിന്റെ പ്രകടനം വിലയിരുത്താം!\n",
|
|
"\n",
|
|
"Tidymodels-ൽ, ഇത് `yardstick::metrics()` ഉപയോഗിച്ച് ചെയ്യാം! ലീനിയർ റെഗ്രഷനിനായി, താഴെപ്പറയുന്ന മെട്രിക്ക്സുകളിൽ ശ്രദ്ധ കേന്ദ്രീകരിക്കാം:\n",
|
|
"\n",
|
|
"- `Root Mean Square Error (RMSE)`: [MSE](https://en.wikipedia.org/wiki/Mean_squared_error)യുടെ ചതുരശ്രമൂല്യം. ഇത് ലേബലിന്റെ (ഈ കേസിൽ, പംപ്കിന്റെ വില) സമാന യൂണിറ്റിലുള്ള ഒരു ആബ്സല്യൂട്ട് മെട്രിക് നൽകുന്നു. മൂല്യം ചെറുതായിരിക്കും, മോഡൽ നല്ലതാണെന്ന് സൂചിപ്പിക്കുന്നു (സാധാരണ അർത്ഥത്തിൽ, പ്രവചനങ്ങൾ എത്രത്തോളം ശരിയല്ല എന്ന ശരാശരി വില പ്രതിനിധീകരിക്കുന്നു!)\n",
|
|
"\n",
|
|
"- `Coefficient of Determination (സാധാരണയായി R-squared അല്ലെങ്കിൽ R2 എന്നറിയപ്പെടുന്നു)`: ഒരു സാപേക്ഷ മെട്രിക്, മൂല്യം ഉയർന്നതായിരിക്കും, മോഡലിന്റെ ഫിറ്റ് നല്ലതാണെന്ന് സൂചിപ്പിക്കുന്നു. അടിസ്ഥാനത്തിൽ, ഈ മെട്രിക് പ്രവചിച്ച മൂല്യങ്ങളും യഥാർത്ഥ ലേബൽ മൂല്യങ്ങളും തമ്മിലുള്ള വ്യത്യാസത്തിന്റെ എത്ര ഭാഗം മോഡൽ വിശദീകരിക്കാൻ കഴിയുന്നുവെന്ന് പ്രതിനിധീകരിക്കുന്നു.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "0A5MjzM7wW9M"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Evaluate performance of linear regression\n",
|
|
"metrics(data = lm_results,\n",
|
|
" truth = price,\n",
|
|
" estimate = .pred)"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "reJ0UIhQwcEH"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"മോഡൽ പ്രകടനം കാണാം. പാക്കേജ്, വില എന്നിവയുടെ സ്കാറ്റർ പ്ലോട്ട് ദൃശ്യവൽക്കരിച്ച്, മോഡലിന്റെ പ്രവചനങ്ങൾ ഉപയോഗിച്ച് മികച്ച അനുയോജ്യമായ രേഖ ഒതുക്കാമോ എന്ന് നോക്കാം.\n",
|
|
"\n",
|
|
"ഇതിന്, പാക്കേജ് കോളം എൻകോഡ് ചെയ്യുന്നതിനായി ടെസ്റ്റ് സെറ്റ് പ്രിപെയർ ചെയ്ത് ബേക്ക് ചെയ്യേണ്ടതുണ്ട്, തുടർന്ന് ഇത് മോഡൽ നടത്തിയ പ്രവചനങ്ങളുമായി ബന്ധിപ്പിക്കണം.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "fdgjzjkBwfWt"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Encode package column\n",
|
|
"package_encode <- lm_pumpkins_recipe %>% \n",
|
|
" prep() %>% \n",
|
|
" bake(new_data = pumpkins_test) %>% \n",
|
|
" select(package)\n",
|
|
"\n",
|
|
"\n",
|
|
"# Bind encoded package column to the results\n",
|
|
"lm_results <- lm_results %>% \n",
|
|
" bind_cols(package_encode %>% \n",
|
|
" rename(package_integer = package)) %>% \n",
|
|
" relocate(package_integer, .after = package)\n",
|
|
"\n",
|
|
"\n",
|
|
"# Print new results data frame\n",
|
|
"lm_results %>% \n",
|
|
" slice_head(n = 5)\n",
|
|
"\n",
|
|
"\n",
|
|
"# Make a scatter plot\n",
|
|
"lm_results %>% \n",
|
|
" ggplot(mapping = aes(x = package_integer, y = price)) +\n",
|
|
" geom_point(size = 1.6) +\n",
|
|
" # Overlay a line of best fit\n",
|
|
" geom_line(aes(y = .pred), color = \"orange\", size = 1.2) +\n",
|
|
" xlab(\"package\")\n",
|
|
" \n"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "R0nw719lwkHE"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"ശ്രേഷ്ഠം! നിങ്ങൾക്ക് കാണാമല്ലോ, ലീനിയർ റെഗ്രഷൻ മോഡൽ പാക്കേജും അതിന്റെ അനുബന്ധ വിലയും തമ്മിലുള്ള ബന്ധം ശരിയായി പൊതുവെ പറയാൻ കഴിയുന്നില്ല.\n",
|
|
"\n",
|
|
"🎃 അഭിനന്ദനങ്ങൾ, നിങ്ങൾ ഇപ്പോൾ ചില തരത്തിലുള്ള മത്തങ്ങകളുടെ വില പ്രവചിക്കാൻ സഹായിക്കുന്ന ഒരു മോഡൽ സൃഷ്ടിച്ചു. നിങ്ങളുടെ അവധിക്കാല മത്തങ്ങ തോട്ടം മനോഹരമായിരിക്കും. പക്ഷേ നിങ്ങൾക്ക് കൂടുതൽ നല്ല മോഡൽ സൃഷ്ടിക്കാൻ കഴിയും!\n",
|
|
"\n",
|
|
"## 5. ബഹുപദ റെഗ്രഷൻ മോഡൽ നിർമ്മിക്കുക\n",
|
|
"\n",
|
|
"<p >\n",
|
|
" <img src=\"../../../../../../translated_images/ml/linear-polynomial.5523c7cb6576ccab.webp\"\n",
|
|
" width=\"800\"/>\n",
|
|
" <figcaption>ഡസാനി മടിപള്ളി ഒരുക്കിയ ഇൻഫോഗ്രാഫിക്</figcaption>\n",
|
|
"\n",
|
|
"\n",
|
|
"<!--{width=\"800\"}-->\n"
|
|
],
|
|
"metadata": {
|
|
"id": "HOCqJXLTwtWI"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"കഴിഞ്ഞപ്പോൾ നമ്മുടെ ഡാറ്റയ്ക്ക് ഒരു ലീനിയർ ബന്ധം ഇല്ലാതിരിക്കാം, പക്ഷേ നാം ഫലം പ്രവചിക്കാൻ ആഗ്രഹിക്കുന്നു. പോളിനോമിയൽ റെഗ്രഷൻ കൂടുതൽ സങ്കീർണ്ണമായ നോൺ-ലീനിയർ ബന്ധങ്ങൾക്കായി പ്രവചനങ്ങൾ നടത്താൻ സഹായിക്കും.\n",
|
|
"\n",
|
|
"ഉദാഹരണത്തിന്, നമ്മുടെ പംപ്കിൻ ഡാറ്റാ സെറ്റിലെ പാക്കേജ് ಮತ್ತು വില തമ്മിലുള്ള ബന്ധം എടുത്തു നോക്കാം. ചിലപ്പോൾ വേരിയബിളുകൾക്കിടയിൽ ലീനിയർ ബന്ധം ഉണ്ടാകാം - വോളിയത്തിൽ വലിയ പംപ്കിൻ, വില കൂടുതലായിരിക്കും - എന്നാൽ ചിലപ്പോൾ ഈ ബന്ധങ്ങൾ ഒരു പ്ലെയിൻ അല്ലെങ്കിൽ നേരിയ രേഖയായി ചിത്രീകരിക്കാൻ കഴിയില്ല.\n",
|
|
"\n",
|
|
"> ✅ ഇവിടെ [കൂടുതൽ ഉദാഹരണങ്ങൾ](https://online.stat.psu.edu/stat501/lesson/9/9.8) ഉണ്ട് പോളിനോമിയൽ റെഗ്രഷൻ ഉപയോഗിക്കാവുന്ന ഡാറ്റയുടെ\n",
|
|
">\n",
|
|
"> Variety to Price എന്ന മുൻപത്തെ പ്ലോട്ടിലെ ബന്ധം വീണ്ടും നോക്കൂ. ഈ സ്കാറ്റർപ്ലോട്ട് നിർബന്ധമായും ഒരു നേരിയ രേഖയാൽ വിശകലനം ചെയ്യേണ്ടതുണ്ടോ? എങ്കിൽ അല്ല. ഈ സാഹചര്യത്തിൽ, നിങ്ങൾ പോളിനോമിയൽ റെഗ്രഷൻ പരീക്ഷിക്കാം.\n",
|
|
">\n",
|
|
"> ✅ പോളിനോമിയലുകൾ ഒരു അല്ലെങ്കിൽ കൂടുതൽ വേരിയബിളുകളും കോഫിഷ്യന്റുകളും അടങ്ങിയ ഗണിതപരമായ പ്രകടനങ്ങളാണ്\n",
|
|
"\n",
|
|
"#### ട്രെയിനിംഗ് സെറ്റ് ഉപയോഗിച്ച് പോളിനോമിയൽ റെഗ്രഷൻ മോഡൽ പരിശീലിപ്പിക്കുക\n",
|
|
"\n",
|
|
"പോളിനോമിയൽ റെഗ്രഷൻ നോൺലീനിയർ ഡാറ്റയ്ക്ക് മികച്ച അനുയോജ്യത നൽകാൻ *വക്രരേഖ* സൃഷ്ടിക്കുന്നു.\n",
|
|
"\n",
|
|
"ഒരു പോളിനോമിയൽ മോഡൽ പ്രവചനങ്ങളിൽ മെച്ചമുണ്ടാക്കുമോ എന്ന് നോക്കാം. നാം മുമ്പ് ചെയ്തതുപോലെ സമാനമായ ഒരു പ്രക്രിയ പിന്തുടരാം:\n",
|
|
"\n",
|
|
"- നമ്മുടെ ഡാറ്റ മോഡലിംഗിന് തയ്യാറാക്കാൻ ചെയ്യേണ്ട പ്രീപ്രോസസ്സിംഗ് ഘട്ടങ്ങൾ നിർദ്ദേശിക്കുന്ന ഒരു റെസിപ്പി സൃഷ്ടിക്കുക, ഉദാ: പ്രവചനങ്ങൾ എൻകോഡ് ചെയ്യൽ, ഡിഗ്രി *n* ഉള്ള പോളിനോമിയലുകൾ കണക്കാക്കൽ\n",
|
|
"\n",
|
|
"- ഒരു മോഡൽ സ്പെസിഫിക്കേഷൻ നിർമ്മിക്കുക\n",
|
|
"\n",
|
|
"- റെസിപ്പിയും മോഡൽ സ്പെസിഫിക്കേഷനും ഒരു വർക്ക്ഫ്ലോയിൽ പാക്കുചെയ്യുക\n",
|
|
"\n",
|
|
"- വർക്ക്ഫ്ലോ ഫിറ്റ് ചെയ്ത് മോഡൽ സൃഷ്ടിക്കുക\n",
|
|
"\n",
|
|
"- ടെസ്റ്റ് ഡാറ്റയിൽ മോഡലിന്റെ പ്രകടനം വിലയിരുത്തുക\n",
|
|
"\n",
|
|
"നമുക്ക് ഉടൻ തുടങ്ങാം!\n"
|
|
],
|
|
"metadata": {
|
|
"id": "VcEIpRV9wzYr"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Specify a recipe\r\n",
|
|
"poly_pumpkins_recipe <-\r\n",
|
|
" recipe(price ~ package, data = pumpkins_train) %>%\r\n",
|
|
" step_integer(all_predictors(), zero_based = TRUE) %>% \r\n",
|
|
" step_poly(all_predictors(), degree = 4)\r\n",
|
|
"\r\n",
|
|
"\r\n",
|
|
"# Create a model specification\r\n",
|
|
"poly_spec <- linear_reg() %>% \r\n",
|
|
" set_engine(\"lm\") %>% \r\n",
|
|
" set_mode(\"regression\")\r\n",
|
|
"\r\n",
|
|
"\r\n",
|
|
"# Bundle recipe and model spec into a workflow\r\n",
|
|
"poly_wf <- workflow() %>% \r\n",
|
|
" add_recipe(poly_pumpkins_recipe) %>% \r\n",
|
|
" add_model(poly_spec)\r\n",
|
|
"\r\n",
|
|
"\r\n",
|
|
"# Create a model\r\n",
|
|
"poly_wf_fit <- poly_wf %>% \r\n",
|
|
" fit(data = pumpkins_train)\r\n",
|
|
"\r\n",
|
|
"\r\n",
|
|
"# Print learned model coefficients\r\n",
|
|
"poly_wf_fit\r\n",
|
|
"\r\n",
|
|
" "
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "63n_YyRXw3CC"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"#### മോഡൽ പ്രകടനം വിലയിരുത്തുക\n",
|
|
"\n",
|
|
"👏👏നിങ്ങൾ ഒരു പോളിനോമിയൽ മോഡൽ നിർമ്മിച്ചു, ടെസ്റ്റ് സെറ്റിൽ പ്രവചനങ്ങൾ നടത്താം!\n"
|
|
],
|
|
"metadata": {
|
|
"id": "-LHZtztSxDP0"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Make price predictions on test data\r\n",
|
|
"poly_results <- poly_wf_fit %>% predict(new_data = pumpkins_test) %>% \r\n",
|
|
" bind_cols(pumpkins_test %>% select(c(package, price))) %>% \r\n",
|
|
" relocate(.pred, .after = last_col())\r\n",
|
|
"\r\n",
|
|
"\r\n",
|
|
"# Print the results\r\n",
|
|
"poly_results %>% \r\n",
|
|
" slice_head(n = 10)"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "YUFpQ_dKxJGx"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"വൂ-ഹൂ, മോഡൽ ടെസ്റ്റ്_സെറ്റിൽ എങ്ങനെ പ്രവർത്തിച്ചു എന്ന് `yardstick::metrics()` ഉപയോഗിച്ച് വിലയിരുത്താം.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "qxdyj86bxNGZ"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"metrics(data = poly_results, truth = price, estimate = .pred)"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "8AW5ltkBxXDm"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"🤩🤩 വളരെ മെച്ചപ്പെട്ട പ്രകടനം.\n",
|
|
"\n",
|
|
"`rmse` ഏകദേശം 7-ൽ നിന്ന് ഏകദേശം 3-ലേക്ക് കുറയുകയും, യഥാർത്ഥ വിലയും പ്രവചിച്ച വിലയും തമ്മിലുള്ള പിശക് കുറവാണെന്ന് സൂചിപ്പിക്കുകയും ചെയ്യുന്നു. ശരാശരിയിൽ, തെറ്റായ പ്രവചനങ്ങൾ ഏകദേശം \\$3-ൽ തെറ്റാണെന്ന് നിങ്ങൾ *അല്പം* വ്യാഖ്യാനിക്കാം. `rsq` ഏകദേശം 0.4-ൽ നിന്ന് 0.8-ലേക്ക് വർദ്ധിച്ചു.\n",
|
|
"\n",
|
|
"ഈ എല്ലാ മെട്രിക്കുകളും പോളിനോമിയൽ മോഡൽ ലീനിയർ മോഡലിനെക്കാൾ വളരെ മെച്ചമായി പ്രവർത്തിക്കുന്നതായി സൂചിപ്പിക്കുന്നു. നല്ല ജോലി!\n",
|
|
"\n",
|
|
"ഇപ്പോൾ നമുക്ക് ഇത് ദൃശ്യവൽക്കരിക്കാൻ കഴിയുമോ എന്ന് നോക്കാം!\n"
|
|
],
|
|
"metadata": {
|
|
"id": "6gLHNZDwxYaS"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Bind encoded package column to the results\r\n",
|
|
"poly_results <- poly_results %>% \r\n",
|
|
" bind_cols(package_encode %>% \r\n",
|
|
" rename(package_integer = package)) %>% \r\n",
|
|
" relocate(package_integer, .after = package)\r\n",
|
|
"\r\n",
|
|
"\r\n",
|
|
"# Print new results data frame\r\n",
|
|
"poly_results %>% \r\n",
|
|
" slice_head(n = 5)\r\n",
|
|
"\r\n",
|
|
"\r\n",
|
|
"# Make a scatter plot\r\n",
|
|
"poly_results %>% \r\n",
|
|
" ggplot(mapping = aes(x = package_integer, y = price)) +\r\n",
|
|
" geom_point(size = 1.6) +\r\n",
|
|
" # Overlay a line of best fit\r\n",
|
|
" geom_line(aes(y = .pred), color = \"midnightblue\", size = 1.2) +\r\n",
|
|
" xlab(\"package\")\r\n"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "A83U16frxdF1"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"നിങ്ങളുടെ ഡാറ്റയ്ക്ക് കൂടുതൽ അനുയോജ്യമായ ഒരു വളവുള്ള രേഖ നിങ്ങൾക്ക് കാണാം! 🤩\n",
|
|
"\n",
|
|
"`geom_smooth`-ലേക്ക് പോളിനോമിയൽ ഫോർമുല പാസ്സ് ചെയ്ത് ഇത് കൂടുതൽ മൃദുവാക്കാം, ഇങ്ങനെ:\n"
|
|
],
|
|
"metadata": {
|
|
"id": "4U-7aHOVxlGU"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Make a scatter plot\r\n",
|
|
"poly_results %>% \r\n",
|
|
" ggplot(mapping = aes(x = package_integer, y = price)) +\r\n",
|
|
" geom_point(size = 1.6) +\r\n",
|
|
" # Overlay a line of best fit\r\n",
|
|
" geom_smooth(method = lm, formula = y ~ poly(x, degree = 4), color = \"midnightblue\", size = 1.2, se = FALSE) +\r\n",
|
|
" xlab(\"package\")"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "5vzNT0Uexm-w"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"ഒരു മൃദുവായ വളവുപോലെ!🤩\n",
|
|
"\n",
|
|
"പുതിയ പ്രവചനമൊരുക്കുന്നത് ഇങ്ങനെ ആയിരിക്കും:\n"
|
|
],
|
|
"metadata": {
|
|
"id": "v9u-wwyLxq4G"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Make a hypothetical data frame\r\n",
|
|
"hypo_tibble <- tibble(package = \"bushel baskets\")\r\n",
|
|
"\r\n",
|
|
"# Make predictions using linear model\r\n",
|
|
"lm_pred <- lm_wf_fit %>% predict(new_data = hypo_tibble)\r\n",
|
|
"\r\n",
|
|
"# Make predictions using polynomial model\r\n",
|
|
"poly_pred <- poly_wf_fit %>% predict(new_data = hypo_tibble)\r\n",
|
|
"\r\n",
|
|
"# Return predictions in a list\r\n",
|
|
"list(\"linear model prediction\" = lm_pred, \r\n",
|
|
" \"polynomial model prediction\" = poly_pred)\r\n"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "jRPSyfQGxuQv"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"`polynomial model` പ്രവചനത്തിന് അർത്ഥമുണ്ട്, `price` ഉം `package` ഉം ഉള്ള സ്കാറ്റർ പ്ലോട്ടുകൾ കാണുമ്പോൾ! കൂടാതെ, ഇത് മുമ്പത്തെ മോഡലിനേക്കാൾ മികച്ച മോഡലാണെങ്കിൽ, അതേ ഡാറ്റ നോക്കുമ്പോൾ, നിങ്ങൾക്ക് ഈ കൂടുതൽ വിലയുള്ള പംപ്കിനുകൾക്കായി ബജറ്റ് തയ്യാറാക്കേണ്ടതുണ്ട്!\n",
|
|
"\n",
|
|
"🏆 നന്നായി ചെയ്തു! നിങ്ങൾ ഒരു പാഠത്തിൽ രണ്ട് റെഗ്രഷൻ മോഡലുകൾ സൃഷ്ടിച്ചു. റെഗ്രഷൻ സംബന്ധിച്ച അവസാന ഭാഗത്തിൽ, നിങ്ങൾ വിഭാഗങ്ങൾ നിർണ്ണയിക്കാൻ ലൊജിസ്റ്റിക് റെഗ്രഷൻ പഠിക്കും.\n",
|
|
"\n",
|
|
"## **🚀ചലഞ്ച്**\n",
|
|
"\n",
|
|
"ഈ നോട്ട്ബുക്കിൽ വിവിധ വേരിയബിളുകൾ പരീക്ഷിച്ച് കോറലേഷൻ മോഡൽ കൃത്യതയുമായി എങ്ങനെ ബന്ധപ്പെട്ടിരിക്കുന്നു എന്ന് പരിശോധിക്കുക.\n",
|
|
"\n",
|
|
"## [**പാഠാനന്തര ക്വിസ്**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/14/)\n",
|
|
"\n",
|
|
"## **പരിശോധന & സ്വയം പഠനം**\n",
|
|
"\n",
|
|
"ഈ പാഠത്തിൽ നാം ലീനിയർ റെഗ്രഷൻ പഠിച്ചു. മറ്റ് പ്രധാനപ്പെട്ട റെഗ്രഷൻ തരംകളും ഉണ്ട്. സ്റ്റെപ്വൈസ്, റിഡ്ജ്, ലാസ്സോ, എലാസ്റ്റിക്നെറ്റ് സാങ്കേതികതകൾക്കുറിച്ച് വായിക്കുക. കൂടുതൽ പഠിക്കാൻ നല്ല കോഴ്സ് [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) ആണ്.\n",
|
|
"\n",
|
|
"അദ്ഭുതകരമായ Tidymodels ഫ്രെയിംവർക്ക് ഉപയോഗിക്കുന്നത് എങ്ങനെ എന്നത് കൂടുതൽ അറിയാൻ, താഴെ കൊടുത്തിരിക്കുന്ന സ്രോതസുകൾ പരിശോധിക്കുക:\n",
|
|
"\n",
|
|
"- Tidymodels വെബ്സൈറ്റ്: [Get started with Tidymodels](https://www.tidymodels.org/start/)\n",
|
|
"\n",
|
|
"- Max Kuhn and Julia Silge, [*Tidy Modeling with R*](https://www.tmwr.org/)*.*\n",
|
|
"\n",
|
|
"###### **നന്ദി:**\n",
|
|
"\n",
|
|
"[Allison Horst](https://twitter.com/allison_horst?lang=en) R-നെ കൂടുതൽ സ്വാഗതം ചെയ്യുന്നതും ആകർഷകവുമാക്കുന്ന അത്ഭുതകരമായ ചിത്രങ്ങൾ സൃഷ്ടിച്ചതിന്. കൂടുതൽ ചിത്രങ്ങൾ അവളുടെ [ഗാലറി](https://www.google.com/url?q=https://github.com/allisonhorst/stats-illustrations&sa=D&source=editors&ust=1626380772530000&usg=AOvVaw3zcfyCizFQZpkSLzxiiQEM)യിൽ കാണാം.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "8zOLOWqMxzk5"
|
|
}
|
|
},
|
|
{
|
|
"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"
|
|
]
|
|
}
|
|
]
|
|
} |