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.
299 lines
36 KiB
299 lines
36 KiB
<!--
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
{
|
|
"original_hash": "2f88fbc741d792890ff2f1430fe0dae0",
|
|
"translation_date": "2025-08-29T16:40:17+00:00",
|
|
"source_file": "2-Regression/3-Linear/README.md",
|
|
"language_code": "pa"
|
|
}
|
|
-->
|
|
# ਸਕਾਈਟ-ਲਰਨ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਰਿਗ੍ਰੈਸ਼ਨ ਮਾਡਲ ਬਣਾਓ: ਰਿਗ੍ਰੈਸ਼ਨ ਦੇ ਚਾਰ ਤਰੀਕੇ
|
|
|
|

|
|
> ਇਨਫੋਗ੍ਰਾਫਿਕ [ਦਸਾਨੀ ਮਾਡਿਪਾਲੀ](https://twitter.com/dasani_decoded) ਦੁਆਰਾ
|
|
|
|
## [ਪ੍ਰੀ-ਲੈਕਚਰ ਕਵਿਜ਼](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/13/)
|
|
|
|
> ### [ਇਹ ਪਾਠ ਰ ਵਿੱਚ ਉਪਲਬਧ ਹੈ!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
|
|
|
|
### ਤਾਰਫ਼
|
|
|
|
ਅਜੇ ਤੱਕ ਤੁਸੀਂ ਰਿਗ੍ਰੈਸ਼ਨ ਦੇ ਬਾਰੇ ਸਮਝਿਆ ਹੈ ਕਿ ਇਹ ਕੀ ਹੈ, ਕਦੂ ਦੀ ਕੀਮਤਾਂ ਦੇ ਡਾਟਾਸੈੱਟ ਤੋਂ ਇਕੱਠੇ ਕੀਤੇ ਨਮੂਨਾ ਡਾਟਾ ਦੀ ਵਰਤੋਂ ਕਰਕੇ, ਜੋ ਕਿ ਅਸੀਂ ਇਸ ਪਾਠ ਵਿੱਚ ਵਰਤਾਂਗੇ। ਤੁਸੀਂ ਇਸਨੂੰ ਮੈਟਪਲਾਟਲਿਬ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਵਿਜ਼ੁਅਲਾਈਜ਼ ਵੀ ਕੀਤਾ ਹੈ।
|
|
|
|
ਹੁਣ ਤੁਸੀਂ ਮਸ਼ੀਨ ਲਰਨਿੰਗ ਲਈ ਰਿਗ੍ਰੈਸ਼ਨ ਵਿੱਚ ਹੋਰ ਡੂੰਘਾਈ ਵਿੱਚ ਜਾਣ ਲਈ ਤਿਆਰ ਹੋ। ਜਦੋਂ ਕਿ ਵਿਜ਼ੁਅਲਾਈਜ਼ੇਸ਼ਨ ਡਾਟਾ ਨੂੰ ਸਮਝਣ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ, ਮਸ਼ੀਨ ਲਰਨਿੰਗ ਦੀ ਅਸਲ ਤਾਕਤ _ਮਾਡਲਾਂ ਨੂੰ ਟ੍ਰੇਨ ਕਰਨ_ ਵਿੱਚ ਹੈ। ਮਾਡਲ ਪੁਰਾਣੇ ਡਾਟਾ 'ਤੇ ਟ੍ਰੇਨ ਕੀਤੇ ਜਾਂਦੇ ਹਨ ਤਾਂ ਜੋ ਡਾਟਾ ਦੀ ਨਿਰਭਰਤਾ ਨੂੰ ਸਵੈ-ਚਾਲਤ ਤਰੀਕੇ ਨਾਲ ਕੈਪਚਰ ਕੀਤਾ ਜਾ ਸਕੇ, ਅਤੇ ਇਹ ਤੁਹਾਨੂੰ ਨਵੇਂ ਡਾਟਾ ਲਈ ਨਤੀਜੇ ਦੀ ਭਵਿੱਖਵਾਣੀ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦੇ ਹਨ, ਜਿਸਨੂੰ ਮਾਡਲ ਨੇ ਪਹਿਲਾਂ ਨਹੀਂ ਦੇਖਿਆ।
|
|
|
|
ਇਸ ਪਾਠ ਵਿੱਚ, ਤੁਸੀਂ ਰਿਗ੍ਰੈਸ਼ਨ ਦੇ ਦੋ ਕਿਸਮਾਂ ਬਾਰੇ ਹੋਰ ਜਾਣੋਗੇ: _ਮੂਲ ਲਿਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ_ ਅਤੇ _ਪੋਲੀਨੋਮਿਅਲ ਰਿਗ੍ਰੈਸ਼ਨ_, ਨਾਲ ਹੀ ਇਨ੍ਹਾਂ ਤਕਨੀਕਾਂ ਦੇ ਅਧਾਰਤ ਕੁਝ ਗਣਿਤ। ਇਹ ਮਾਡਲ ਸਾਨੂੰ ਵੱਖ-ਵੱਖ ਇਨਪੁਟ ਡਾਟਾ ਦੇ ਆਧਾਰ 'ਤੇ ਕਦੂ ਦੀ ਕੀਮਤਾਂ ਦੀ ਭਵਿੱਖਵਾਣੀ ਕਰਨ ਦੀ ਆਗਿਆ ਦੇਣਗੇ।
|
|
|
|
[](https://youtu.be/CRxFT8oTDMg "ਮਸ਼ੀਨ ਲਰਨਿੰਗ ਲਈ ਬੇਸਿਕ ਲਿਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਦੀ ਸਮਝ")
|
|
|
|
> 🎥 ਉਪਰੋਕਤ ਚਿੱਤਰ 'ਤੇ ਕਲਿਕ ਕਰੋ ਲਿਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਦੇ ਇੱਕ ਛੋਟੇ ਵੀਡੀਓ ਝਲਕ ਲਈ।
|
|
|
|
> ਇਸ ਪਾਠਕ੍ਰਮ ਵਿੱਚ, ਅਸੀਂ ਗਣਿਤ ਦੇ ਘੱਟ ਜ਼ਿਆਦਾ ਗਿਆਨ ਨੂੰ ਧਿਆਨ ਵਿੱਚ ਰੱਖਦੇ ਹਾਂ ਅਤੇ ਵਿਦਿਆਰਥੀਆਂ ਲਈ ਇਸਨੂੰ ਸਹਿਜ ਬਣਾਉਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦੇ ਹਾਂ ਜੋ ਹੋਰ ਖੇਤਰਾਂ ਤੋਂ ਆ ਰਹੇ ਹਨ। ਇਸ ਲਈ, ਨੋਟਸ, 🧮 ਕਾਲਆਉਟਸ, ਡਾਇਗ੍ਰਾਮ, ਅਤੇ ਹੋਰ ਸਿੱਖਣ ਦੇ ਸਾਧਨਾਂ 'ਤੇ ਧਿਆਨ ਦਿਓ ਜੋ ਸਮਝਣ ਵਿੱਚ ਮਦਦ ਕਰਦੇ ਹਨ।
|
|
|
|
### ਪੂਰਵ-ਆਵਸ਼ਕਤਾ
|
|
|
|
ਤੁਹਾਨੂੰ ਹੁਣ ਤੱਕ ਕਦੂ ਦੇ ਡਾਟਾ ਦੀ ਬਣਤਰ ਨਾਲ ਜਾਣੂ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ ਜਿਸਨੂੰ ਅਸੀਂ ਜਾਂਚ ਰਹੇ ਹਾਂ। ਤੁਸੀਂ ਇਸਨੂੰ ਇਸ ਪਾਠ ਦੇ _notebook.ipynb_ ਫਾਈਲ ਵਿੱਚ ਪ੍ਰੀਲੋਡ ਅਤੇ ਪ੍ਰੀ-ਕਲੀਨ ਕੀਤਾ ਹੋਇਆ ਪਾਓਗੇ। ਫਾਈਲ ਵਿੱਚ, ਕਦੂ ਦੀ ਕੀਮਤ ਪ੍ਰਤੀ ਬੁਸ਼ਲ ਇੱਕ ਨਵੇਂ ਡਾਟਾ ਫਰੇਮ ਵਿੱਚ ਦਿਖਾਈ ਗਈ ਹੈ। ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਤੁਸੀਂ ਇਹ ਨੋਟਬੁੱਕਸ ਨੂੰ ਵਿਜ਼ੁਅਲ ਸਟੂਡੀਓ ਕੋਡ ਵਿੱਚ ਕਰਨਲ ਵਿੱਚ ਚਲਾ ਸਕਦੇ ਹੋ।
|
|
|
|
### ਤਿਆਰੀ
|
|
|
|
ਇਹ ਯਾਦ ਦਿਵਾਉਣ ਲਈ ਕਿ ਤੁਸੀਂ ਇਹ ਡਾਟਾ ਲੋਡ ਕਰ ਰਹੇ ਹੋ ਤਾਂ ਜੋ ਇਸ ਤੋਂ ਸਵਾਲ ਪੁੱਛ ਸਕੋ।
|
|
|
|
- ਕਦੂ ਖਰੀਦਣ ਦਾ ਸਭ ਤੋਂ ਵਧੀਆ ਸਮਾਂ ਕਦੋਂ ਹੈ?
|
|
- ਮਿਨੀਏਚਰ ਕਦੂ ਦੇ ਕੇਸ ਦੀ ਕੀਮਤ ਕੀ ਹੋ ਸਕਦੀ ਹੈ?
|
|
- ਕੀ ਮੈਂ ਇਹਨਾਂ ਨੂੰ ਅੱਧੇ-ਬੁਸ਼ਲ ਬਾਸਕਟਾਂ ਵਿੱਚ ਖਰੀਦਣਾ ਚਾਹੀਦਾ ਹੈ ਜਾਂ 1 1/9 ਬੁਸ਼ਲ ਬਾਕਸ ਦੁਆਰਾ?
|
|
|
|
ਆਓ ਇਸ ਡਾਟਾ ਵਿੱਚ ਹੋਰ ਖੋਜ ਕਰੀਏ।
|
|
|
|
ਪਿਛਲੇ ਪਾਠ ਵਿੱਚ, ਤੁਸੀਂ ਇੱਕ ਪਾਂਡਾਸ ਡਾਟਾ ਫਰੇਮ ਬਣਾਇਆ ਅਤੇ ਇਸਨੂੰ ਮੂਲ ਡਾਟਾਸੈੱਟ ਦੇ ਹਿੱਸੇ ਨਾਲ ਭਰਿਆ, ਕੀਮਤਾਂ ਨੂੰ ਬੁਸ਼ਲ ਦੁਆਰਾ ਮਿਆਰੀਕ੍ਰਿਤ ਕੀਤਾ। ਇਸਨੂੰ ਕਰਨ ਦੁਆਰਾ, ਹਾਲਾਂਕਿ, ਤੁਸੀਂ ਲਗਭਗ 400 ਡਾਟਾਪੌਇੰਟਸ ਹੀ ਇਕੱਠੇ ਕਰ ਸਕੇ ਅਤੇ ਸਿਰਫ਼ ਪਤਝੜ ਦੇ ਮਹੀਨਿਆਂ ਲਈ।
|
|
|
|
ਇਸ ਪਾਠ ਦੇ ਸਾਥੀ ਨੋਟਬੁੱਕ ਵਿੱਚ ਪ੍ਰੀਲੋਡ ਡਾਟਾ 'ਤੇ ਨਜ਼ਰ ਮਾਰੋ। ਡਾਟਾ ਪ੍ਰੀਲੋਡ ਕੀਤਾ ਗਿਆ ਹੈ ਅਤੇ ਇੱਕ ਸ਼ੁਰੂਆਤੀ ਸਕੈਟਰਪਲਾਟ ਮਹੀਨੇ ਦੇ ਡਾਟਾ ਨੂੰ ਦਿਖਾਉਣ ਲਈ ਚਾਰਟ ਕੀਤਾ ਗਿਆ ਹੈ। ਸ਼ਾਇਦ ਅਸੀਂ ਡਾਟਾ ਦੀ ਕੁਦਰਤ ਬਾਰੇ ਹੋਰ ਵੇਰਵਾ ਪ੍ਰਾਪਤ ਕਰ ਸਕਦੇ ਹਾਂ ਇਸਨੂੰ ਹੋਰ ਸਾਫ਼ ਕਰਕੇ।
|
|
|
|
## ਲਿਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਲਾਈਨ
|
|
|
|
ਜਿਵੇਂ ਤੁਸੀਂ ਪਾਠ 1 ਵਿੱਚ ਸਿੱਖਿਆ, ਲਿਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਅਭਿਆਸ ਦਾ ਉਦੇਸ਼ ਇੱਕ ਲਾਈਨ ਪਲਾਟ ਕਰਨ ਦੇ ਯੋਗ ਹੋਣਾ ਹੈ:
|
|
|
|
- **ਵੈਰੀਏਬਲ ਸੰਬੰਧ ਦਿਖਾਉਣਾ**। ਵੈਰੀਏਬਲਾਂ ਦੇ ਵਿਚਕਾਰ ਸੰਬੰਧ ਦਿਖਾਉਣਾ
|
|
- **ਭਵਿੱਖਵਾਣੀ ਕਰਨਾ**। ਨਵਾਂ ਡਾਟਾਪੌਇੰਟ ਕਿੱਥੇ ਲਾਈਨ ਦੇ ਸੰਬੰਧ ਵਿੱਚ ਆਵੇਗਾ ਇਸ ਦੀ ਸਹੀ ਭਵਿੱਖਵਾਣੀ ਕਰਨਾ
|
|
|
|
ਇਹ ਆਮ ਤੌਰ 'ਤੇ **ਲੀਸਟ-ਸਕਵੇਅਰ ਰਿਗ੍ਰੈਸ਼ਨ** ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇਸ ਕਿਸਮ ਦੀ ਲਾਈਨ ਖਿੱਚਣ ਲਈ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। 'ਲੀਸਟ-ਸਕਵੇਅਰ' ਸ਼ਬਦ ਦਾ ਮਤਲਬ ਹੈ ਕਿ ਰਿਗ੍ਰੈਸ਼ਨ ਲਾਈਨ ਦੇ ਆਲੇ-ਦੁਆਲੇ ਸਾਰੇ ਡਾਟਾਪੌਇੰਟਸ ਨੂੰ ਸਕਵੇਅਰ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਅਤੇ ਫਿਰ ਜੋੜਿਆ ਜਾਂਦਾ ਹੈ। ਆਦਰਸ਼ ਤੌਰ 'ਤੇ, ਉਹ ਅੰਤਮ ਜੋੜ ਜਿੰਨਾ ਛੋਟਾ ਹੋ ਸਕੇ, ਕਿਉਂਕਿ ਅਸੀਂ ਘੱਟ ਗਲਤੀਆਂ ਜਾਂ `ਲੀਸਟ-ਸਕਵੇਅਰ` ਚਾਹੁੰਦੇ ਹਾਂ।
|
|
|
|
ਅਸੀਂ ਇਹ ਇਸ ਲਈ ਕਰਦੇ ਹਾਂ ਕਿਉਂਕਿ ਅਸੀਂ ਇੱਕ ਲਾਈਨ ਮਾਡਲ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹਾਂ ਜਿਸਦਾ ਸਾਰੇ ਡਾਟਾਪੌਇੰਟਸ ਤੋਂ ਕੁੱਲ ਦੂਰੀ ਘੱਟ ਹੋਵੇ। ਅਸੀਂ ਸ਼ਰਤਾਂ ਨੂੰ ਜੋੜਨ ਤੋਂ ਪਹਿਲਾਂ ਸਕਵੇਅਰ ਕਰਦੇ ਹਾਂ ਕਿਉਂਕਿ ਅਸੀਂ ਇਸਦੇ ਮਾਪੇ 'ਤੇ ਧਿਆਨ ਦੇ ਰਹੇ ਹਾਂ ਨਾ ਕਿ ਇਸਦੇ ਦਿਸ਼ਾ 'ਤੇ।
|
|
|
|
> **🧮 ਮੈਨੂੰ ਗਣਿਤ ਦਿਖਾਓ**
|
|
>
|
|
> ਇਹ ਲਾਈਨ, ਜਿਸਨੂੰ _ਲਾਈਨ ਆਫ ਬੈਸਟ ਫਿਟ_ ਕਿਹਾ ਜਾਂਦਾ ਹੈ, [ਇਕ ਸਮੀਕਰਨ](https://en.wikipedia.org/wiki/Simple_linear_regression) ਦੁਆਰਾ ਪ੍ਰਗਟ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ:
|
|
>
|
|
> ```
|
|
> Y = a + bX
|
|
> ```
|
|
>
|
|
> `X` 'ਵਿਆਖਿਆਤਮਕ ਵੈਰੀਏਬਲ' ਹੈ। `Y` 'ਨਿਰਭਰ ਵੈਰੀਏਬਲ' ਹੈ। ਲਾਈਨ ਦਾ ਢਲਾਨ `b` ਹੈ ਅਤੇ `a` y-ਇੰਟਰਸੈਪਟ ਹੈ, ਜੋ `X = 0` ਹੋਣ 'ਤੇ `Y` ਦੀ ਕੀਮਤ ਨੂੰ ਦਰਸਾਉਂਦਾ ਹੈ।
|
|
>
|
|
>
|
|
>
|
|
> ਪਹਿਲਾਂ, ਢਲਾਨ `b` ਦੀ ਗਣਨਾ ਕਰੋ। ਇਨਫੋਗ੍ਰਾਫਿਕ [ਜੈਨ ਲੂਪਰ](https://twitter.com/jenlooper) ਦੁਆਰਾ
|
|
>
|
|
> ਦੂਜੇ ਸ਼ਬਦਾਂ ਵਿੱਚ, ਅਤੇ ਕਦੂ ਡਾਟਾ ਦੇ ਮੂਲ ਸਵਾਲ ਨੂੰ ਸੰਦਰਭਿਤ ਕਰਦੇ ਹੋਏ: "ਮਹੀਨੇ ਦੁਆਰਾ ਪ੍ਰਤੀ ਬੁਸ਼ਲ ਕਦੂ ਦੀ ਕੀਮਤ ਦੀ ਭਵਿੱਖਵਾਣੀ ਕਰੋ", `X` ਕੀਮਤ ਨੂੰ ਦਰਸਾਉਂਦਾ ਹੈ ਅਤੇ `Y` ਵਿਕਰੀ ਦੇ ਮਹੀਨੇ ਨੂੰ ਦਰਸਾਉਂਦਾ ਹੈ।
|
|
>
|
|
>
|
|
>
|
|
> `Y` ਦੀ ਕੀਮਤ ਦੀ ਗਣਨਾ ਕਰੋ। ਜੇ ਤੁਸੀਂ ਲਗਭਗ $4 ਦੇ ਰਹੇ ਹੋ, ਤਾਂ ਇਹ ਅਪ੍ਰੈਲ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ! ਇਨਫੋਗ੍ਰਾਫਿਕ [ਜੈਨ ਲੂਪਰ](https://twitter.com/jenlooper) ਦੁਆਰਾ
|
|
>
|
|
> ਲਾਈਨ ਦੀ ਗਣਨਾ ਕਰਨ ਵਾਲਾ ਗਣਿਤ ਲਾਈਨ ਦੇ ਢਲਾਨ ਨੂੰ ਦਰਸਾਉਣਾ ਚਾਹੀਦਾ ਹੈ, ਜੋ y-ਇੰਟਰਸੈਪਟ 'ਤੇ ਵੀ ਨਿਰਭਰ ਹੈ, ਜਾਂ ਜਿੱਥੇ `Y` ਸਥਿਤ ਹੈ ਜਦੋਂ `X = 0`।
|
|
>
|
|
> ਤੁਸੀਂ [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) ਵੈਬਸਾਈਟ 'ਤੇ ਇਨ੍ਹਾਂ ਮੁੱਲਾਂ ਦੀ ਗਣਨਾ ਕਰਨ ਦੀ ਵਿਧੀ ਦਾ ਅਵਲੋਕਨ ਕਰ ਸਕਦੇ ਹੋ। [ਇਹ ਲੀਸਟ-ਸਕਵੇਅਰ ਕੈਲਕੂਲੇਟਰ](https://www.mathsisfun.com/data/least-squares-calculator.html) 'ਤੇ ਜਾਓ ਅਤੇ ਦੇਖੋ ਕਿ ਨੰਬਰਾਂ ਦੇ ਮੁੱਲ ਲਾਈਨ ਨੂੰ ਕਿਵੇਂ ਪ੍ਰਭਾਵਿਤ ਕਰਦੇ ਹਨ।
|
|
|
|
## ਸੰਬੰਧਤਾ
|
|
|
|
ਇੱਕ ਹੋਰ ਸ਼ਬਦ ਨੂੰ ਸਮਝਣਾ ਹੈ **ਸੰਬੰਧਤਾ ਗੁਣਾਂਕ** ਦਿੱਤੇ X ਅਤੇ Y ਵੈਰੀਏਬਲਾਂ ਦੇ ਵਿਚਕਾਰ। ਇੱਕ ਸਕੈਟਰਪਲਾਟ ਦੀ ਵਰਤੋਂ ਕਰਕੇ, ਤੁਸੀਂ ਇਸ ਗੁਣਾਂਕ ਨੂੰ ਤੇਜ਼ੀ ਨਾਲ ਵਿਜ਼ੁਅਲਾਈਜ਼ ਕਰ ਸਕਦੇ ਹੋ। ਇੱਕ ਪਲਾਟ ਜਿਸ ਵਿੱਚ ਡਾਟਾਪੌਇੰਟਸ ਇੱਕ ਸਾਫ਼ ਲਾਈਨ ਵਿੱਚ ਵਿਖਰੇ ਹੋਏ ਹਨ ਉੱਚ ਸੰਬੰਧਤਾ ਰੱਖਦੇ ਹਨ, ਪਰ ਇੱਕ ਪਲਾਟ ਜਿਸ ਵਿੱਚ ਡਾਟਾਪੌਇੰਟਸ X ਅਤੇ Y ਦੇ ਵਿਚਕਾਰ ਹਰ ਜਗ੍ਹਾ ਵਿਖਰੇ ਹੋਏ ਹਨ ਘੱਟ ਸੰਬੰਧਤਾ ਰੱਖਦੇ ਹਨ।
|
|
|
|
ਇੱਕ ਚੰਗਾ ਲਿਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਮਾਡਲ ਉਹ ਹੋਵੇਗਾ ਜਿਸ ਵਿੱਚ ਲੀਸਟ-ਸਕਵੇਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਵਿਧੀ ਨਾਲ ਰਿਗ੍ਰੈਸ਼ਨ ਲਾਈਨ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਉੱਚ (1 ਦੇ ਨੇੜੇ 0 ਦੇ ਨਾਲੋਂ) ਸੰਬੰਧਤਾ ਗੁਣਾਂਕ ਹੋਵੇ।
|
|
|
|
✅ ਇਸ ਪਾਠ ਦੇ ਸਾਥੀ ਨੋਟਬੁੱਕ ਨੂੰ ਚਲਾਓ ਅਤੇ ਮਹੀਨੇ ਤੋਂ ਕੀਮਤ ਸਕੈਟਰਪਲਾਟ ਨੂੰ ਦੇਖੋ। ਕੀ ਕਦੂ ਵਿਕਰੀ ਲਈ ਮਹੀਨੇ ਤੋਂ ਕੀਮਤ ਨੂੰ ਜੋੜਨ ਵਾਲਾ ਡਾਟਾ ਤੁਹਾਡੇ ਵਿਜ਼ੁਅਲ ਵਿਵੇਚਨ ਦੇ ਅਨੁਸਾਰ ਉੱਚ ਜਾਂ ਘੱਟ ਸੰਬੰਧਤਾ ਰੱਖਦਾ ਹੈ? ਕੀ ਇਹ ਬਦਲ ਜਾਂਦਾ ਹੈ ਜੇ ਤੁਸੀਂ `ਮਹੀਨੇ` ਦੀ ਬਜਾਏ ਹੋਰ ਸੁਖਮ ਮਾਪ ਵਰਤਦੇ ਹੋ, ਜਿਵੇਂ ਕਿ *ਸਾਲ ਦਾ ਦਿਨ* (ਅਰਥਾਤ ਸਾਲ ਦੀ ਸ਼ੁਰੂਆਤ ਤੋਂ ਦਿਨਾਂ ਦੀ ਗਿਣਤੀ)?
|
|
|
|
ਕੋਡ ਵਿੱਚ ਹੇਠਾਂ, ਅਸੀਂ ਮੰਨਦੇ ਹਾਂ ਕਿ ਅਸੀਂ ਡਾਟਾ ਸਾਫ਼ ਕਰ ਲਿਆ ਹੈ, ਅਤੇ ਇੱਕ ਡਾਟਾ ਫਰੇਮ ਪ੍ਰਾਪਤ ਕੀਤਾ ਹੈ ਜਿਸਨੂੰ `new_pumpkins` ਕਿਹਾ ਜਾਂਦਾ ਹੈ, ਹੇਠਾਂ ਦਿੱਤੇ ਸਮਾਨ:
|
|
|
|
ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Price
|
|
---|-------|-----------|---------|------|---------|-----------|------------|-------
|
|
70 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364
|
|
71 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636
|
|
72 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636
|
|
73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 17.0 | 17.0 | 15.454545
|
|
74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364
|
|
|
|
> ਡਾਟਾ ਸਾਫ਼ ਕਰਨ ਦਾ ਕੋਡ [`notebook.ipynb`](notebook.ipynb) ਵਿੱਚ ਉਪਲਬਧ ਹੈ। ਅਸੀਂ ਪਿਛਲੇ ਪਾਠ ਵਿੱਚ ਇੱਕੋ ਜਿਹੇ ਸਾਫ਼ ਕਰਨ ਦੇ ਕਦਮ ਕੀਤੇ ਹਨ, ਅਤੇ ਹੇਠਾਂ ਦਿੱਤੇ ਹਾਵਾਲੇ ਦੀ ਵਰਤੋਂ ਕਰਕੇ `DayOfYear` ਕਾਲਮ ਦੀ ਗਣਨਾ ਕੀਤੀ ਹੈ:
|
|
|
|
```python
|
|
day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days)
|
|
```
|
|
|
|
ਹੁਣ ਜਦੋਂ ਤੁਹਾਨੂੰ ਲਿਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਦੇ ਗਣਿਤ ਦੀ ਸਮਝ ਹੈ, ਆਓ ਇੱਕ ਰਿਗ੍ਰੈਸ਼ਨ ਮਾਡਲ ਬਣਾਈਏ ਤਾਂ ਜੋ ਇਹ ਪਤਾ ਲਗਾਇਆ ਜਾ ਸਕੇ ਕਿ ਕਦੂ ਦੇ ਪੈਕੇਜਾਂ ਵਿੱਚੋਂ ਕਿਹੜਾ ਪੈਕੇਜ ਸਭ ਤੋਂ ਵਧੀਆ ਕੀਮਤਾਂ ਰੱਖਦਾ ਹੈ। ਕੋਈ ਵਿਅਕਤੀ ਜੋ ਛੁੱਟੀਆਂ ਦੇ ਕਦੂ ਪੈਚ ਲਈ ਕਦੂ ਖਰੀਦ ਰਿਹਾ ਹੈ, ਇਹ ਜਾਣਕਾਰੀ ਚਾਹੁੰਦਾ ਹੋਵੇਗਾ ਤਾਂ ਜੋ ਕਦੂ ਪੈਕੇਜਾਂ ਦੀ ਖਰੀਦ ਨੂੰ ਅਨੁਕੂਲਿਤ ਕੀਤਾ ਜਾ ਸਕੇ।
|
|
|
|
## ਸੰਬੰਧਤਾ ਦੀ ਖੋਜ
|
|
|
|
[](https://youtu.be/uoRq-lW2eQo "ਮਸ਼ੀਨ ਲਰਨਿੰਗ ਲਈ ਸੰਬੰਧਤਾ ਦੀ ਖੋਜ: ਲਿਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਦੀ ਕੁੰਜੀ")
|
|
|
|
> 🎥 ਉਪਰੋਕਤ ਚਿੱਤਰ 'ਤੇ ਕਲਿਕ ਕਰੋ ਸੰਬੰਧਤਾ ਦੇ ਇੱਕ ਛੋਟੇ ਵੀਡੀਓ ਝਲਕ ਲਈ।
|
|
|
|
ਪਿਛਲੇ ਪਾਠ ਤੋਂ ਤੁਸੀਂ ਸ਼ਾਇਦ ਦੇਖਿਆ ਹੈ ਕਿ ਵੱਖ-ਵੱਖ ਮਹੀਨਿਆਂ ਲਈ ਔਸਤ ਕੀਮਤ ਇਸ ਤਰ੍ਹਾਂ ਲੱਗਦੀ ਹੈ:
|
|
|
|
<img alt="ਮਹੀਨੇ ਦੁਆਰਾ ਔਸਤ ਕੀਮਤ" src="../2-Data/images/barchart.png" width="50%"/>
|
|
|
|
ਇਹ ਸੁਝਾਅ ਦਿੰਦਾ ਹੈ ਕਿ ਕੁਝ ਸੰਬੰਧਤਾ ਹੋ ਸਕਦੀ ਹੈ, ਅਤੇ ਅਸੀਂ `Month` ਅਤੇ `Price` ਦੇ ਵਿਚਕਾਰ ਜਾਂ `DayOfYear` ਅਤੇ `Price` ਦੇ ਵਿਚਕਾਰ ਸੰਬੰਧਤਾ ਦੀ ਭਵਿੱਖਵਾਣੀ ਕਰਨ ਲਈ ਲਿਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਮਾਡਲ ਟ੍ਰੇਨ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਸਕਦੇ ਹਾਂ। ਹੇਠਾਂ ਦਿੱਤਾ ਸਕੈਟਰਪਲਾਟ ਦਿਖਾਉਂਦਾ ਹੈ ਕਿ ਦੂਜੇ ਸੰਬੰਧ ਦਾ ਰਿਸ਼ਤਾ ਕਿਵੇਂ ਹੈ:
|
|
|
|
<img alt="ਸਕੈਟਰਪਲਾਟ: ਕੀਮਤ ਵਸ. ਸਾਲ ਦਾ ਦਿਨ" src="images/scatter-dayofyear.png" width="50%" />
|
|
|
|
ਆਓ `corr` ਫੰਕਸ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਦੇਖੀਏ ਕਿ ਕੀ ਸੰਬੰਧਤਾ ਹੈ:
|
|
|
|
```python
|
|
print(new_pumpkins['Month'].corr(new_pumpkins['Price']))
|
|
print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price']))
|
|
```
|
|
|
|
ਲੱਗਦਾ ਹੈ ਕਿ ਸੰਬੰਧਤਾ ਬਹੁਤ ਘੱਟ ਹੈ, `Month` ਦੁਆਰਾ -0.15 ਅਤੇ `DayOfMonth` ਦੁਆਰਾ -0.17, ਪਰ ਹੋਰ ਮਹੱਤਵਪੂਰਨ ਸੰਬੰਧ ਹੋ ਸਕਦਾ ਹੈ। ਲੱਗਦਾ ਹੈ ਕਿ ਵੱਖ-ਵੱਖ ਕਦੂ ਦੀਆਂ ਕਿਸਮਾਂ ਦੇ ਸੰਬੰਧਿਤ ਕੀਮਤਾਂ ਦੇ ਵੱਖ-ਵੱਖ ਕਲਸਟਰ ਹਨ। ਇਸ ਧਾਰਨਾ ਦੀ ਪੁਸ਼ਟੀ ਕਰਨ ਲਈ, ਆਓ ਹਰ ਕਦੂ ਸ਼੍ਰੇਣੀ ਨੂੰ ਵੱਖ-ਵ
|
|
ਸਾਡੀ ਗਲਤੀ ਲਗਭਗ 2 ਪਾਇੰਟਾਂ ਦੇ ਆਸਪਾਸ ਹੈ, ਜੋ ਕਿ ~17% ਹੈ। ਇਹ ਬਹੁਤ ਵਧੀਆ ਨਹੀਂ ਹੈ। ਮਾਡਲ ਦੀ ਗੁਣਵੱਤਾ ਦਾ ਇੱਕ ਹੋਰ ਸੂਚਕ **coefficient of determination** ਹੈ, ਜਿਸਨੂੰ ਇਸ ਤਰ੍ਹਾਂ ਪ੍ਰਾਪਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ:
|
|
|
|
```python
|
|
score = lin_reg.score(X_train,y_train)
|
|
print('Model determination: ', score)
|
|
```
|
|
ਜੇਕਰ ਮੁੱਲ 0 ਹੈ, ਤਾਂ ਇਸਦਾ ਮਤਲਬ ਹੈ ਕਿ ਮਾਡਲ ਇਨਪੁਟ ਡਾਟਾ ਨੂੰ ਧਿਆਨ ਵਿੱਚ ਨਹੀਂ ਰੱਖਦਾ ਅਤੇ *ਸਭ ਤੋਂ ਖਰਾਬ ਰੇਖੀਅਤ ਪੇਸ਼ਕਰਤਾ* ਵਜੋਂ ਕੰਮ ਕਰਦਾ ਹੈ, ਜੋ ਸਿਰਫ਼ ਨਤੀਜੇ ਦਾ ਔਸਤ ਮੁੱਲ ਹੈ। ਮੁੱਲ 1 ਦਾ ਮਤਲਬ ਹੈ ਕਿ ਅਸੀਂ ਸਾਰੇ ਉਮੀਦਵਾਰ ਨਤੀਜਿਆਂ ਦੀ ਪੂਰੀ ਤਰ੍ਹਾਂ ਪੇਸ਼ਕਰੀ ਕਰ ਸਕਦੇ ਹਾਂ। ਸਾਡੇ ਕੇਸ ਵਿੱਚ, coefficient ਲਗਭਗ 0.06 ਹੈ, ਜੋ ਕਿ ਕਾਫ਼ੀ ਘੱਟ ਹੈ।
|
|
|
|
ਅਸੀਂ ਟੈਸਟ ਡਾਟਾ ਨੂੰ regression line ਦੇ ਨਾਲ ਪਲਾਟ ਕਰ ਸਕਦੇ ਹਾਂ ਤਾਂ ਜੋ ਇਹ ਵੇਖਿਆ ਜਾ ਸਕੇ ਕਿ ਸਾਡੇ ਕੇਸ ਵਿੱਚ regression ਕਿਵੇਂ ਕੰਮ ਕਰਦਾ ਹੈ:
|
|
|
|
```python
|
|
plt.scatter(X_test,y_test)
|
|
plt.plot(X_test,pred)
|
|
```
|
|
|
|
<img alt="Linear regression" src="images/linear-results.png" width="50%" />
|
|
|
|
## ਪੋਲੀਨੋਮਿਅਲ ਰਿਗ੍ਰੈਸ਼ਨ
|
|
|
|
ਰੇਖੀਅਤ ਰਿਗ੍ਰੈਸ਼ਨ ਦੀ ਇੱਕ ਹੋਰ ਕਿਸਮ ਪੋਲੀਨੋਮਿਅਲ ਰਿਗ੍ਰੈਸ਼ਨ ਹੈ। ਜਦੋਂਕਿ ਕਈ ਵਾਰ ਚਰਾਂ ਵਿਚਕਾਰ ਰੇਖੀਅਤ ਸੰਬੰਧ ਹੁੰਦਾ ਹੈ - ਜਿਵੇਂ ਕਿ ਕਦੂ ਦਾ ਵਾਲਿਊਮ ਵਧਣ ਨਾਲ ਕੀਮਤ ਵਧਦੀ ਹੈ - ਕਈ ਵਾਰ ਇਹ ਸੰਬੰਧ ਇੱਕ ਸਿੱਧੇ ਰੇਖਾ ਜਾਂ ਪਲੇਨ ਵਜੋਂ ਪਲਾਟ ਨਹੀਂ ਕੀਤੇ ਜਾ ਸਕਦੇ।
|
|
|
|
✅ ਇੱਥੇ [ਕੁਝ ਹੋਰ ਉਦਾਹਰਨ](https://online.stat.psu.edu/stat501/lesson/9/9.8) ਹਨ ਜੋ ਪੋਲੀਨੋਮਿਅਲ ਰਿਗ੍ਰੈਸ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹਨ।
|
|
|
|
Date ਅਤੇ Price ਦੇ ਸੰਬੰਧ ਨੂੰ ਦੁਬਾਰਾ ਦੇਖੋ। ਕੀ ਇਹ scatterplot ਸਿੱਧੇ ਰੇਖਾ ਨਾਲ ਵਿਸ਼ਲੇਸ਼ਣ ਕਰਨ ਯੋਗ ਲੱਗਦਾ ਹੈ? ਕੀ ਕੀਮਤਾਂ ਵਿੱਚ ਉਤਾਰ-ਚੜ੍ਹਾਅ ਨਹੀਂ ਹੋ ਸਕਦਾ? ਇਸ ਕੇਸ ਵਿੱਚ, ਤੁਸੀਂ ਪੋਲੀਨੋਮਿਅਲ ਰਿਗ੍ਰੈਸ਼ਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਸਕਦੇ ਹੋ।
|
|
|
|
✅ ਪੋਲੀਨੋਮਿਅਲ ਗਣਿਤੀਕ ਅਭਿਵਿਅਕਤੀਆਂ ਹਨ ਜੋ ਇੱਕ ਜਾਂ ਵੱਧ ਚਰਾਂ ਅਤੇ ਗੁਣਾਂਕਾਂ ਤੋਂ ਬਣੀਆਂ ਹੋ ਸਕਦੀਆਂ ਹਨ।
|
|
|
|
ਪੋਲੀਨੋਮਿਅਲ ਰਿਗ੍ਰੈਸ਼ਨ nonlinear ਡਾਟਾ ਨੂੰ ਬਿਹਤਰ ਫਿੱਟ ਕਰਨ ਲਈ ਇੱਕ ਵਕਰ ਰੇਖਾ ਬਣਾਉਂਦਾ ਹੈ। ਸਾਡੇ ਕੇਸ ਵਿੱਚ, ਜੇਕਰ ਅਸੀਂ `DayOfYear` ਚਰ ਨੂੰ squared ਕਰਕੇ ਇਨਪੁਟ ਡਾਟਾ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰਦੇ ਹਾਂ, ਤਾਂ ਅਸੀਂ ਸਾਲ ਦੇ ਇੱਕ ਨਿਰਧਾਰਿਤ ਬਿੰਦੂ 'ਤੇ ਘੱਟੋ-ਘੱਟ ਮੁੱਲ ਵਾਲੀ parabolic curve ਨਾਲ ਡਾਟਾ ਫਿੱਟ ਕਰ ਸਕਦੇ ਹਾਂ।
|
|
|
|
Scikit-learn ਵਿੱਚ ਇੱਕ ਸਹਾਇਕ [pipeline API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) ਸ਼ਾਮਲ ਹੈ ਜੋ ਡਾਟਾ ਪ੍ਰੋਸੈਸਿੰਗ ਦੇ ਵੱਖ-ਵੱਖ ਕਦਮਾਂ ਨੂੰ ਇਕੱਠੇ ਕਰਨ ਲਈ ਵਰਤੀ ਜਾ ਸਕਦੀ ਹੈ। **pipeline** **estimators** ਦੀ ਇੱਕ ਲੜੀ ਹੈ। ਸਾਡੇ ਕੇਸ ਵਿੱਚ, ਅਸੀਂ ਇੱਕ pipeline ਬਣਾਉਣ ਜਾ ਰਹੇ ਹਾਂ ਜੋ ਪਹਿਲਾਂ ਮਾਡਲ ਵਿੱਚ ਪੋਲੀਨੋਮਿਅਲ ਫੀਚਰ ਸ਼ਾਮਲ ਕਰਦਾ ਹੈ ਅਤੇ ਫਿਰ ਰਿਗ੍ਰੈਸ਼ਨ ਨੂੰ ਟ੍ਰੇਨ ਕਰਦਾ ਹੈ:
|
|
|
|
```python
|
|
from sklearn.preprocessing import PolynomialFeatures
|
|
from sklearn.pipeline import make_pipeline
|
|
|
|
pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
|
|
|
|
pipeline.fit(X_train,y_train)
|
|
```
|
|
|
|
`PolynomialFeatures(2)` ਦੀ ਵਰਤੋਂ ਕਰਨ ਦਾ ਮਤਲਬ ਹੈ ਕਿ ਅਸੀਂ ਇਨਪੁਟ ਡਾਟਾ ਤੋਂ ਸਾਰੇ ਦੂਜੇ-ਡਿਗਰੀ ਪੋਲੀਨੋਮਿਅਲ ਸ਼ਾਮਲ ਕਰਾਂਗੇ। ਸਾਡੇ ਕੇਸ ਵਿੱਚ ਇਹ ਸਿਰਫ `DayOfYear`<sup>2</sup> ਹੋਵੇਗਾ, ਪਰ ਜੇਕਰ ਦੋ ਇਨਪੁਟ ਚਰ X ਅਤੇ Y ਹਨ, ਤਾਂ ਇਹ X<sup>2</sup>, XY ਅਤੇ Y<sup>2</sup> ਸ਼ਾਮਲ ਕਰੇਗਾ। ਜੇਕਰ ਅਸੀਂ ਚਾਹੀਏ ਤਾਂ ਉੱਚ ਡਿਗਰੀ ਦੇ ਪੋਲੀਨੋਮਿਅਲ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹਾਂ।
|
|
|
|
Pipelines ਨੂੰ ਮੂਲ `LinearRegression` ਵਸਤੂ ਵਾਂਗ ਹੀ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ ਅਸੀਂ pipeline ਨੂੰ `fit` ਕਰ ਸਕਦੇ ਹਾਂ ਅਤੇ ਫਿਰ `predict` ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਪੇਸ਼ਕਰੀ ਦੇ ਨਤੀਜੇ ਪ੍ਰਾਪਤ ਕਰ ਸਕਦੇ ਹਾਂ। ਹੇਠਾਂ ਦਿੱਤੇ ਗ੍ਰਾਫ ਵਿੱਚ ਟੈਸਟ ਡਾਟਾ ਅਤੇ approximation curve ਦਿਖਾਈ ਗਈ ਹੈ:
|
|
|
|
<img alt="Polynomial regression" src="images/poly-results.png" width="50%" />
|
|
|
|
ਪੋਲੀਨੋਮਿਅਲ ਰਿਗ੍ਰੈਸ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰਕੇ, ਅਸੀਂ ਥੋੜ੍ਹਾ ਘੱਟ MSE ਅਤੇ ਉੱਚਾ determination ਪ੍ਰਾਪਤ ਕਰ ਸਕਦੇ ਹਾਂ, ਪਰ ਬਹੁਤ ਜ਼ਿਆਦਾ ਨਹੀਂ। ਸਾਨੂੰ ਹੋਰ ਫੀਚਰਾਂ ਨੂੰ ਧਿਆਨ ਵਿੱਚ ਰੱਖਣਾ ਪਵੇਗਾ!
|
|
|
|
> ਤੁਸੀਂ ਵੇਖ ਸਕਦੇ ਹੋ ਕਿ ਘੱਟੋ-ਘੱਟ ਕਦੂ ਦੀਆਂ ਕੀਮਤਾਂ ਹਾਲੋਵੀਨ ਦੇ ਆਸਪਾਸ ਦੇਖੀਆਂ ਜਾਂਦੀਆਂ ਹਨ। ਤੁਸੀਂ ਇਸ ਨੂੰ ਕਿਵੇਂ ਸਮਝਾ ਸਕਦੇ ਹੋ?
|
|
|
|
🎃 ਵਧਾਈ ਹੋਵੇ, ਤੁਸੀਂ ਇੱਕ ਮਾਡਲ ਬਣਾਇਆ ਹੈ ਜੋ ਪਾਈ ਕਦੂ ਦੀ ਕੀਮਤ ਦੀ ਪੇਸ਼ਕਰੀ ਵਿੱਚ ਮਦਦ ਕਰ ਸਕਦਾ ਹੈ। ਤੁਸੀਂ ਸ਼ਾਇਦ ਇਹੀ ਪ੍ਰਕਿਰਿਆ ਸਾਰੇ ਕਦੂ ਦੀਆਂ ਕਿਸਮਾਂ ਲਈ ਦੁਹਰਾ ਸਕਦੇ ਹੋ, ਪਰ ਇਹ ਬਹੁਤ ਥਕਾਵਟ ਵਾਲਾ ਹੋਵੇਗਾ। ਆਓ ਹੁਣ ਸਿੱਖੀਏ ਕਿ ਕਦੂ ਦੀ ਕਿਸਮ ਨੂੰ ਆਪਣੇ ਮਾਡਲ ਵਿੱਚ ਕਿਵੇਂ ਸ਼ਾਮਲ ਕਰਨਾ ਹੈ!
|
|
|
|
## ਸ਼੍ਰੇਣੀਵਾਰ ਫੀਚਰ
|
|
|
|
ਆਦਰਸ਼ ਜਗਤ ਵਿੱਚ, ਅਸੀਂ ਇੱਕੋ ਮਾਡਲ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਵੱਖ-ਵੱਖ ਕਦੂ ਦੀਆਂ ਕਿਸਮਾਂ ਲਈ ਕੀਮਤਾਂ ਦੀ ਪੇਸ਼ਕਰੀ ਕਰਨ ਦੇ ਯੋਗ ਹੋਣਾ ਚਾਹੁੰਦੇ ਹਾਂ। ਹਾਲਾਂਕਿ, `Variety` ਕਾਲਮ `Month` ਵਰਗੇ ਕਾਲਮਾਂ ਤੋਂ ਕੁਝ ਵੱਖਰਾ ਹੈ, ਕਿਉਂਕਿ ਇਸ ਵਿੱਚ ਗੈਰ-ਸੰਖਿਆਤਮਕ ਮੁੱਲ ਹਨ। ਇਸ ਤਰ੍ਹਾਂ ਦੇ ਕਾਲਮਾਂ ਨੂੰ **categorical** ਕਿਹਾ ਜਾਂਦਾ ਹੈ।
|
|
|
|
[](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression")
|
|
|
|
> 🎥 ਉੱਪਰ ਦਿੱਤੀ ਤਸਵੀਰ 'ਤੇ ਕਲਿੱਕ ਕਰੋ categorical features ਦੀ ਵਰਤੋਂ ਦਾ ਇੱਕ ਛੋਟਾ ਵੀਡੀਓ ਝਲਕ ਦੇਖਣ ਲਈ।
|
|
|
|
ਇੱਥੇ ਤੁਸੀਂ ਵੇਖ ਸਕਦੇ ਹੋ ਕਿ ਕਿਸਮ ਦੇ ਆਧਾਰ 'ਤੇ ਔਸਤ ਕੀਮਤ ਕਿਵੇਂ ਨਿਰਭਰ ਕਰਦੀ ਹੈ:
|
|
|
|
<img alt="Average price by variety" src="images/price-by-variety.png" width="50%" />
|
|
|
|
ਕਿਸਮ ਨੂੰ ਧਿਆਨ ਵਿੱਚ ਲੈਣ ਲਈ, ਸਾਨੂੰ ਪਹਿਲਾਂ ਇਸਨੂੰ ਸੰਖਿਆਤਮਕ ਰੂਪ ਵਿੱਚ ਰੂਪਾਂਤਰਿਤ ਕਰਨਾ ਪਵੇਗਾ, ਜਾਂ **encode** ਕਰਨਾ ਪਵੇਗਾ। ਇਸਨੂੰ ਕਰਨ ਦੇ ਕਈ ਤਰੀਕੇ ਹਨ:
|
|
|
|
* ਸਧਾਰਨ **numeric encoding** ਇੱਕ ਵੱਖ-ਵੱਖ ਕਿਸਮਾਂ ਦੀ ਸੂਚੀ ਬਣਾਏਗਾ ਅਤੇ ਫਿਰ ਕਿਸਮ ਦੇ ਨਾਮ ਨੂੰ ਉਸ ਸੂਚੀ ਵਿੱਚ ਇੱਕ index ਨਾਲ ਬਦਲ ਦੇਵੇਗਾ। ਇਹ ਰੇਖੀਅਤ ਰਿਗ੍ਰੈਸ਼ਨ ਲਈ ਸਭ ਤੋਂ ਵਧੀਆ ਵਿਚਾਰ ਨਹੀਂ ਹੈ, ਕਿਉਂਕਿ ਰੇਖੀਅਤ ਰਿਗ੍ਰੈਸ਼ਨ index ਦੇ ਅਸਲ ਸੰਖਿਆਤਮਕ ਮੁੱਲ ਨੂੰ ਲੈਂਦਾ ਹੈ ਅਤੇ ਇਸਨੂੰ ਕੁਝ ਗੁਣਾਂਕ ਨਾਲ ਗੁਣਾ ਕਰਕੇ ਨਤੀਜੇ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰਦਾ ਹੈ। ਸਾਡੇ ਕੇਸ ਵਿੱਚ, index ਨੰਬਰ ਅਤੇ ਕੀਮਤ ਦੇ ਵਿਚਕਾਰ ਸੰਬੰਧ ਸਪਸ਼ਟ ਤੌਰ 'ਤੇ nonlinear ਹੈ, ਭਾਵੇਂ ਅਸੀਂ ਇਹ ਯਕੀਨੀ ਬਣਾਈਏ ਕਿ indices ਨੂੰ ਕਿਸੇ ਵਿਸ਼ੇਸ਼ ਢੰਗ ਨਾਲ ਕ੍ਰਮਬੱਧ ਕੀਤਾ ਗਿਆ ਹੈ।
|
|
* **One-hot encoding** `Variety` ਕਾਲਮ ਨੂੰ 4 ਵੱਖ-ਵੱਖ ਕਾਲਮਾਂ ਨਾਲ ਬਦਲ ਦੇਵੇਗਾ, ਹਰ ਕਿਸਮ ਲਈ ਇੱਕ। ਹਰ ਕਾਲਮ ਵਿੱਚ `1` ਹੋਵੇਗਾ ਜੇਕਰ ਸੰਬੰਧਿਤ row ਦਿੱਤੀ ਕਿਸਮ ਦੀ ਹੋਵੇ, ਅਤੇ `0` ਹੋਵੇਗਾ ਨਹੀਂ। ਇਸਦਾ ਮਤਲਬ ਹੈ ਕਿ ਰੇਖੀਅਤ ਰਿਗ੍ਰੈਸ਼ਨ ਵਿੱਚ ਚਾਰ ਗੁਣਾਂਕ ਹੋਣਗੇ, ਹਰ ਕਦੂ ਦੀ ਕਿਸਮ ਲਈ ਇੱਕ, ਜੋ ਉਸ ਵਿਸ਼ੇਸ਼ ਕਿਸਮ ਲਈ "ਸ਼ੁਰੂਆਤੀ ਕੀਮਤ" (ਜਾਂ "ਵਾਧੂ ਕੀਮਤ") ਲਈ ਜ਼ਿੰਮੇਵਾਰ ਹੋਵੇਗਾ।
|
|
|
|
ਹੇਠਾਂ ਦਿੱਤਾ ਕੋਡ ਦਿਖਾਉਂਦਾ ਹੈ ਕਿ ਅਸੀਂ ਕਿਸਮ ਨੂੰ one-hot encode ਕਿਵੇਂ ਕਰ ਸਕਦੇ ਹਾਂ:
|
|
|
|
```python
|
|
pd.get_dummies(new_pumpkins['Variety'])
|
|
```
|
|
|
|
ID | FAIRYTALE | MINIATURE | MIXED HEIRLOOM VARIETIES | PIE TYPE
|
|
----|-----------|-----------|--------------------------|----------
|
|
70 | 0 | 0 | 0 | 1
|
|
71 | 0 | 0 | 0 | 1
|
|
... | ... | ... | ... | ...
|
|
1738 | 0 | 1 | 0 | 0
|
|
1739 | 0 | 1 | 0 | 0
|
|
1740 | 0 | 1 | 0 | 0
|
|
1741 | 0 | 1 | 0 | 0
|
|
1742 | 0 | 1 | 0 | 0
|
|
|
|
One-hot encoded variety ਨੂੰ ਇਨਪੁਟ ਵਜੋਂ ਵਰਤ ਕੇ ਰੇਖੀਅਤ ਰਿਗ੍ਰੈਸ਼ਨ ਨੂੰ ਟ੍ਰੇਨ ਕਰਨ ਲਈ, ਸਾਨੂੰ ਸਿਰਫ `X` ਅਤੇ `y` ਡਾਟਾ ਨੂੰ ਸਹੀ ਤਰੀਕੇ ਨਾਲ ਸ਼ੁਰੂ ਕਰਨ ਦੀ ਲੋੜ ਹੈ:
|
|
|
|
```python
|
|
X = pd.get_dummies(new_pumpkins['Variety'])
|
|
y = new_pumpkins['Price']
|
|
```
|
|
|
|
ਬਾਕੀ ਕੋਡ ਉਹੀ ਹੈ ਜੋ ਅਸੀਂ ਉੱਪਰ ਰੇਖੀਅਤ ਰਿਗ੍ਰੈਸ਼ਨ ਨੂੰ ਟ੍ਰੇਨ ਕਰਨ ਲਈ ਵਰਤਿਆ ਸੀ। ਜੇਕਰ ਤੁਸੀਂ ਇਸਨੂੰ ਅਜ਼ਮਾਉਂਦੇ ਹੋ, ਤਾਂ ਤੁਸੀਂ ਵੇਖੋਗੇ ਕਿ mean squared error ਲਗਭਗ ਉਹੀ ਹੈ, ਪਰ ਅਸੀਂ ਕਾਫ਼ੀ ਉੱਚਾ coefficient of determination (~77%) ਪ੍ਰਾਪਤ ਕਰਦੇ ਹਾਂ। ਹੋਰ ਸਹੀ ਪੇਸ਼ਕਰੀ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ, ਅਸੀਂ ਹੋਰ ਸ਼੍ਰੇਣੀਵਾਰ ਫੀਚਰਾਂ ਨੂੰ, ਨਾਲ ਹੀ ਸੰਖਿਆਤਮਕ ਫੀਚਰਾਂ ਜਿਵੇਂ `Month` ਜਾਂ `DayOfYear` ਨੂੰ ਧਿਆਨ ਵਿੱਚ ਲੈ ਸਕਦੇ ਹਾਂ। ਇੱਕ ਵੱਡੇ ਫੀਚਰ ਐਰੇ ਨੂੰ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ, ਅਸੀਂ `join` ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹਾਂ:
|
|
|
|
```python
|
|
X = pd.get_dummies(new_pumpkins['Variety']) \
|
|
.join(new_pumpkins['Month']) \
|
|
.join(pd.get_dummies(new_pumpkins['City'])) \
|
|
.join(pd.get_dummies(new_pumpkins['Package']))
|
|
y = new_pumpkins['Price']
|
|
```
|
|
|
|
ਇੱਥੇ ਅਸੀਂ `City` ਅਤੇ `Package` ਕਿਸਮ ਨੂੰ ਵੀ ਧਿਆਨ ਵਿੱਚ ਲੈਂਦੇ ਹਾਂ, ਜੋ ਸਾਨੂੰ MSE 2.84 (10%) ਅਤੇ determination 0.94 ਦਿੰਦਾ ਹੈ!
|
|
|
|
## ਸਾਰਾ ਕੁਝ ਇਕੱਠੇ ਕਰਨਾ
|
|
|
|
ਸਭ ਤੋਂ ਵਧੀਆ ਮਾਡਲ ਬਣਾਉਣ ਲਈ, ਅਸੀਂ ਉੱਪਰ ਦਿੱਤੇ ਉਦਾਹਰਨ ਤੋਂ ਮਿਲੇ-ਜੁਲੇ (one-hot encoded ਸ਼੍ਰੇਣੀਵਾਰ + ਸੰਖਿਆਤਮਕ) ਡਾਟਾ ਨੂੰ ਪੋਲੀਨੋਮਿਅਲ ਰਿਗ੍ਰੈਸ਼ਨ ਦੇ ਨਾਲ ਵਰਤ ਸਕਦੇ ਹਾਂ। ਤੁਹਾਡੇ ਸੁਵਿਧਾ ਲਈ ਪੂਰਾ ਕੋਡ ਇੱਥੇ ਹੈ:
|
|
|
|
```python
|
|
# set up training data
|
|
X = pd.get_dummies(new_pumpkins['Variety']) \
|
|
.join(new_pumpkins['Month']) \
|
|
.join(pd.get_dummies(new_pumpkins['City'])) \
|
|
.join(pd.get_dummies(new_pumpkins['Package']))
|
|
y = new_pumpkins['Price']
|
|
|
|
# make train-test split
|
|
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
|
|
|
|
# setup and train the pipeline
|
|
pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
|
|
pipeline.fit(X_train,y_train)
|
|
|
|
# predict results for test data
|
|
pred = pipeline.predict(X_test)
|
|
|
|
# calculate MSE and determination
|
|
mse = np.sqrt(mean_squared_error(y_test,pred))
|
|
print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')
|
|
|
|
score = pipeline.score(X_train,y_train)
|
|
print('Model determination: ', score)
|
|
```
|
|
|
|
ਇਹ ਸਾਨੂੰ ਲਗਭਗ 97% ਦਾ ਸਭ ਤੋਂ ਵਧੀਆ determination coefficient ਅਤੇ MSE=2.23 (~8% ਪੇਸ਼ਕਰੀ ਗਲਤੀ) ਦੇਵੇਗਾ।
|
|
|
|
| Model | MSE | Determination |
|
|
|-------|-----|---------------|
|
|
| `DayOfYear` Linear | 2.77 (17.2%) | 0.07 |
|
|
| `DayOfYear` Polynomial | 2.73 (17.0%) | 0.08 |
|
|
| `Variety` Linear | 5.24 (19.7%) | 0.77 |
|
|
| All features Linear | 2.84 (10.5%) | 0.94 |
|
|
| All features Polynomial | 2.23 (8.25%) | 0.97 |
|
|
|
|
🏆 ਸ਼ਾਬਾਸ਼! ਤੁਸੀਂ ਇੱਕ ਪਾਠ ਵਿੱਚ ਚਾਰ ਰਿਗ੍ਰੈਸ਼ਨ ਮਾਡਲ ਬਣਾਏ ਹਨ ਅਤੇ ਮਾਡਲ ਦੀ ਗੁਣਵੱਤਾ ਨੂੰ 97% ਤੱਕ ਸੁਧਾਰਿਆ ਹੈ। ਰਿਗ੍ਰੈਸ਼ਨ 'ਤੇ ਅੰਤਿਮ ਭਾਗ ਵਿੱਚ, ਤੁਸੀਂ ਸ਼੍ਰੇਣੀਆਂ ਨੂੰ ਨਿਰਧਾਰਤ ਕਰਨ ਲਈ Logistic Regression ਬਾਰੇ ਸਿੱਖੋਗੇ।
|
|
|
|
---
|
|
## 🚀ਚੁਣੌਤੀ
|
|
|
|
ਇਸ ਨੋਟਬੁੱਕ ਵਿੱਚ ਕਈ ਵੱਖ-ਵੱਖ ਚਰਾਂ ਦੀ ਜਾਂਚ ਕਰੋ ਤਾਂ ਜੋ correlation ਮਾਡਲ ਦੀ ਸਹੀਤਾ ਨਾਲ ਕਿਵੇਂ ਸੰਬੰਧਿਤ ਹੈ।
|
|
|
|
## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/14/)
|
|
|
|
## ਸਮੀਖਿਆ ਅਤੇ ਸਵੈ ਅਧਿਐਨ
|
|
|
|
ਇਸ ਪਾਠ ਵਿੱਚ ਅਸੀਂ ਰੇਖੀਅਤ ਰਿਗ੍ਰੈਸ਼ਨ ਬਾਰੇ ਸਿੱਖਿਆ। ਰਿਗ੍ਰੈਸ਼ਨ ਦੇ ਹੋਰ ਮਹੱਤਵਪੂਰਨ ਕਿਸਮਾਂ ਹਨ। Stepwise, Ridge, Lasso ਅਤੇ Elasticnet ਤਕਨੀਕਾਂ ਬਾਰੇ ਪੜ੍ਹੋ। ਹੋਰ ਸਿੱਖਣ ਲਈ ਇੱਕ ਵਧੀਆ ਕੋਰਸ [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) ਹੈ।
|
|
|
|
## ਅਸਾਈਨਮੈਂਟ
|
|
|
|
[ਮਾਡਲ ਬਣਾਓ](assignment.md)
|
|
|
|
---
|
|
|
|
**ਅਸਵੀਕਰਤੀ**:
|
|
ਇਹ ਦਸਤਾਵੇਜ਼ AI ਅਨੁਵਾਦ ਸੇਵਾ [Co-op Translator](https://github.com/Azure/co-op-translator) ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਅਨੁਵਾਦ ਕੀਤਾ ਗਿਆ ਹੈ। ਜਦੋਂ ਕਿ ਅਸੀਂ ਸਹੀ ਹੋਣ ਦਾ ਯਤਨ ਕਰਦੇ ਹਾਂ, ਕਿਰਪਾ ਕਰਕੇ ਧਿਆਨ ਦਿਓ ਕਿ ਸਵੈਚਾਲਿਤ ਅਨੁਵਾਦਾਂ ਵਿੱਚ ਗਲਤੀਆਂ ਜਾਂ ਅਸੁੱਤੀਆਂ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਇਸ ਦੀ ਮੂਲ ਭਾਸ਼ਾ ਵਿੱਚ ਮੌਜੂਦ ਮੂਲ ਦਸਤਾਵੇਜ਼ ਨੂੰ ਅਧਿਕਾਰਤ ਸਰੋਤ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਮਹੱਤਵਪੂਰਨ ਜਾਣਕਾਰੀ ਲਈ, ਪੇਸ਼ੇਵਰ ਮਨੁੱਖੀ ਅਨੁਵਾਦ ਦੀ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਸ ਅਨੁਵਾਦ ਦੇ ਪ੍ਰਯੋਗ ਤੋਂ ਪੈਦਾ ਹੋਣ ਵਾਲੇ ਕਿਸੇ ਵੀ ਗਲਤਫਹਮੀ ਜਾਂ ਗਲਤ ਵਿਆਖਿਆ ਲਈ ਅਸੀਂ ਜ਼ਿੰਮੇਵਾਰ ਨਹੀਂ ਹਾਂ। |