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

448 lines
28 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-08-29T19:02:31+00:00",
"source_file": "2-Regression/1-Tools/solution/R/lesson_1-R.ipynb",
"language_code": "pa"
}
},
"cells": [
{
"cell_type": "markdown",
"source": [],
"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=\"../../images/encouRage.jpg\"\n",
" width=\"630\"/>\n",
" <figcaption>ਕਲਾ ਰਚਨਾ @allison_horst ਦੁਆਰਾ</figcaption>\n",
"\n",
"<!--![ਕਲਾ ਰਚਨਾ \\@allison_horst](../../../../../../translated_images/encouRage.e75d5fe0367fb9136b78104baf4e2032a7622bc42a2bc34c0ad36c294eeb83f5.pa.jpg)<br>ਕਲਾ ਰਚਨਾ @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",
"||- ਬੀਐਮਆਈ ਬਾਡੀ ਮਾਸ ਇੰਡੈਕਸ\n",
"||- ਬੀਪੀ ਔਸਤ ਬਲੱਡ ਪ੍ਰੈਸ਼ਰ\n",
"||- s1 tc, ਕੁੱਲ ਸੀਰਮ ਕੋਲੇਸਟਰੋਲ\n",
"||- s2 ldl, ਲੋ-ਡੈਂਸਿਟੀ ਲਿਪੋਪ੍ਰੋਟੀਨ\n",
"||- s3 hdl, ਹਾਈ-ਡੈਂਸਿਟੀ ਲਿਪੋਪ੍ਰੋਟੀਨ\n",
"||- s4 tch, ਕੁੱਲ ਕੋਲੇਸਟਰੋਲ / HDL\n",
"||- s5 ltg, ਸ਼ਾਇਦ ਸੀਰਮ ਟ੍ਰਾਈਗਲਿਸਰਾਈਡਜ਼ ਲੈਵਲ ਦਾ ਲੌਗ\n",
"||- s6 glu, ਖੂਨ ਵਿੱਚ ਸ਼ੂਗਰ ਦੀ ਮਾਤਰਾ|\n",
"\n",
"> 🎓 ਯਾਦ ਰੱਖੋ, ਇਹ ਸੁਪਰਵਾਈਜ਼ਡ ਲਰਨਿੰਗ ਹੈ, ਅਤੇ ਸਾਨੂੰ ਇੱਕ ਨਾਮਿਤ 'y' ਟਾਰਗੇਟ ਦੀ ਲੋੜ ਹੈ।\n",
"\n",
"ਤੁਹਾਨੂੰ R ਨਾਲ ਡਾਟਾ ਮੈਨਿਪੁਲੇਟ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ, 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",
"> `glimpse()` ਅਤੇ `slice()` [`dplyr`](https://dplyr.tidyverse.org/) ਦੇ ਫੰਕਸ਼ਨ ਹਨ। Dplyr, ਜੋ Tidyverse ਦਾ ਹਿੱਸਾ ਹੈ, ਡਾਟਾ ਮੈਨਿਪੂਲੇਸ਼ਨ ਦੀ ਇੱਕ ਗ੍ਰੈਮਰ ਹੈ ਜੋ ਇੱਕ ਸਥਿਰ ਸੈੱਟ ਦੇ ਕਿਰਿਆਵਾਂ (verbs) ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ, ਜੋ ਤੁਹਾਨੂੰ ਆਮ ਡਾਟਾ ਮੈਨਿਪੂਲੇਸ਼ਨ ਦੀਆਂ ਸਮੱਸਿਆਵਾਂ ਹੱਲ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ।\n",
"\n",
"<br>\n",
"\n",
"ਹੁਣ ਜਦੋਂ ਸਾਡੇ ਕੋਲ ਡਾਟਾ ਹੈ, ਆਓ ਇਸ ਅਭਿਆਸ ਲਈ ਇੱਕ ਫੀਚਰ (`bmi`) ਨੂੰ ਟਾਰਗਟ ਕਰਨ ਲਈ narrowed down ਕਰੀਏ। ਇਸ ਲਈ ਸਾਨੂੰ ਚਾਹੀਦੇ ਕਾਲਮਾਂ ਨੂੰ ਚੁਣਨ ਦੀ ਲੋੜ ਹੋਵੇਗੀ। ਤਾਂ, ਅਸੀਂ ਇਹ ਕਿਵੇਂ ਕਰ ਸਕਦੇ ਹਾਂ?\n",
"\n",
"[`dplyr::select()`](https://dplyr.tidyverse.org/reference/select.html) ਸਾਨੂੰ ਡਾਟਾ ਫਰੇਮ ਵਿੱਚ ਕਾਲਮਾਂ ਨੂੰ *ਚੁਣਨ* (ਅਤੇ ਵਿਕਲਪਕ ਤੌਰ 'ਤੇ ਨਾਂਮ ਬਦਲਣ) ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।\n"
],
"metadata": {
"id": "UwjVT1Hz-c3Z"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Select predictor feature `bmi` and outcome `y`\r\n",
"diabetes_select <- diabetes %>% \r\n",
" select(c(bmi, y))\r\n",
"\r\n",
"# Print the first 5 rows\r\n",
"diabetes_select %>% \r\n",
" slice(1:10)"
],
"outputs": [],
"metadata": {
"id": "RDY1oAKI-m80"
}
},
{
"cell_type": "markdown",
"source": [
"## 3. ਟ੍ਰੇਨਿੰਗ ਅਤੇ ਟੈਸਟਿੰਗ ਡਾਟਾ\n",
"\n",
"ਸੁਪਰਵਾਈਜ਼ਡ ਲਰਨਿੰਗ ਵਿੱਚ ਆਮ ਤੌਰ 'ਤੇ ਡਾਟਾ ਨੂੰ ਦੋ ਹਿੱਸਿਆਂ ਵਿੱਚ ਵੰਡਣਾ ਹੁੰਦਾ ਹੈ; ਇੱਕ (ਅਕਸਰ ਵੱਡਾ) ਸੈੱਟ ਜਿਸ ਨਾਲ ਮਾਡਲ ਨੂੰ ਟ੍ਰੇਨ ਕੀਤਾ ਜਾਵੇ, ਅਤੇ ਇੱਕ ਛੋਟਾ \"ਹੋਲਡ-ਬੈਕ\" ਸੈੱਟ ਜਿਸ ਨਾਲ ਦੇਖਿਆ ਜਾਵੇ ਕਿ ਮਾਡਲ ਕਿਵੇਂ ਕੰਮ ਕਰਦਾ ਹੈ।\n",
"\n",
"ਹੁਣ ਜਦੋਂ ਸਾਡੇ ਕੋਲ ਡਾਟਾ ਤਿਆਰ ਹੈ, ਅਸੀਂ ਦੇਖ ਸਕਦੇ ਹਾਂ ਕਿ ਕੀ ਮਸ਼ੀਨ ਇਸ ਡਾਟਾਸੈੱਟ ਵਿੱਚ ਨੰਬਰਾਂ ਦੇ ਵਿਚਕਾਰ ਤਰਕਸੰਗਤ ਵੰਡ ਦਾ ਨਿਰਧਾਰਨ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰ ਸਕਦੀ ਹੈ। ਅਸੀਂ [rsample](https://tidymodels.github.io/rsample/) ਪੈਕੇਜ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹਾਂ, ਜੋ ਕਿ Tidymodels ਫਰੇਮਵਰਕ ਦਾ ਹਿੱਸਾ ਹੈ, ਇੱਕ ਆਬਜੈਕਟ ਬਣਾਉਣ ਲਈ ਜੋ ਡਾਟਾ ਨੂੰ ਵੰਡਣ ਦੇ ਤਰੀਕੇ ਦੀ ਜਾਣਕਾਰੀ ਰੱਖਦਾ ਹੈ, ਅਤੇ ਫਿਰ ਦੋ ਹੋਰ rsample ਫੰਕਸ਼ਨ ਬਣਾਈ ਗਈ ਟ੍ਰੇਨਿੰਗ ਅਤੇ ਟੈਸਟਿੰਗ ਸੈੱਟਾਂ ਨੂੰ ਕੱਢਣ ਲਈ:\n"
],
"metadata": {
"id": "SDk668xK-tc3"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"set.seed(2056)\r\n",
"# Split 67% of the data for training and the rest for tesing\r\n",
"diabetes_split <- diabetes_select %>% \r\n",
" initial_split(prop = 0.67)\r\n",
"\r\n",
"# Extract the resulting train and test sets\r\n",
"diabetes_train <- training(diabetes_split)\r\n",
"diabetes_test <- testing(diabetes_split)\r\n",
"\r\n",
"# Print the first 3 rows of the training set\r\n",
"diabetes_train %>% \r\n",
" slice(1:10)"
],
"outputs": [],
"metadata": {
"id": "EqtHx129-1h-"
}
},
{
"cell_type": "markdown",
"source": [
"## 4. 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": [
"ਇੱਕ ਮਾਡਲ ਨੂੰ *ਨਿਰਧਾਰਿਤ* ਕਰਨ ਤੋਂ ਬਾਅਦ, ਮਾਡਲ ਨੂੰ [`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": [
"ਮਾਡਲ ਦੇ ਆਉਟਪੁੱਟ ਤੋਂ, ਅਸੀਂ ਤਰਬੀਅਤ ਦੌਰਾਨ ਸਿੱਖੇ ਗਏ ਗੁਣਾਂ ਨੂੰ ਦੇਖ ਸਕਦੇ ਹਾਂ। ਇਹ ਗੁਣ ਉਸ ਲਾਈਨ ਦੀ ਨੁਮਾਇੰਦਗੀ ਕਰਦੇ ਹਨ ਜੋ ਸਾਨੂੰ ਅਸਲ ਅਤੇ ਅਨੁਮਾਨਿਤ ਵੈਰੀਏਬਲ ਦੇ ਵਿਚਕਾਰ ਸਭ ਤੋਂ ਘੱਟ ਕੁੱਲ ਗਲਤੀ ਦਿੰਦੀ ਹੈ।\n",
"\n",
"<br>\n",
"\n",
"## 5. ਟੈਸਟ ਸੈੱਟ 'ਤੇ ਅਨੁਮਾਨ ਲਗਾਓ\n",
"\n",
"ਹੁਣ ਜਦੋਂ ਅਸੀਂ ਇੱਕ ਮਾਡਲ ਤਿਆਰ ਕਰ ਲਿਆ ਹੈ, ਅਸੀਂ ਇਸਦਾ ਇਸਤੇਮਾਲ ਟੈਸਟ ਡਾਟਾਸੈੱਟ ਲਈ ਬਿਮਾਰੀ ਦੀ ਪ੍ਰਗਤੀ y ਦਾ ਅਨੁਮਾਨ ਲਗਾਉਣ ਲਈ ਕਰ ਸਕਦੇ ਹਾਂ [parsnip::predict()](https://parsnip.tidymodels.org/reference/predict.model_fit.html) ਦੀ ਵਰਤੋਂ ਕਰਕੇ। ਇਹ ਡਾਟਾ ਗਰੁੱਪਾਂ ਦੇ ਵਿਚਕਾਰ ਲਾਈਨ ਖਿੱਚਣ ਲਈ ਵਰਤਿਆ ਜਾਵੇਗਾ।\n"
],
"metadata": {
"id": "kGZ22RQj_Olu"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Make predictions for the test set\r\n",
"predictions <- lm_mod %>% \r\n",
" predict(new_data = diabetes_test)\r\n",
"\r\n",
"# Print out some of the predictions\r\n",
"predictions %>% \r\n",
" slice(1:5)"
],
"outputs": [],
"metadata": {
"id": "nXHbY7M2_aao"
}
},
{
"cell_type": "markdown",
"source": [
"ਵਾਹ ਵਾਹ! 💃🕺 ਅਸੀਂ ਹਾਲ ਹੀ ਵਿੱਚ ਇੱਕ ਮਾਡਲ ਟ੍ਰੇਨ ਕੀਤਾ ਅਤੇ ਇਸਨੂੰ ਪ੍ਰਡਿਕਸ਼ਨ ਕਰਨ ਲਈ ਵਰਤਿਆ!\n",
"\n",
"ਜਦੋਂ ਪ੍ਰਡਿਕਸ਼ਨ ਕੀਤੇ ਜਾਂਦੇ ਹਨ, tidymodels ਦਾ ਰਿਵਾਜ ਹਮੇਸ਼ਾ ਨਤੀਜਿਆਂ ਦਾ ਇੱਕ tibble/data frame ਬਣਾਉਣਾ ਹੁੰਦਾ ਹੈ ਜਿਸ ਵਿੱਚ ਸਟੈਂਡਰਡ ਕਾਲਮ ਨਾਂ ਹੁੰਦੇ ਹਨ। ਇਹ ਮੂਲ ਡਾਟਾ ਅਤੇ ਪ੍ਰਡਿਕਸ਼ਨ ਨੂੰ ਇੱਕ ਵਰਤਣਯੋਗ ਫਾਰਮੈਟ ਵਿੱਚ ਜੋੜਨਾ ਆਸਾਨ ਬਣਾ ਦਿੰਦਾ ਹੈ, ਜੋ ਕਿ ਅਗਲੇ ਕਦਮਾਂ ਜਿਵੇਂ ਕਿ ਪਲਾਟਿੰਗ ਲਈ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਹੈ।\n",
"\n",
"`dplyr::bind_cols()` ਕਈ ਡਾਟਾ ਫਰੇਮਾਂ ਨੂੰ ਕਾਲਮ ਵਜੋਂ ਕੁਸ਼ਲਤਾਪੂਰਵਕ ਜੋੜਦਾ ਹੈ।\n"
],
"metadata": {
"id": "R_JstwUY_bIs"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Combine the predictions and the original test set\r\n",
"results <- diabetes_test %>% \r\n",
" bind_cols(predictions)\r\n",
"\r\n",
"\r\n",
"results %>% \r\n",
" slice(1:5)"
],
"outputs": [],
"metadata": {
"id": "RybsMJR7_iI8"
}
},
{
"cell_type": "markdown",
"source": [
"## 6. ਮਾਡਲਿੰਗ ਨਤੀਜਿਆਂ ਦਾ ਪਲਾਟ ਬਣਾਉਣਾ\n",
"\n",
"ਹੁਣ ਸਮਾਂ ਆ ਗਿਆ ਹੈ ਕਿ ਇਸਨੂੰ ਦ੍ਰਿਸ਼ਟੀਗੋਚਰ ਤੌਰ 'ਤੇ ਵੇਖਿਆ ਜਾਵੇ 📈। ਅਸੀਂ ਟੈਸਟ ਸੈੱਟ ਦੇ ਸਾਰੇ `y` ਅਤੇ `bmi` ਮੁੱਲਾਂ ਦਾ ਇੱਕ ਸਕੈਟਰ ਪਲਾਟ ਬਣਾਵਾਂਗੇ, ਫਿਰ ਅਨੁਮਾਨਾਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਮਾਡਲ ਦੇ ਡਾਟਾ ਗਰੁੱਪਾਂ ਦੇ ਵਿਚਕਾਰ ਸਭ ਤੋਂ ਉਚਿਤ ਸਥਾਨ 'ਤੇ ਇੱਕ ਰੇਖਾ ਖਿੱਚਾਂਗੇ।\n",
"\n",
"R ਵਿੱਚ ਗ੍ਰਾਫ ਬਣਾਉਣ ਲਈ ਕਈ ਪ੍ਰਣਾਲੀਆਂ ਹਨ, ਪਰ `ggplot2` ਸਭ ਤੋਂ ਸੁੰਦਰ ਅਤੇ ਸਭ ਤੋਂ ਬਹੁਪੱਖੀ ਹੈ। ਇਹ ਤੁਹਾਨੂੰ **ਸਵਤੰਤਰ ਤੱਤਾਂ ਨੂੰ ਜੋੜ ਕੇ** ਗ੍ਰਾਫ ਬਣਾਉਣ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।\n"
],
"metadata": {
"id": "XJbYbMZW_n_s"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Set a theme for the plot\r\n",
"theme_set(theme_light())\r\n",
"# Create a scatter plot\r\n",
"results %>% \r\n",
" ggplot(aes(x = bmi)) +\r\n",
" # Add a scatter plot\r\n",
" geom_point(aes(y = y), size = 1.6) +\r\n",
" # Add a line plot\r\n",
" geom_line(aes(y = .pred), color = \"blue\", size = 1.5)"
],
"outputs": [],
"metadata": {
"id": "R9tYp3VW_sTn"
}
},
{
"cell_type": "markdown",
"source": [
"✅ ਸੋਚੋ ਕਿ ਇੱਥੇ ਕੀ ਹੋ ਰਿਹਾ ਹੈ। ਇੱਕ ਸਿੱਧੀ ਰੇਖਾ ਕਈ ਛੋਟੇ ਡਾਟਾ ਬਿੰਦੂਆਂ ਵਿੱਚੋਂ ਲੰਘ ਰਹੀ ਹੈ, ਪਰ ਇਹ ਅਸਲ ਵਿੱਚ ਕੀ ਕਰ ਰਹੀ ਹੈ? ਕੀ ਤੁਸੀਂ ਦੇਖ ਸਕਦੇ ਹੋ ਕਿ ਤੁਸੀਂ ਇਸ ਰੇਖਾ ਨੂੰ ਇਸਤਮਾਲ ਕਰਕੇ ਅਨੁਮਾਨ ਲਗਾ ਸਕਦੇ ਹੋ ਕਿ ਇੱਕ ਨਵਾਂ, ਅਣਦੇਖਿਆ ਡਾਟਾ ਬਿੰਦੂ ਪਲਾਟ ਦੇ y ਅਕਸ ਨਾਲ ਸਬੰਧਿਤ ਕਿੱਥੇ ਫਿੱਟ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ? ਇਸ ਮਾਡਲ ਦੇ ਵਿਆਹਾਰਿਕ ਉਪਯੋਗ ਨੂੰ ਸ਼ਬਦਾਂ ਵਿੱਚ ਵਿਆਖਿਆ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ।\n",
"\n",
"ਵਧਾਈ ਹੋਵੇ, ਤੁਸੀਂ ਆਪਣਾ ਪਹਿਲਾ ਲੀਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਮਾਡਲ ਬਣਾਇਆ, ਇਸ ਨਾਲ ਇੱਕ ਅਨੁਮਾਨ ਬਣਾਇਆ, ਅਤੇ ਇਸਨੂੰ ਇੱਕ ਪਲਾਟ ਵਿੱਚ ਦਰਸਾਇਆ!\n"
],
"metadata": {
"id": "zrPtHIxx_tNI"
}
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**ਅਸਵੀਕਰਤੀ**: \nਇਹ ਦਸਤਾਵੇਜ਼ AI ਅਨੁਵਾਦ ਸੇਵਾ [Co-op Translator](https://github.com/Azure/co-op-translator) ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਅਨੁਵਾਦ ਕੀਤਾ ਗਿਆ ਹੈ। ਜਦੋਂ ਕਿ ਅਸੀਂ ਸਹੀ ਹੋਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦੇ ਹਾਂ, ਕਿਰਪਾ ਕਰਕੇ ਧਿਆਨ ਦਿਓ ਕਿ ਸਵੈਚਾਲਿਤ ਅਨੁਵਾਦਾਂ ਵਿੱਚ ਗਲਤੀਆਂ ਜਾਂ ਅਸੁਚੀਤਤਾਵਾਂ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਮੂਲ ਦਸਤਾਵੇਜ਼ ਨੂੰ ਇਸਦੀ ਮੂਲ ਭਾਸ਼ਾ ਵਿੱਚ ਅਧਿਕਾਰਤ ਸਰੋਤ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਮਹੱਤਵਪੂਰਨ ਜਾਣਕਾਰੀ ਲਈ, ਪੇਸ਼ੇਵਰ ਮਨੁੱਖੀ ਅਨੁਵਾਦ ਦੀ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਸ ਅਨੁਵਾਦ ਦੀ ਵਰਤੋਂ ਤੋਂ ਪੈਦਾ ਹੋਣ ਵਾਲੇ ਕਿਸੇ ਵੀ ਗਲਤ ਫਹਿਮੀ ਜਾਂ ਗਲਤ ਵਿਆਖਿਆ ਲਈ ਅਸੀਂ ਜ਼ਿੰਮੇਵਾਰ ਨਹੀਂ ਹਾਂ।\n"
]
}
]
}