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/4-Classification/1-Introduction/solution/R/lesson_10-R.ipynb

720 lines
43 KiB

{
"nbformat": 4,
"nbformat_minor": 2,
"metadata": {
"colab": {
"name": "lesson_10-R.ipynb",
"provenance": [],
"collapsed_sections": []
},
"kernelspec": {
"name": "ir",
"display_name": "R"
},
"language_info": {
"name": "R"
},
"coopTranslator": {
"original_hash": "2621e24705e8100893c9bf84e0fc8aef",
"translation_date": "2025-08-29T19:37:52+00:00",
"source_file": "4-Classification/1-Introduction/solution/R/lesson_10-R.ipynb",
"language_code": "pa"
}
},
"cells": [
{
"cell_type": "markdown",
"source": [
"# ਇੱਕ ਵਰਗੀਕਰਨ ਮਾਡਲ ਬਣਾਓ: ਸੁਆਦਿਸ਼ਟ ਏਸ਼ੀਆਈ ਅਤੇ ਭਾਰਤੀ ਖਾਣੇ\n"
],
"metadata": {
"id": "ItETB4tSFprR"
}
},
{
"cell_type": "markdown",
"source": [
"## ਕਲਾਸੀਫਿਕੇਸ਼ਨ ਦਾ ਪਰਚੇ: ਡਾਟਾ ਸਾਫ਼ ਕਰੋ, ਤਿਆਰ ਕਰੋ ਅਤੇ ਵਿਜੁਅਲਾਈਜ਼ ਕਰੋ\n",
"\n",
"ਇਨ੍ਹਾਂ ਚਾਰ ਪਾਠਾਂ ਵਿੱਚ, ਤੁਸੀਂ ਕਲਾਸਿਕ ਮਸ਼ੀਨ ਲਰਨਿੰਗ ਦੇ ਇੱਕ ਮੁੱਖ ਧਿਆਨ - *ਕਲਾਸੀਫਿਕੇਸ਼ਨ* - ਦੀ ਖੋਜ ਕਰੋਗੇ। ਅਸੀਂ ਏਸ਼ੀਆ ਅਤੇ ਭਾਰਤ ਦੇ ਸ਼ਾਨਦਾਰ ਖਾਣਿਆਂ ਬਾਰੇ ਇੱਕ ਡਾਟਾਸੈਟ ਨਾਲ ਵੱਖ-ਵੱਖ ਕਲਾਸੀਫਿਕੇਸ਼ਨ ਐਲਗੋਰਿਥਮ ਦੀ ਵਰਤੋਂ ਕਰਨ ਦਾ ਤਰੀਕਾ ਸਿੱਖਾਂਗੇ। ਉਮੀਦ ਹੈ ਕਿ ਤੁਸੀਂ ਭੁੱਖੇ ਹੋ!\n",
"\n",
"<p >\n",
" <img src=\"../../images/pinch.png\"\n",
" width=\"600\"/>\n",
" <figcaption>ਇਨ੍ਹਾਂ ਪਾਠਾਂ ਵਿੱਚ ਪੈਨ-ਏਸ਼ੀਆਈ ਖਾਣਿਆਂ ਦਾ ਜਸ਼ਨ ਮਨਾਓ! ਜੇਨ ਲੂਪਰ ਦੁਆਰਾ ਚਿੱਤਰ</figcaption>\n",
"\n",
"<!--![ਇਨ੍ਹਾਂ ਪਾਠਾਂ ਵਿੱਚ ਪੈਨ-ਏਸ਼ੀਆਈ ਖਾਣਿਆਂ ਦਾ ਜਸ਼ਨ ਮਨਾਓ! ਜੇਨ ਲੂਪਰ ਦੁਆਰਾ ਚਿੱਤਰ](../../../../../../translated_images/pinch.b33c0ba76f284aad94a3c4e3ed83e13ed1e17fbcf4db8ca8583c3a0c135e2e99.pa.png)-->\n",
"\n",
"ਕਲਾਸੀਫਿਕੇਸ਼ਨ [ਸੁਪਰਵਾਈਜ਼ਡ ਲਰਨਿੰਗ](https://wikipedia.org/wiki/Supervised_learning) ਦਾ ਇੱਕ ਰੂਪ ਹੈ ਜੋ ਰਿਗ੍ਰੈਸ਼ਨ ਤਕਨੀਕਾਂ ਨਾਲ ਕਾਫ਼ੀ ਸਮਾਨਤਾ ਰੱਖਦਾ ਹੈ। ਕਲਾਸੀਫਿਕੇਸ਼ਨ ਵਿੱਚ, ਤੁਸੀਂ ਇੱਕ ਮਾਡਲ ਨੂੰ ਸਿਖਾਉਂਦੇ ਹੋ ਕਿ ਕਿਸ `ਸ਼੍ਰੇਣੀ` ਵਿੱਚ ਕੋਈ ਆਈਟਮ ਆਉਂਦਾ ਹੈ। ਜੇ ਮਸ਼ੀਨ ਲਰਨਿੰਗ ਡਾਟਾਸੈਟ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਚੀਜ਼ਾਂ ਦੇ ਮੁੱਲ ਜਾਂ ਨਾਮਾਂ ਦੀ ਪੇਸ਼ਗੂਈ ਕਰਨ ਬਾਰੇ ਹੈ, ਤਾਂ ਕਲਾਸੀਫਿਕੇਸ਼ਨ ਆਮ ਤੌਰ 'ਤੇ ਦੋ ਸਮੂਹਾਂ ਵਿੱਚ ਵੰਡਿਆ ਜਾਂਦਾ ਹੈ: *ਬਾਈਨਰੀ ਕਲਾਸੀਫਿਕੇਸ਼ਨ* ਅਤੇ *ਮਲਟੀਕਲਾਸ ਕਲਾਸੀਫਿਕੇਸ਼ਨ*।\n",
"\n",
"ਯਾਦ ਰੱਖੋ:\n",
"\n",
"- **ਲਿਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ** ਨੇ ਤੁਹਾਨੂੰ ਵੈਰੀਏਬਲਾਂ ਦੇ ਵਿਚਕਾਰ ਸੰਬੰਧਾਂ ਦੀ ਪੇਸ਼ਗੂਈ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕੀਤੀ ਅਤੇ ਇਹ ਪਤਾ ਲਗਾਇਆ ਕਿ ਕੋਈ ਨਵਾਂ ਡਾਟਾਪੌਇੰਟ ਉਸ ਲਾਈਨ ਦੇ ਸੰਬੰਧ ਵਿੱਚ ਕਿੱਥੇ ਆਵੇਗਾ। ਉਦਾਹਰਣ ਲਈ, ਤੁਸੀਂ ਅੰਕਾਂ ਦੀ ਪੇਸ਼ਗੂਈ ਕਰ ਸਕਦੇ ਹੋ ਜਿਵੇਂ ਕਿ *ਸਿਤੰਬਰ ਦੇ ਮੁਕਾਬਲੇ ਦਸੰਬਰ ਵਿੱਚ ਕਦੂ ਦੀ ਕੀਮਤ ਕੀ ਹੋਵੇਗੀ*।\n",
"\n",
"- **ਲੌਜਿਸਟਿਕ ਰਿਗ੍ਰੈਸ਼ਨ** ਨੇ ਤੁਹਾਨੂੰ \"ਬਾਈਨਰੀ ਸ਼੍ਰੇਣੀਆਂ\" ਦੀ ਖੋਜ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕੀਤੀ: ਇਸ ਕੀਮਤ ਦੇ ਬਿੰਦੂ 'ਤੇ, *ਕੀ ਇਹ ਕਦੂ ਸੰਤਰੀ ਹੈ ਜਾਂ ਨਾ-ਸੰਤਰੀ*?\n",
"\n",
"ਕਲਾਸੀਫਿਕੇਸ਼ਨ ਵੱਖ-ਵੱਖ ਐਲਗੋਰਿਥਮ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ ਤਾਂ ਜੋ ਡਾਟਾਪੌਇੰਟ ਦੇ ਲੇਬਲ ਜਾਂ ਕਲਾਸ ਨੂੰ ਨਿਰਧਾਰਤ ਕੀਤਾ ਜਾ ਸਕੇ। ਆਓ ਇਸ ਖਾਣੇ ਦੇ ਡਾਟੇ ਨਾਲ ਕੰਮ ਕਰੀਏ ਤਾਂ ਜੋ ਦੇਖ ਸਕੀਏ ਕਿ ਸਮੱਗਰੀ ਦੇ ਇੱਕ ਸਮੂਹ ਨੂੰ ਦੇਖ ਕੇ, ਅਸੀਂ ਇਸ ਦੇ ਮੂਲ ਖਾਣੇ ਦੀ ਪਛਾਣ ਕਰ ਸਕਦੇ ਹਾਂ।\n",
"\n",
"### [**ਪ੍ਰੀ-ਲੈਕਚਰ ਕਵਿਜ਼**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/19/)\n",
"\n",
"### **ਪ੍ਰਸਤਾਵਨਾ**\n",
"\n",
"ਕਲਾਸੀਫਿਕੇਸ਼ਨ ਮਸ਼ੀਨ ਲਰਨਿੰਗ ਖੋਜਕਰਤਾ ਅਤੇ ਡਾਟਾ ਸਾਇੰਟਿਸਟ ਦੀਆਂ ਮੁੱਖ ਗਤੀਵਿਧੀਆਂ ਵਿੱਚੋਂ ਇੱਕ ਹੈ। ਬਾਈਨਰੀ ਮੁੱਲ ਦੀ ਬੁਨਿਆਦੀ ਕਲਾਸੀਫਿਕੇਸ਼ਨ (\"ਕੀ ਇਹ ਈਮੇਲ ਸਪੈਮ ਹੈ ਜਾਂ ਨਹੀਂ?\") ਤੋਂ ਲੈ ਕੇ ਕੰਪਿਊਟਰ ਵਿਜ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਜਟਿਲ ਚਿੱਤਰ ਕਲਾਸੀਫਿਕੇਸ਼ਨ ਅਤੇ ਸੈਗਮੈਂਟੇਸ਼ਨ ਤੱਕ, ਡਾਟੇ ਨੂੰ ਕਲਾਸਾਂ ਵਿੱਚ ਵੰਡਣਾ ਅਤੇ ਇਸ ਤੋਂ ਸਵਾਲ ਪੁੱਛਣਾ ਹਮੇਸ਼ਾ ਲਾਭਦਾਇਕ ਹੁੰਦਾ ਹੈ।\n",
"\n",
"ਇਸ ਪ੍ਰਕਿਰਿਆ ਨੂੰ ਹੋਰ ਵਿਗਿਆਨਕ ਢੰਗ ਨਾਲ ਵਿਆਖਿਆ ਕਰਨ ਲਈ, ਤੁਹਾਡੀ ਕਲਾਸੀਫਿਕੇਸ਼ਨ ਵਿਧੀ ਇੱਕ ਪੇਸ਼ਗੂਈ ਮਾਡਲ ਬਣਾਉਂਦੀ ਹੈ ਜੋ ਤੁਹਾਨੂੰ ਇਨਪੁਟ ਵੈਰੀਏਬਲਾਂ ਅਤੇ ਆਉਟਪੁਟ ਵੈਰੀਏਬਲਾਂ ਦੇ ਵਿਚਕਾਰ ਸੰਬੰਧ ਨੂੰ ਨਕਸ਼ੇ ਵਿੱਚ ਮਦਦ ਕਰਦੀ ਹੈ।\n",
"\n",
"<p >\n",
" <img src=\"../../images/binary-multiclass.png\"\n",
" width=\"600\"/>\n",
" <figcaption>ਕਲਾਸੀਫਿਕੇਸ਼ਨ ਐਲਗੋਰਿਥਮਾਂ ਲਈ ਬਾਈਨਰੀ ਅਤੇ ਮਲਟੀਕਲਾਸ ਸਮੱਸਿਆਵਾਂ। ਜੇਨ ਲੂਪਰ ਦੁਆਰਾ ਇਨਫੋਗ੍ਰਾਫਿਕ</figcaption>\n",
"\n",
"ਡਾਟੇ ਨੂੰ ਸਾਫ਼ ਕਰਨ, ਇਸ ਨੂੰ ਵਿਜੁਅਲਾਈਜ਼ ਕਰਨ ਅਤੇ ਇਸ ਨੂੰ ML ਕੰਮਾਂ ਲਈ ਤਿਆਰ ਕਰਨ ਦੀ ਪ੍ਰਕਿਰਿਆ ਸ਼ੁਰੂ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ, ਆਓ ਸਿੱਖੀਏ ਕਿ ਕਿਵੇਂ ਮਸ਼ੀਨ ਲਰਨਿੰਗ ਨੂੰ ਡਾਟੇ ਨੂੰ ਕਲਾਸੀਫਾਈ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਹੈ।\n",
"\n",
"[ਅੰਕੜੇ](https://wikipedia.org/wiki/Statistical_classification) ਤੋਂ ਲਿਆ ਗਿਆ, ਕਲਾਸੀਫਿਕੇਸ਼ਨ ਕਲਾਸਿਕ ਮਸ਼ੀਨ ਲਰਨਿੰਗ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ ਜਿਵੇਂ ਕਿ `smoker`, `weight`, ਅਤੇ `age` ਵਰਗੇ ਫੀਚਰਾਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ *ਕਿਸੇ X ਬਿਮਾਰੀ ਦੇ ਵਿਕਾਸ ਦੀ ਸੰਭਾਵਨਾ* ਦਾ ਨਿਰਧਾਰਨ ਕਰਨਾ। ਇੱਕ ਸੁਪਰਵਾਈਜ਼ਡ ਲਰਨਿੰਗ ਤਕਨੀਕ ਦੇ ਤੌਰ 'ਤੇ ਜੋ ਤੁਸੀਂ ਪਹਿਲਾਂ ਕੀਤੇ ਰਿਗ੍ਰੈਸ਼ਨ ਅਭਿਆਸਾਂ ਦੇ ਸਮਾਨ ਹੈ, ਤੁਹਾਡਾ ਡਾਟਾ ਲੇਬਲ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਅਤੇ ML ਐਲਗੋਰਿਥਮ ਉਹਨਾਂ ਲੇਬਲਾਂ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹਨ ਤਾਂ ਜੋ ਡਾਟਾਸੈਟ ਦੀਆਂ ਕਲਾਸਾਂ (ਜਾਂ 'ਫੀਚਰਾਂ') ਦੀ ਪੇਸ਼ਗੂਈ ਕੀਤੀ ਜਾ ਸਕੇ ਅਤੇ ਉਨ੍ਹਾਂ ਨੂੰ ਇੱਕ ਸਮੂਹ ਜਾਂ ਨਤੀਜੇ ਵਿੱਚ ਸੌਂਪਿਆ ਜਾ ਸਕੇ।\n",
"\n",
"✅ ਇੱਕ ਪਲ ਲਈ ਖਾਣਿਆਂ ਬਾਰੇ ਇੱਕ ਡਾਟਾਸੈਟ ਦੀ ਕਲਪਨਾ ਕਰੋ। ਇੱਕ ਮਲਟੀਕਲਾਸ ਮਾਡਲ ਕੀ ਸਵਾਲ ਦੇ ਜਵਾਬ ਦੇ ਸਕਦਾ ਹੈ? ਇੱਕ ਬਾਈਨਰੀ ਮਾਡਲ ਕੀ ਸਵਾਲ ਦੇ ਜਵਾਬ ਦੇ ਸਕਦਾ ਹੈ? ਜੇ ਤੁਸੀਂ ਇਹ ਪਤਾ ਲਗਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ ਕਿ ਦਿੱਤੇ ਗਏ ਖਾਣੇ ਵਿੱਚ ਮੇਥੀ ਦੀ ਵਰਤੋਂ ਹੋਣ ਦੀ ਸੰਭਾਵਨਾ ਹੈ ਜਾਂ ਨਹੀਂ, ਤਾਂ ਕੀ ਹੋਵੇਗਾ? ਜੇ ਤੁਸੀਂ ਦੇਖਣਾ ਚਾਹੁੰਦੇ ਹੋ ਕਿ, ਜੇ ਤੁਹਾਨੂੰ ਸਤਾਰ ਅਨੀਸ, ਅਰਟੀਚੋਕ, ਫੁੱਲਗੋਭੀ ਅਤੇ ਹੋਰਸਰੈਡਿਸ਼ ਨਾਲ ਭਰੇ ਹੋਏ ਗ੍ਰੋਸਰੀ ਬੈਗ ਦਾ ਤੋਹਫ਼ਾ ਮਿਲੇ, ਤਾਂ ਕੀ ਤੁਸੀਂ ਇੱਕ ਆਮ ਭਾਰਤੀ ਖਾਣਾ ਤਿਆਰ ਕਰ ਸਕਦੇ ਹੋ?\n",
"\n",
"### **ਹੈਲੋ 'ਕਲਾਸੀਫਾਇਰ'**\n",
"\n",
"ਜੋ ਸਵਾਲ ਅਸੀਂ ਇਸ ਖਾਣੇ ਦੇ ਡਾਟਾਸੈਟ ਤੋਂ ਪੁੱਛਣਾ ਚਾਹੁੰਦੇ ਹਾਂ, ਉਹ ਅਸਲ ਵਿੱਚ ਇੱਕ **ਮਲਟੀਕਲਾਸ ਸਵਾਲ** ਹੈ, ਕਿਉਂਕਿ ਸਾਡੇ ਕੋਲ ਕੰਮ ਕਰਨ ਲਈ ਕਈ ਸੰਭਾਵਿਤ ਰਾਸ਼ਟਰੀ ਖਾਣੇ ਹਨ। ਸਮੱਗਰੀ ਦੇ ਇੱਕ ਬੈਚ ਨੂੰ ਦੇਖ ਕੇ, ਇਹ ਡਾਟਾ ਕਿਹੜੀ ਕਲਾਸ ਵਿੱਚ ਫਿੱਟ ਹੋਵੇਗਾ?\n",
"\n",
"Tidymodels ਵੱਖ-ਵੱਖ ਐਲਗੋਰਿਥਮ ਪੇਸ਼ ਕਰਦਾ ਹੈ ਜੋ ਤੁਸੀਂ ਡਾਟੇ ਨੂੰ ਕਲਾਸੀਫਾਈ ਕਰਨ ਲਈ ਵਰਤ ਸਕਦੇ ਹੋ, ਇਹ ਇਸ ਗੱਲ 'ਤੇ ਨਿਰਭਰ ਕਰਦਾ ਹੈ ਕਿ ਤੁਸੀਂ ਕਿਹੜੀ ਸਮੱਸਿਆ ਦਾ ਹੱਲ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ। ਅਗਲੇ ਦੋ ਪਾਠਾਂ ਵਿੱਚ, ਤੁਸੀਂ ਇਨ੍ਹਾਂ ਐਲਗੋਰਿਥਮਾਂ ਵਿੱਚੋਂ ਕੁਝ ਬਾਰੇ ਸਿੱਖੋਗੇ।\n",
"\n",
"#### **ਪੂਰਵ-ਆਵਸ਼ਕਤਾ**\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",
"- `DataExplorer`: [DataExplorer ਪੈਕੇਜ](https://cran.r-project.org/web/packages/DataExplorer/vignettes/dataexplorer-intro.html) EDA ਪ੍ਰਕਿਰਿਆ ਅਤੇ ਰਿਪੋਰਟ ਜਨਰੇਸ਼ਨ ਨੂੰ ਸਧਾਰਨ ਅਤੇ ਆਟੋਮੈਟਿਕ ਬਣਾਉਣ ਲਈ ਹੈ।\n",
"\n",
"- `themis`: [themis ਪੈਕੇਜ](https://themis.tidymodels.org/) ਅਸੰਤੁਲਿਤ ਡਾਟੇ ਨਾਲ ਨਜਿੱਠਣ ਲਈ ਵਾਧੂ ਰੈਸੀਪੀ ਸਟੈਪ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ।\n",
"\n",
"ਤੁਸੀਂ ਇਹਨਾਂ ਨੂੰ ਹੇਠਾਂ ਦਿੱਤੇ ਤਰੀਕੇ ਨਾਲ ਇੰਸਟਾਲ ਕਰ ਸਕਦੇ ਹੋ:\n",
"\n",
"`install.packages(c(\"tidyverse\", \"tidymodels\", \"DataExplorer\", \"here\"))`\n",
"\n",
"ਵਿਕਲਪਕ ਤੌਰ 'ਤੇ, ਹੇਠਾਂ ਦਿੱਤਾ ਸਕ੍ਰਿਪਟ ਜਾਂਚਦਾ ਹੈ ਕਿ ਕੀ ਤੁਹਾਡੇ ਕੋਲ ਇਸ ਮੋਡਿਊਲ ਨੂੰ ਪੂਰਾ ਕਰਨ ਲਈ ਲੋੜੀਂਦੇ ਪੈਕੇਜ ਹਨ ਅਤੇ ਜੇ ਉਹ ਗੁੰਮ ਹਨ ਤਾਂ ਉਹਨਾਂ ਨੂੰ ਤੁਹਾਡੇ ਲਈ ਇੰਸਟਾਲ ਕਰਦਾ ਹੈ।\n"
],
"metadata": {
"id": "ri5bQxZ-Fz_0"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"suppressWarnings(if (!require(\"pacman\"))install.packages(\"pacman\"))\r\n",
"\r\n",
"pacman::p_load(tidyverse, tidymodels, DataExplorer, themis, here)"
],
"outputs": [],
"metadata": {
"id": "KIPxa4elGAPI"
}
},
{
"cell_type": "markdown",
"source": [
"ਅਸੀਂ ਬਾਅਦ ਵਿੱਚ ਇਹ ਸ਼ਾਨਦਾਰ ਪੈਕੇਜ ਲੋਡ ਕਰਾਂਗੇ ਅਤੇ ਉਨ੍ਹਾਂ ਨੂੰ ਆਪਣੀ ਮੌਜੂਦਾ R ਸੈਸ਼ਨ ਵਿੱਚ ਉਪਲਬਧ ਕਰਾਂਗੇ। (ਇਹ ਸਿਰਫ਼ ਦ੍ਰਿਸ਼ਾਂਤ ਲਈ ਹੈ, `pacman::p_load()` ਨੇ ਇਹ ਤੁਹਾਡੇ ਲਈ ਪਹਿਲਾਂ ਹੀ ਕਰ ਦਿੱਤਾ ਹੈ)\n"
],
"metadata": {
"id": "YkKAxOJvGD4C"
}
},
{
"cell_type": "markdown",
"source": [
"## ਕਸਰਤ - ਆਪਣੇ ਡਾਟਾ ਨੂੰ ਸਾਫ ਅਤੇ ਸੰਤੁਲਿਤ ਕਰੋ\n",
"\n",
"ਇਸ ਪ੍ਰੋਜੈਕਟ ਨੂੰ ਸ਼ੁਰੂ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਪਹਿਲਾ ਕੰਮ ਹੈ ਆਪਣੇ ਡਾਟਾ ਨੂੰ ਸਾਫ ਅਤੇ **ਸੰਤੁਲਿਤ** ਕਰਨਾ ਤਾਂ ਜੋ ਵਧੀਆ ਨਤੀਜੇ ਪ੍ਰਾਪਤ ਹੋਣ।\n",
"\n",
"ਆਓ ਡਾਟਾ ਨਾਲ ਜਾਣ-ਪਛਾਣ ਕਰੀਏ!🕵️\n"
],
"metadata": {
"id": "PFkQDlk0GN5O"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Import data\r\n",
"df <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/4-Classification/data/cuisines.csv\")\r\n",
"\r\n",
"# View the first 5 rows\r\n",
"df %>% \r\n",
" slice_head(n = 5)\r\n"
],
"outputs": [],
"metadata": {
"id": "Qccw7okxGT0S"
}
},
{
"cell_type": "markdown",
"source": [
"ਰੁਚਿਕਰ! ਲਗਦਾ ਹੈ ਕਿ ਪਹਿਲਾ ਕਾਲਮ ਕਿਸਮ ਦਾ `id` ਕਾਲਮ ਹੈ। ਆਓ ਡੇਟਾ ਬਾਰੇ ਥੋੜ੍ਹੀ ਹੋਰ ਜਾਣਕਾਰੀ ਲਵਾਂ।\n"
],
"metadata": {
"id": "XrWnlgSrGVmR"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Basic information about the data\r\n",
"df %>%\r\n",
" introduce()\r\n",
"\r\n",
"# Visualize basic information above\r\n",
"df %>% \r\n",
" plot_intro(ggtheme = theme_light())"
],
"outputs": [],
"metadata": {
"id": "4UcGmxRxGieA"
}
},
{
"cell_type": "markdown",
"source": [
"ਨਤੀਜੇ ਤੋਂ, ਅਸੀਂ ਤੁਰੰਤ ਦੇਖ ਸਕਦੇ ਹਾਂ ਕਿ ਸਾਡੇ ਕੋਲ `2448` ਪੰਗਤਾਂ ਅਤੇ `385` ਕਾਲਮ ਹਨ ਅਤੇ `0` ਗੁੰਮ ਸ਼੍ਰੇਣੀਆਂ ਹਨ। ਸਾਡੇ ਕੋਲ 1 ਵਿਸ਼ੇਸ਼ ਕਾਲਮ ਹੈ, *cuisine*।\n",
"\n",
"## ਅਭਿਆਸ - ਖਾਣੇ ਦੀ ਕਿਸਮਾਂ ਬਾਰੇ ਸਿੱਖਣਾ\n",
"\n",
"ਹੁਣ ਕੰਮ ਹੋਰ ਦਿਲਚਸਪ ਹੋਣਾ ਸ਼ੁਰੂ ਹੁੰਦਾ ਹੈ। ਆਓ ਖਾਣੇ ਦੀ ਕਿਸਮ ਦੇ ਅਨੁਸਾਰ ਡਾਟਾ ਦੇ ਵੰਡ ਦਾ ਪਤਾ ਲਗਾਈਏ।\n"
],
"metadata": {
"id": "AaPubl__GmH5"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Count observations per cuisine\r\n",
"df %>% \r\n",
" count(cuisine) %>% \r\n",
" arrange(n)\r\n",
"\r\n",
"# Plot the distribution\r\n",
"theme_set(theme_light())\r\n",
"df %>% \r\n",
" count(cuisine) %>% \r\n",
" ggplot(mapping = aes(x = n, y = reorder(cuisine, -n))) +\r\n",
" geom_col(fill = \"midnightblue\", alpha = 0.7) +\r\n",
" ylab(\"cuisine\")"
],
"outputs": [],
"metadata": {
"id": "FRsBVy5eGrrv"
}
},
{
"cell_type": "markdown",
"source": [
"ਖਾਣਿਆਂ ਦੀ ਗਿਣਤੀ ਸੀਮਿਤ ਹੈ, ਪਰ ਡਾਟਾ ਦਾ ਵੰਡ ਅਸਮਾਨ ਹੈ। ਤੁਸੀਂ ਇਸਨੂੰ ਠੀਕ ਕਰ ਸਕਦੇ ਹੋ! ਇਸ ਤੋਂ ਪਹਿਲਾਂ, ਥੋੜ੍ਹਾ ਹੋਰ ਪੜਚੋਲ ਕਰੋ।\n",
"\n",
"ਅਗਲੇ ਕਦਮ ਵਿੱਚ, ਹਰ ਖਾਣੇ ਨੂੰ ਇਸਦੇ ਅਲੱਗ-ਅਲੱਗ ਟਿਬਲ ਵਿੱਚ ਵੰਡੋ ਅਤੇ ਪਤਾ ਕਰੋ ਕਿ ਹਰ ਖਾਣੇ ਲਈ ਕਿੰਨਾ ਡਾਟਾ ਉਪਲਬਧ ਹੈ (ਕਤਾਰਾਂ, ਕਾਲਮ)।\n",
"\n",
"> ਇੱਕ [tibble](https://tibble.tidyverse.org/) ਇੱਕ ਆਧੁਨਿਕ ਡਾਟਾ ਫਰੇਮ ਹੈ।\n",
"\n",
"<p >\n",
" <img src=\"../../images/dplyr_filter.jpg\"\n",
" width=\"600\"/>\n",
" <figcaption>ਚਿੱਤਰਕਲਾ @allison_horst ਦੁਆਰਾ</figcaption>\n"
],
"metadata": {
"id": "vVvyDb1kG2in"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Create individual tibble for the cuisines\r\n",
"thai_df <- df %>% \r\n",
" filter(cuisine == \"thai\")\r\n",
"japanese_df <- df %>% \r\n",
" filter(cuisine == \"japanese\")\r\n",
"chinese_df <- df %>% \r\n",
" filter(cuisine == \"chinese\")\r\n",
"indian_df <- df %>% \r\n",
" filter(cuisine == \"indian\")\r\n",
"korean_df <- df %>% \r\n",
" filter(cuisine == \"korean\")\r\n",
"\r\n",
"\r\n",
"# Find out how much data is available per cuisine\r\n",
"cat(\" thai df:\", dim(thai_df), \"\\n\",\r\n",
" \"japanese df:\", dim(japanese_df), \"\\n\",\r\n",
" \"chinese_df:\", dim(chinese_df), \"\\n\",\r\n",
" \"indian_df:\", dim(indian_df), \"\\n\",\r\n",
" \"korean_df:\", dim(korean_df))"
],
"outputs": [],
"metadata": {
"id": "0TvXUxD3G8Bk"
}
},
{
"cell_type": "markdown",
"source": [
"## **ਕਸਰਤ - dplyr ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਖਾਣੇ ਦੇ ਮੁੱਖ ਸਮੱਗਰੀ ਦੀ ਖੋਜ ਕਰਨਾ**\n",
"\n",
"ਹੁਣ ਤੁਸੀਂ ਡਾਟਾ ਵਿੱਚ ਗਹਿਰਾਈ ਨਾਲ ਜਾਣਕਾਰੀ ਪ੍ਰਾਪਤ ਕਰ ਸਕਦੇ ਹੋ ਅਤੇ ਸਿੱਖ ਸਕਦੇ ਹੋ ਕਿ ਹਰ ਖਾਣੇ ਲਈ ਆਮ ਸਮੱਗਰੀ ਕੀ ਹੈ। ਤੁਹਾਨੂੰ ਉਹ ਮੁੜ ਆਉਣ ਵਾਲੇ ਡਾਟਾ ਨੂੰ ਸਾਫ਼ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ ਜੋ ਖਾਣਿਆਂ ਵਿੱਚ ਗਲਤਫਹਿਮੀ ਪੈਦਾ ਕਰਦਾ ਹੈ, ਤਾਂ ਆਓ ਇਸ ਸਮੱਸਿਆ ਬਾਰੇ ਸਿੱਖੀਏ।\n",
"\n",
"R ਵਿੱਚ ਇੱਕ ਫੰਕਸ਼ਨ `create_ingredient()` ਬਣਾਓ ਜੋ ਇੱਕ ਸਮੱਗਰੀ ਡਾਟਾਫਰੇਮ ਵਾਪਸ ਕਰਦਾ ਹੈ। ਇਹ ਫੰਕਸ਼ਨ ਇੱਕ ਅਣਉਪਯੋਗ ਕਾਲਮ ਨੂੰ ਹਟਾ ਕੇ ਸ਼ੁਰੂ ਕਰੇਗਾ ਅਤੇ ਸਮੱਗਰੀ ਨੂੰ ਉਨ੍ਹਾਂ ਦੀ ਗਿਣਤੀ ਦੇ ਅਧਾਰ 'ਤੇ ਵਿਆਸਤ ਕਰੇਗਾ।\n",
"\n",
"R ਵਿੱਚ ਫੰਕਸ਼ਨ ਦੀ ਬੁਨਿਆਦੀ ਬਣਤਰ ਹੈ:\n",
"\n",
"`myFunction <- function(arglist){`\n",
"\n",
"**`...`**\n",
"\n",
"**`return`**`(value)`\n",
"\n",
"`}`\n",
"\n",
"R ਫੰਕਸ਼ਨ ਲਈ ਇੱਕ ਸਾਫ਼ ਸਿਰਜਣਾਤਮਕ ਜਾਣਕਾਰੀ [ਇੱਥੇ](https://skirmer.github.io/presentations/functions_with_r.html#1) ਮਿਲ ਸਕਦੀ ਹੈ।\n",
"\n",
"ਚਲੋ ਇਸ 'ਤੇ ਸਿੱਧੇ ਕੰਮ ਕਰੀਏ! ਅਸੀਂ [dplyr verbs](https://dplyr.tidyverse.org/) ਦੀ ਵਰਤੋਂ ਕਰਾਂਗੇ ਜੋ ਅਸੀਂ ਪਿਛਲੇ ਪਾਠਾਂ ਵਿੱਚ ਸਿੱਖ ਰਹੇ ਹਾਂ। ਇੱਕ ਰੀਕੈਪ ਦੇ ਤੌਰ 'ਤੇ:\n",
"\n",
"- `dplyr::select()`: ਤੁਹਾਨੂੰ ਚੁਣਨ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ ਕਿ ਕਿਹੜੇ **ਕਾਲਮ** ਰੱਖਣੇ ਹਨ ਜਾਂ ਹਟਾਉਣੇ ਹਨ।\n",
"\n",
"- `dplyr::pivot_longer()`: ਤੁਹਾਨੂੰ ਡਾਟਾ ਨੂੰ \"ਲੰਬਾ\" ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ, ਕਾਲਮਾਂ ਦੀ ਗਿਣਤੀ ਘਟਾਉਂਦਾ ਹੈ ਅਤੇ ਕਤਾਰਾਂ ਦੀ ਗਿਣਤੀ ਵਧਾਉਂਦਾ ਹੈ।\n",
"\n",
"- `dplyr::group_by()` ਅਤੇ `dplyr::summarise()`: ਤੁਹਾਨੂੰ ਵੱਖ-ਵੱਖ ਸਮੂਹਾਂ ਲਈ ਸੰਖੇਪ ਸਾਂਖਿਆਤਿਕ ਜਾਣਕਾਰੀ ਲੱਭਣ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ ਅਤੇ ਇਸ ਨੂੰ ਇੱਕ ਸੁੰਦਰ ਟੇਬਲ ਵਿੱਚ ਰੱਖਦਾ ਹੈ।\n",
"\n",
"- `dplyr::filter()`: ਡਾਟਾ ਦਾ ਇੱਕ ਉਪਸੈੱਟ ਬਣਾਉਂਦਾ ਹੈ ਜੋ ਸਿਰਫ਼ ਉਹ ਕਤਾਰਾਂ ਸ਼ਾਮਲ ਕਰਦਾ ਹੈ ਜੋ ਤੁਹਾਡੇ ਸ਼ਰਤਾਂ ਨੂੰ ਪੂਰਾ ਕਰਦੀਆਂ ਹਨ।\n",
"\n",
"- `dplyr::mutate()`: ਤੁਹਾਨੂੰ ਕਾਲਮ ਬਣਾਉਣ ਜਾਂ ਸੋਧਣ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ।\n",
"\n",
"ਇਹ [*ਕਲਾ*-ਭਰਪੂਰ learnr ਟਿਊਟੋਰਿਅਲ](https://allisonhorst.shinyapps.io/dplyr-learnr/#section-welcome) ਦੇਖੋ ਜੋ Allison Horst ਦੁਆਰਾ ਬਣਾਇਆ ਗਿਆ ਹੈ। ਇਹ dplyr *(Tidyverse ਦਾ ਹਿੱਸਾ)* ਵਿੱਚ ਕੁਝ ਉਪਯੋਗ ਡਾਟਾ ਸੰਭਾਲਣ ਵਾਲੇ ਫੰਕਸ਼ਨਾਂ ਨੂੰ ਪੇਸ਼ ਕਰਦਾ ਹੈ।\n"
],
"metadata": {
"id": "K3RF5bSCHC76"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Creates a functions that returns the top ingredients by class\r\n",
"\r\n",
"create_ingredient <- function(df){\r\n",
" \r\n",
" # Drop the id column which is the first colum\r\n",
" ingredient_df = df %>% select(-1) %>% \r\n",
" # Transpose data to a long format\r\n",
" pivot_longer(!cuisine, names_to = \"ingredients\", values_to = \"count\") %>% \r\n",
" # Find the top most ingredients for a particular cuisine\r\n",
" group_by(ingredients) %>% \r\n",
" summarise(n_instances = sum(count)) %>% \r\n",
" filter(n_instances != 0) %>% \r\n",
" # Arrange by descending order\r\n",
" arrange(desc(n_instances)) %>% \r\n",
" mutate(ingredients = factor(ingredients) %>% fct_inorder())\r\n",
" \r\n",
" \r\n",
" return(ingredient_df)\r\n",
"} # End of function"
],
"outputs": [],
"metadata": {
"id": "uB_0JR82HTPa"
}
},
{
"cell_type": "markdown",
"source": [
"ਹੁਣ ਅਸੀਂ ਇਸ ਫੰਕਸ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਖਾਣੇ ਦੇ ਰਸੋਈ ਅਨੁਸਾਰ ਸਭ ਤੋਂ ਪ੍ਰਸਿੱਧ ਦਸ ਸਮੱਗਰੀਆਂ ਦਾ ਅੰਦਾਜ਼ਾ ਲਗਾ ਸਕਦੇ ਹਾਂ। ਆਓ ਇਸਨੂੰ `thai_df` ਨਾਲ ਅਜ਼ਮਾਈਏ।\n"
],
"metadata": {
"id": "h9794WF8HWmc"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Call create_ingredient and display popular ingredients\r\n",
"thai_ingredient_df <- create_ingredient(df = thai_df)\r\n",
"\r\n",
"thai_ingredient_df %>% \r\n",
" slice_head(n = 10)"
],
"outputs": [],
"metadata": {
"id": "agQ-1HrcHaEA"
}
},
{
"cell_type": "markdown",
"source": [
"ਪਿਛਲੇ ਭਾਗ ਵਿੱਚ, ਅਸੀਂ `geom_col()` ਵਰਤਿਆ ਸੀ, ਆਓ ਵੇਖੀਏ ਕਿ ਤੁਸੀਂ `geom_bar` ਨੂੰ ਵੀ ਕਿਵੇਂ ਵਰਤ ਸਕਦੇ ਹੋ, ਬਾਰ ਚਾਰਟ ਬਣਾਉਣ ਲਈ। ਹੋਰ ਪੜ੍ਹਨ ਲਈ `?geom_bar` ਵਰਤੋ।\n"
],
"metadata": {
"id": "kHu9ffGjHdcX"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Make a bar chart for popular thai cuisines\r\n",
"thai_ingredient_df %>% \r\n",
" slice_head(n = 10) %>% \r\n",
" ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
" geom_bar(stat = \"identity\", width = 0.5, fill = \"steelblue\") +\r\n",
" xlab(\"\") + ylab(\"\")"
],
"outputs": [],
"metadata": {
"id": "fb3Bx_3DHj6e"
}
},
{
"cell_type": "markdown",
"source": [],
"metadata": {
"id": "RHP_xgdkHnvM"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Get popular ingredients for Japanese cuisines and make bar chart\r\n",
"create_ingredient(df = japanese_df) %>% \r\n",
" slice_head(n = 10) %>%\r\n",
" ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
" geom_bar(stat = \"identity\", width = 0.5, fill = \"darkorange\", alpha = 0.8) +\r\n",
" xlab(\"\") + ylab(\"\")\r\n"
],
"outputs": [],
"metadata": {
"id": "019v8F0XHrRU"
}
},
{
"cell_type": "markdown",
"source": [
"ਚੀਨੀ ਖਾਣੇ ਬਾਰੇ ਕੀ ਖਿਆਲ ਹੈ?\n"
],
"metadata": {
"id": "iIGM7vO8Hu3v"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Get popular ingredients for Chinese cuisines and make bar chart\r\n",
"create_ingredient(df = chinese_df) %>% \r\n",
" slice_head(n = 10) %>%\r\n",
" ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
" geom_bar(stat = \"identity\", width = 0.5, fill = \"cyan4\", alpha = 0.8) +\r\n",
" xlab(\"\") + ylab(\"\")"
],
"outputs": [],
"metadata": {
"id": "lHd9_gd2HyzU"
}
},
{
"cell_type": "markdown",
"source": [],
"metadata": {
"id": "ir8qyQbNH1c7"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Get popular ingredients for Indian cuisines and make bar chart\r\n",
"create_ingredient(df = indian_df) %>% \r\n",
" slice_head(n = 10) %>%\r\n",
" ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
" geom_bar(stat = \"identity\", width = 0.5, fill = \"#041E42FF\", alpha = 0.8) +\r\n",
" xlab(\"\") + ylab(\"\")"
],
"outputs": [],
"metadata": {
"id": "ApukQtKjH5FO"
}
},
{
"cell_type": "markdown",
"source": [],
"metadata": {
"id": "qv30cwY1H-FM"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Get popular ingredients for Korean cuisines and make bar chart\r\n",
"create_ingredient(df = korean_df) %>% \r\n",
" slice_head(n = 10) %>%\r\n",
" ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
" geom_bar(stat = \"identity\", width = 0.5, fill = \"#852419FF\", alpha = 0.8) +\r\n",
" xlab(\"\") + ylab(\"\")"
],
"outputs": [],
"metadata": {
"id": "lumgk9cHIBie"
}
},
{
"cell_type": "markdown",
"source": [
"ਡਾਟਾ ਵਿਜੁਅਲਾਈਜ਼ੇਸ਼ਨ ਤੋਂ, ਹੁਣ ਅਸੀਂ ਸਭ ਤੋਂ ਆਮ ਸਮੱਗਰੀਆਂ ਨੂੰ ਹਟਾ ਸਕਦੇ ਹਾਂ ਜੋ ਵੱਖ-ਵੱਖ ਖਾਣਿਆਂ ਵਿੱਚ ਗਲਤਫਹਮੀਆਂ ਪੈਦਾ ਕਰਦੀਆਂ ਹਨ, `dplyr::select()` ਦੀ ਵਰਤੋਂ ਕਰਕੇ।\n",
"\n",
"ਸਭ ਨੂੰ ਚੌਲ, ਲਸਣ ਅਤੇ ਅਦਰਕ ਪਸੰਦ ਹੈ!\n"
],
"metadata": {
"id": "iO4veMXuIEta"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Drop id column, rice, garlic and ginger from our original data set\r\n",
"df_select <- df %>% \r\n",
" select(-c(1, rice, garlic, ginger))\r\n",
"\r\n",
"# Display new data set\r\n",
"df_select %>% \r\n",
" slice_head(n = 5)"
],
"outputs": [],
"metadata": {
"id": "iHJPiG6rIUcK"
}
},
{
"cell_type": "markdown",
"source": [
"## ਰਿਸੇਪੀਆਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਡਾਟਾ ਪ੍ਰੀ-ਪ੍ਰੋਸੈਸਿੰਗ 👩‍🍳👨‍🍳 - ਅਸਮਾਨ ਡਾਟਾ ਨਾਲ ਨਜਿੱਠਣਾ ⚖️\n",
"\n",
"<p >\n",
" <img src=\"../../images/recipes.png\"\n",
" width=\"600\"/>\n",
" <figcaption>ਕਲਾ ਰਚਨਾ @allison_horst ਵੱਲੋਂ</figcaption>\n",
"\n",
"ਜਿਵੇਂ ਕਿ ਇਹ ਪਾਠ ਭੋਜਨ ਵਿਧੀਆਂ ਬਾਰੇ ਹੈ, ਸਾਨੂੰ `ਰਿਸੇਪੀਆਂ` ਨੂੰ ਸੰਦਰਭ ਵਿੱਚ ਰੱਖਣਾ ਪਵੇਗਾ।\n",
"\n",
"Tidymodels ਇੱਕ ਹੋਰ ਵਧੀਆ ਪੈਕੇਜ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ: `recipes` - ਡਾਟਾ ਪ੍ਰੀ-ਪ੍ਰੋਸੈਸਿੰਗ ਲਈ ਇੱਕ ਪੈਕੇਜ।\n"
],
"metadata": {
"id": "kkFd-JxdIaL6"
}
},
{
"cell_type": "markdown",
"source": [
"ਚਲੋ ਫਿਰ ਸਾਡੇ ਖਾਣਿਆਂ ਦੇ ਵੰਡਵਾਰ ਨੂੰ ਦੁਬਾਰਾ ਦੇਖਦੇ ਹਾਂ।\n"
],
"metadata": {
"id": "6l2ubtTPJAhY"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Distribution of cuisines\r\n",
"old_label_count <- df_select %>% \r\n",
" count(cuisine) %>% \r\n",
" arrange(desc(n))\r\n",
"\r\n",
"old_label_count"
],
"outputs": [],
"metadata": {
"id": "1e-E9cb7JDVi"
}
},
{
"cell_type": "markdown",
"source": [
"ਜਿਵੇਂ ਤੁਸੀਂ ਦੇਖ ਸਕਦੇ ਹੋ, ਖਾਣਿਆਂ ਦੀ ਗਿਣਤੀ ਵਿੱਚ ਕਾਫੀ ਅਸਮਾਨਤਾ ਹੈ। ਕੋਰੀਅਨ ਖਾਣੇ ਥਾਈ ਖਾਣਿਆਂ ਨਾਲ ਲਗਭਗ 3 ਗੁਣਾ ਹਨ। ਅਸਮਾਨਤ ਡਾਟਾ ਅਕਸਰ ਮਾਡਲ ਦੀ ਕਾਰਗੁਜ਼ਾਰੀ 'ਤੇ ਨਕਾਰਾਤਮਕ ਪ੍ਰਭਾਵ ਪਾਂਦਾ ਹੈ। ਇੱਕ ਬਾਈਨਰੀ ਕਲਾਸੀਫਿਕੇਸ਼ਨ ਬਾਰੇ ਸੋਚੋ। ਜੇ ਤੁਹਾਡਾ ਜ਼ਿਆਦਾਤਰ ਡਾਟਾ ਇੱਕ ਹੀ ਕਲਾਸ ਦਾ ਹੈ, ਤਾਂ ਇੱਕ ਮਸ਼ੀਨ ਲਰਨਿੰਗ ਮਾਡਲ ਉਸ ਕਲਾਸ ਦੀ ਅਕਸਰ ਭਵਿੱਖਵਾਣੀ ਕਰੇਗਾ, ਸਿਰਫ ਇਸ ਲਈ ਕਿ ਉਸ ਲਈ ਜ਼ਿਆਦਾ ਡਾਟਾ ਉਪਲਬਧ ਹੈ। ਡਾਟਾ ਨੂੰ ਸੰਤੁਲਿਤ ਕਰਨਾ ਕਿਸੇ ਵੀ ਤਰ੍ਹਾਂ ਦੇ ਝੁਕਾਅ ਵਾਲੇ ਡਾਟਾ ਨੂੰ ਹਟਾਉਣ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ। ਬਹੁਤ ਸਾਰੇ ਮਾਡਲ ਉਸ ਸਮੇਂ ਸਭ ਤੋਂ ਵਧੀਆ ਪ੍ਰਦਰਸ਼ਨ ਕਰਦੇ ਹਨ ਜਦੋਂ ਅਵਲੋਕਨਾਂ ਦੀ ਗਿਣਤੀ ਬਰਾਬਰ ਹੁੰਦੀ ਹੈ ਅਤੇ ਇਸ ਲਈ ਅਸਮਾਨਤ ਡਾਟਾ ਨਾਲ ਸੰਘਰਸ਼ ਕਰਦੇ ਹਨ।\n",
"\n",
"ਅਸਮਾਨਤ ਡਾਟਾ ਸੈੱਟ ਨਾਲ ਨਜਿੱਠਣ ਦੇ ਮੁੱਖ ਤੌਰ 'ਤੇ ਦੋ ਤਰੀਕੇ ਹਨ:\n",
"\n",
"- ਘੱਟ ਗਿਣਤੀ ਵਾਲੀ ਕਲਾਸ ਵਿੱਚ ਅਵਲੋਕਨ ਸ਼ਾਮਲ ਕਰਨਾ: `Over-sampling` ਜਿਵੇਂ ਕਿ SMOTE algorithm ਦੀ ਵਰਤੋਂ ਕਰਨਾ\n",
"\n",
"- ਵੱਧ ਗਿਣਤੀ ਵਾਲੀ ਕਲਾਸ ਤੋਂ ਅਵਲੋਕਨ ਹਟਾਉਣਾ: `Under-sampling`\n",
"\n",
"ਆਓ ਹੁਣ ਇੱਕ `recipe` ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਅਸਮਾਨਤ ਡਾਟਾ ਸੈੱਟ ਨਾਲ ਨਜਿੱਠਣ ਦਾ ਪ੍ਰਦਰਸ਼ਨ ਕਰੀਏ। ਇੱਕ ਰੈਸੀਪੀ ਨੂੰ ਇੱਕ ਬਲੂਪ੍ਰਿੰਟ ਵਜੋਂ ਸੋਚਿਆ ਜਾ ਸਕਦਾ ਹੈ ਜੋ ਵੇਰਵਾ ਦਿੰਦਾ ਹੈ ਕਿ ਡਾਟਾ ਵਿਸ਼ਲੇਸ਼ਣ ਲਈ ਤਿਆਰ ਕਰਨ ਲਈ ਕਿਸ ਤਰ੍ਹਾਂ ਦੇ ਕਦਮ ਲਾਗੂ ਕੀਤੇ ਜਾਣੇ ਚਾਹੀਦੇ ਹਨ।\n"
],
"metadata": {
"id": "soAw6826JKx9"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Load themis package for dealing with imbalanced data\r\n",
"library(themis)\r\n",
"\r\n",
"# Create a recipe for preprocessing data\r\n",
"cuisines_recipe <- recipe(cuisine ~ ., data = df_select) %>% \r\n",
" step_smote(cuisine)\r\n",
"\r\n",
"cuisines_recipe"
],
"outputs": [],
"metadata": {
"id": "HS41brUIJVJy"
}
},
{
"cell_type": "markdown",
"source": [
"ਆਓ ਅਸੀਂ ਆਪਣੇ ਪ੍ਰੀ-ਪ੍ਰੋਸੈਸਿੰਗ ਕਦਮਾਂ ਨੂੰ ਵੰਡ ਕੇ ਸਮਝੀਏ।\n",
"\n",
"- `recipe()` ਨੂੰ ਇੱਕ ਫਾਰਮੂਲਾ ਨਾਲ ਕਾਲ ਕਰਨ ਦਾ ਮਤਲਬ ਹੈ ਕਿ ਇਹ ਰੈਸਪੀ ਨੂੰ ਬਤਾਉਂਦਾ ਹੈ ਕਿ ਵੈਰੀਏਬਲਾਂ ਦੇ *ਰੋਲ* ਕੀ ਹਨ, ਜਿਸ ਵਿੱਚ `df_select` ਡਾਟਾ ਨੂੰ ਰਿਫਰੈਂਸ ਵਜੋਂ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ। ਉਦਾਹਰਣ ਲਈ, `cuisine` ਕਾਲਮ ਨੂੰ `outcome` ਰੋਲ ਦਿੱਤਾ ਗਿਆ ਹੈ ਜਦਕਿ ਬਾਕੀ ਕਾਲਮਾਂ ਨੂੰ `predictor` ਰੋਲ ਦਿੱਤਾ ਗਿਆ ਹੈ।\n",
"\n",
"- [`step_smote(cuisine)`](https://themis.tidymodels.org/reference/step_smote.html) ਰੈਸਪੀ ਦੇ ਇੱਕ ਕਦਮ ਦੀ *ਵਿਸ਼ੇਸ਼ਤਾ* ਬਣਾਉਂਦਾ ਹੈ ਜੋ ਘੱਟ ਗਿਣਤੀ ਵਾਲੇ ਵਰਗ ਦੇ ਨਵੇਂ ਉਦਾਹਰਣਾਂ ਨੂੰ ਨਜ਼ਦੀਕੀ ਪੜੋਸੀਆਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਕ੍ਰਿਤ੍ਰਿਮ ਤਰੀਕੇ ਨਾਲ ਤਿਆਰ ਕਰਦਾ ਹੈ।\n",
"\n",
"ਹੁਣ, ਜੇ ਅਸੀਂ ਪ੍ਰੀ-ਪ੍ਰੋਸੈਸ ਕੀਤਾ ਡਾਟਾ ਦੇਖਣਾ ਚਾਹੁੰਦੇ ਹਾਂ, ਤਾਂ ਸਾਨੂੰ ਆਪਣੀ ਰੈਸਪੀ ਨੂੰ [**`prep()`**](https://recipes.tidymodels.org/reference/prep.html) ਅਤੇ [**`bake()`**](https://recipes.tidymodels.org/reference/bake.html) ਕਰਨਾ ਪਵੇਗਾ।\n",
"\n",
"`prep()`: ਟ੍ਰੇਨਿੰਗ ਸੈੱਟ ਤੋਂ ਲੋੜੀਂਦੇ ਪੈਰਾਮੀਟਰਾਂ ਦਾ ਅੰਦਾਜ਼ਾ ਲਗਾਉਂਦਾ ਹੈ, ਜੋ ਬਾਅਦ ਵਿੱਚ ਹੋਰ ਡਾਟਾ ਸੈੱਟਾਂ 'ਤੇ ਲਾਗੂ ਕੀਤੇ ਜਾ ਸਕਦੇ ਹਨ।\n",
"\n",
"`bake()`: ਇੱਕ ਤਿਆਰ ਕੀਤੀ ਗਈ ਰੈਸਪੀ ਲੈਂਦਾ ਹੈ ਅਤੇ ਇਸਨੂੰ ਕਿਸੇ ਵੀ ਡਾਟਾ ਸੈੱਟ 'ਤੇ ਲਾਗੂ ਕਰਦਾ ਹੈ।\n"
],
"metadata": {
"id": "Yb-7t7XcJaC8"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Prep and bake the recipe\r\n",
"preprocessed_df <- cuisines_recipe %>% \r\n",
" prep() %>% \r\n",
" bake(new_data = NULL) %>% \r\n",
" relocate(cuisine)\r\n",
"\r\n",
"# Display data\r\n",
"preprocessed_df %>% \r\n",
" slice_head(n = 5)\r\n",
"\r\n",
"# Quick summary stats\r\n",
"preprocessed_df %>% \r\n",
" introduce()"
],
"outputs": [],
"metadata": {
"id": "9QhSgdpxJl44"
}
},
{
"cell_type": "markdown",
"source": [
"ਚਲੋ ਹੁਣ ਸਾਡੀਆਂ ਖਾਣਿਆਂ ਦੀ ਵੰਡ ਦੀ ਜਾਂਚ ਕਰੀਏ ਅਤੇ ਉਨ੍ਹਾਂ ਦੀ ਤੁਲਨਾ ਅਸਮਤਲ ਡਾਟਾ ਨਾਲ ਕਰੀਏ।\n"
],
"metadata": {
"id": "dmidELh_LdV7"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Distribution of cuisines\r\n",
"new_label_count <- preprocessed_df %>% \r\n",
" count(cuisine) %>% \r\n",
" arrange(desc(n))\r\n",
"\r\n",
"list(new_label_count = new_label_count,\r\n",
" old_label_count = old_label_count)"
],
"outputs": [],
"metadata": {
"id": "aSh23klBLwDz"
}
},
{
"cell_type": "markdown",
"source": [
"ਯਮ! ਡਾਟਾ ਸੁਚੱਜਾ, ਸੰਤੁਲਿਤ ਅਤੇ ਬਹੁਤ ਹੀ ਸੁਆਦਿਸ਼ਟ ਹੈ 😋!\n",
"\n",
"> ਆਮ ਤੌਰ 'ਤੇ, ਇੱਕ ਰੈਸਿਪੀ ਆਮ ਤੌਰ 'ਤੇ ਮਾਡਲਿੰਗ ਲਈ ਇੱਕ ਪ੍ਰੀ-ਪ੍ਰੋਸੈਸਰ ਵਜੋਂ ਵਰਤੀ ਜਾਂਦੀ ਹੈ, ਜਿੱਥੇ ਇਹ ਨਿਰਧਾਰਤ ਕਰਦੀ ਹੈ ਕਿ ਡਾਟਾ ਸੈਟ 'ਤੇ ਮਾਡਲਿੰਗ ਲਈ ਤਿਆਰ ਕਰਨ ਲਈ ਕਿਹੜੇ ਕਦਮ ਲਾਗੂ ਕੀਤੇ ਜਾਣੇ ਚਾਹੀਦੇ ਹਨ। ਇਸ ਸਥਿਤੀ ਵਿੱਚ, ਇੱਕ `workflow()` ਆਮ ਤੌਰ 'ਤੇ ਵਰਤੀ ਜਾਂਦੀ ਹੈ (ਜਿਵੇਂ ਕਿ ਅਸੀਂ ਪਹਿਲੇ ਪਾਠਾਂ ਵਿੱਚ ਵੇਖਿਆ ਹੈ) ਰੈਸਿਪੀ ਨੂੰ ਹੱਥੋਂ ਅਨੁਮਾਨ ਲਗਾਉਣ ਦੀ ਬਜਾਏ।\n",
">\n",
"> ਇਸ ਤਰ੍ਹਾਂ, ਤੁਸੀਂ ਆਮ ਤੌਰ 'ਤੇ **`prep()`** ਅਤੇ **`bake()`** ਰੈਸਿਪੀ ਦੀ ਲੋੜ ਨਹੀਂ ਹੁੰਦੀ ਜਦੋਂ ਤੁਸੀਂ tidymodels ਵਰਤਦੇ ਹੋ, ਪਰ ਇਹ ਤੁਹਾਡੇ ਟੂਲਕਿਟ ਵਿੱਚ ਮਦਦਗਾਰ ਫੰਕਸ਼ਨ ਹਨ ਇਹ ਪੱਕਾ ਕਰਨ ਲਈ ਕਿ ਰੈਸਿਪੀ ਉਹੀ ਕਰ ਰਹੇ ਹਨ ਜੋ ਤੁਸੀਂ ਉਮੀਦ ਕਰਦੇ ਹੋ, ਜਿਵੇਂ ਕਿ ਸਾਡੇ ਕੇਸ ਵਿੱਚ।\n",
">\n",
"> ਜਦੋਂ ਤੁਸੀਂ **`new_data = NULL`** ਨਾਲ ਇੱਕ ਤਿਆਰ ਕੀਤੀ ਰੈਸਿਪੀ ਨੂੰ **`bake()`** ਕਰਦੇ ਹੋ, ਤਾਂ ਤੁਹਾਨੂੰ ਉਹ ਡਾਟਾ ਵਾਪਸ ਮਿਲਦਾ ਹੈ ਜੋ ਤੁਸੀਂ ਰੈਸਿਪੀ ਨੂੰ ਨਿਰਧਾਰਤ ਕਰਦੇ ਸਮੇਂ ਦਿੱਤਾ ਸੀ, ਪਰ ਇਹ ਪ੍ਰੀ-ਪ੍ਰੋਸੈਸਿੰਗ ਕਦਮਾਂ ਵਿੱਚੋਂ ਗੁਜ਼ਰ ਚੁੱਕਾ ਹੁੰਦਾ ਹੈ।\n",
"\n",
"ਆਓ ਹੁਣ ਇਸ ਡਾਟਾ ਦੀ ਇੱਕ ਕਾਪੀ ਭਵਿੱਖ ਦੇ ਪਾਠਾਂ ਵਿੱਚ ਵਰਤਣ ਲਈ ਸੰਭਾਲੀਏ:\n"
],
"metadata": {
"id": "HEu80HZ8L7ae"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Save preprocessed data\r\n",
"write_csv(preprocessed_df, \"../../../data/cleaned_cuisines_R.csv\")"
],
"outputs": [],
"metadata": {
"id": "cBmCbIgrMOI6"
}
},
{
"cell_type": "markdown",
"source": [
"ਇਹ ਨਵਾਂ CSV ਹੁਣ ਮੂਲ ਡਾਟਾ ਫੋਲਡਰ ਵਿੱਚ ਮਿਲ ਸਕਦਾ ਹੈ।\n",
"\n",
"**🚀ਚੁਣੌਤੀ**\n",
"\n",
"ਇਸ ਪਾਠਕ੍ਰਮ ਵਿੱਚ ਕਈ ਦਿਲਚਸਪ ਡਾਟਾਸੈਟਸ ਸ਼ਾਮਲ ਹਨ। `data` ਫੋਲਡਰਾਂ ਵਿੱਚ ਖੋਜ ਕਰੋ ਅਤੇ ਵੇਖੋ ਕਿ ਕੀ ਕੋਈ ਡਾਟਾਸੈਟ ਦੋ-ਵਰਗੀ ਜਾਂ ਬਹੁ-ਵਰਗੀ ਵਰਗੀਕਰਨ ਲਈ ਉਚਿਤ ਹੈ? ਤੁਸੀਂ ਇਸ ਡਾਟਾਸੈਟ ਤੋਂ ਕਿਹੜੇ ਸਵਾਲ ਪੁੱਛੋਗੇ?\n",
"\n",
"## [**ਪਾਠ ਬਾਅਦ ਕਵੀਜ਼**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/20/)\n",
"\n",
"## **ਸਮੀਖਿਆ ਅਤੇ ਸਵੈ ਅਧਿਐਨ**\n",
"\n",
"- [ਪੈਕੇਜ themis](https://github.com/tidymodels/themis) ਦੇਖੋ। ਅਸਮਤਲ ਡਾਟਾ ਨਾਲ ਨਿਪਟਣ ਲਈ ਹੋਰ ਕਿਹੜੀਆਂ ਤਕਨੀਕਾਂ ਵਰਤੀ ਜਾ ਸਕਦੀਆਂ ਹਨ?\n",
"\n",
"- Tidy models [ਸੰਬੰਧਿਤ ਵੈਬਸਾਈਟ](https://www.tidymodels.org/start/)।\n",
"\n",
"- H. Wickham ਅਤੇ G. Grolemund, [*R for Data Science: Visualize, Model, Transform, Tidy, and Import Data*](https://r4ds.had.co.nz/)।\n",
"\n",
"#### ਧੰਨਵਾਦ:\n",
"\n",
"[`Allison Horst`](https://twitter.com/allison_horst/) ਨੂੰ ਸ਼ਾਨਦਾਰ ਚਿੱਤਰਕਲਾਵਾਂ ਬਣਾਉਣ ਲਈ ਜੋ R ਨੂੰ ਹੋਰ ਸਵਾਗਤਯੋਗ ਅਤੇ ਦਿਲਚਸਪ ਬਣਾਉਂਦੀਆਂ ਹਨ। ਹੋਰ ਚਿੱਤਰਕਲਾਵਾਂ ਉਸ ਦੇ [ਗੈਲਰੀ](https://www.google.com/url?q=https://github.com/allisonhorst/stats-illustrations&sa=D&source=editors&ust=1626380772530000&usg=AOvVaw3zcfyCizFQZpkSLzxiiQEM) 'ਤੇ ਲੱਭੋ।\n",
"\n",
"[Cassie Breviu](https://www.twitter.com/cassieview) ਅਤੇ [Jen Looper](https://www.twitter.com/jenlooper) ਨੂੰ ਇਸ ਮੋਡੀਊਲ ਦੇ ਮੂਲ Python ਸੰਸਕਰਣ ਬਣਾਉਣ ਲਈ ♥️\n",
"\n",
"<p >\n",
" <img src=\"../../images/r_learners_sm.jpeg\"\n",
" width=\"600\"/>\n",
" <figcaption>@allison_horst ਦੁਆਰਾ ਕਲਾ</figcaption>\n"
],
"metadata": {
"id": "WQs5621pMGwf"
}
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**ਅਸਵੀਕਤੀ**: \nਇਹ ਦਸਤਾਵੇਜ਼ AI ਅਨੁਵਾਦ ਸੇਵਾ [Co-op Translator](https://github.com/Azure/co-op-translator) ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਅਨੁਵਾਦ ਕੀਤਾ ਗਿਆ ਹੈ। ਜਦੋਂ ਕਿ ਅਸੀਂ ਸਹੀਤਾ ਲਈ ਯਤਨਸ਼ੀਲ ਹਾਂ, ਕਿਰਪਾ ਕਰਕੇ ਧਿਆਨ ਦਿਓ ਕਿ ਸਵੈਚਾਲਿਤ ਅਨੁਵਾਦਾਂ ਵਿੱਚ ਗਲਤੀਆਂ ਜਾਂ ਅਸੁਚਤਤਾਵਾਂ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਮੂਲ ਦਸਤਾਵੇਜ਼ ਨੂੰ ਇਸਦੀ ਮੂਲ ਭਾਸ਼ਾ ਵਿੱਚ ਅਧਿਕਾਰਤ ਸਰੋਤ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਮਹੱਤਵਪੂਰਨ ਜਾਣਕਾਰੀ ਲਈ, ਪੇਸ਼ੇਵਰ ਮਨੁੱਖੀ ਅਨੁਵਾਦ ਦੀ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਸ ਅਨੁਵਾਦ ਦੀ ਵਰਤੋਂ ਤੋਂ ਪੈਦਾ ਹੋਣ ਵਾਲੇ ਕਿਸੇ ਵੀ ਗਲਤਫਹਿਮੀ ਜਾਂ ਗਲਤ ਵਿਆਖਿਆ ਲਈ ਅਸੀਂ ਜ਼ਿੰਮੇਵਾਰ ਨਹੀਂ ਹਾਂ।\n"
]
}
]
}