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

|
|
> ਇਨਫੋਗ੍ਰਾਫਿਕ [ਦਸਾਨੀ ਮਾਡਿਪਾਲੀ](https://twitter.com/dasani_decoded) ਦੁਆਰਾ
|
|
|
|
## [ਪ੍ਰੀ-ਲੈਕਚਰ ਕਵਿਜ਼](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
> ### [ਇਹ ਪਾਠ ਰ ਵਿੱਚ ਉਪਲਬਧ ਹੈ!](../../../../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) ਦੁਆਰਾ
|
|
>
|
|
> ਲਾਈਨ ਦੀ ਗਣਨਾ ਕਰਨ ਵਾਲਾ ਗਣਿਤ ਲਾਈਨ ਦੇ ਢਲਾਨ ਨੂੰ ਦਰਸਾਉਣਾ ਚਾਹੀਦਾ ਹੈ, ਜੋ ਇੰਟਰਸੈਪਟ 'ਤੇ ਵੀ ਨਿਰਭਰ ਹੈ, ਜਾਂ ਜਿੱਥੇ `X = 0` ਹੋਣ 'ਤੇ `Y` ਸਥਿਤ ਹੈ।
|
|
>
|
|
> ਤੁਸੀਂ [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`](../../../../2-Regression/3-Linear/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="Price vs. Day of Year ਦਾ ਸਕੈਟਰਪਲੌਟ" 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 ਦਾ ਮਤਲਬ ਹੈ ਕਿ ਅਸੀਂ ਸਾਰੇ ਉਮੀਦਵਾਰ ਨਤੀਜਿਆਂ ਦੀ ਪੂਰੀ ਤਰ੍ਹਾਂ ਪੇਸ਼ਕਰੀ ਕਰ ਸਕਦੇ ਹਾਂ। ਸਾਡੇ ਕੇਸ ਵਿੱਚ, ਕੋਐਫੀਸ਼ੀਅੰਟ ਲਗਭਗ 0.06 ਹੈ, ਜੋ ਕਿ ਕਾਫ਼ੀ ਘੱਟ ਹੈ।
|
|
|
|
ਅਸੀਂ ਟੈਸਟ ਡਾਟਾ ਨੂੰ ਰਿਗ੍ਰੈਸ਼ਨ ਲਾਈਨ ਦੇ ਨਾਲ ਪਲਾਟ ਕਰ ਸਕਦੇ ਹਾਂ ਤਾਂ ਜੋ ਇਹ ਵੇਖਿਆ ਜਾ ਸਕੇ ਕਿ ਸਾਡੇ ਕੇਸ ਵਿੱਚ ਰਿਗ੍ਰੈਸ਼ਨ ਕਿਵੇਂ ਕੰਮ ਕਰਦਾ ਹੈ:
|
|
|
|
```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) ਹਨ ਜਿਨ੍ਹਾਂ ਵਿੱਚ ਪੋਲੀਨੋਮਿਅਲ ਰਿਗ੍ਰੈਸ਼ਨ ਦੀ ਲੋੜ ਹੋ ਸਕਦੀ ਹੈ।
|
|
|
|
ਮਿਤੀ ਅਤੇ ਕੀਮਤ ਦੇ ਸੰਬੰਧ ਨੂੰ ਦੁਬਾਰਾ ਦੇਖੋ। ਕੀ ਇਹ scatterplot ਸਿੱਧੇ ਰੇਖਾ ਨਾਲ ਵਿਸ਼ਲੇਸ਼ਣ ਕਰਨ ਯੋਗ ਲੱਗਦਾ ਹੈ? ਕੀ ਕੀਮਤਾਂ ਵਿੱਚ ਉਤਾਰ-ਚੜ੍ਹਾਅ ਨਹੀਂ ਹੋ ਸਕਦਾ? ਇਸ ਕੇਸ ਵਿੱਚ, ਤੁਸੀਂ ਪੋਲੀਨੋਮਿਅਲ ਰਿਗ੍ਰੈਸ਼ਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਸਕਦੇ ਹੋ।
|
|
|
|
✅ ਪੋਲੀਨੋਮਿਅਲ ਗਣਿਤੀਅ ਅਭਿਵਿਅਕਤੀਆਂ ਹਨ ਜੋ ਇੱਕ ਜਾਂ ਵੱਧ ਚਰਾਂ ਅਤੇ ਗੁਣਾਂਕਾਂ 'ਤੇ ਆਧਾਰਿਤ ਹੋ ਸਕਦੀਆਂ ਹਨ।
|
|
|
|
ਪੋਲੀਨੋਮਿਅਲ ਰਿਗ੍ਰੈਸ਼ਨ ਇੱਕ ਵਕਰ ਰੇਖਾ ਬਣਾਉਂਦਾ ਹੈ ਜੋ nonlinear ਡਾਟਾ ਨੂੰ ਬਿਹਤਰ ਫਿੱਟ ਕਰਦਾ ਹੈ। ਸਾਡੇ ਕੇਸ ਵਿੱਚ, ਜੇ ਅਸੀਂ `DayOfYear` ਚਰ ਨੂੰ ਸਕਵੇਅਰ ਕਰਕੇ ਇਨਪੁਟ ਡਾਟਾ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰਦੇ ਹਾਂ, ਤਾਂ ਅਸੀਂ ਸਾਲ ਦੇ ਇੱਕ ਨਿਰਧਾਰਿਤ ਬਿੰਦੂ 'ਤੇ ਘੱਟਤਮ ਮੁੱਲ ਵਾਲੀ ਪੈਰਾਬੋਲਿਕ ਵਕਰ ਨਾਲ ਡਾਟਾ ਫਿੱਟ ਕਰ ਸਕਦੇ ਹਾਂ।
|
|
|
|
Scikit-learn ਵਿੱਚ ਇੱਕ ਸਹਾਇਕ [pipeline API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_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> ਸ਼ਾਮਲ ਕਰੇਗਾ। ਜੇ ਅਸੀਂ ਚਾਹੀਏ ਤਾਂ ਅਸੀਂ ਉੱਚੇ ਡਿਗਰੀ ਦੇ ਪੋਲੀਨੋਮਿਅਲ ਵੀ ਵਰਤ ਸਕਦੇ ਹਾਂ।
|
|
|
|
ਪਾਈਪਲਾਈਨ ਨੂੰ ਉਸੇ ਤਰੀਕੇ ਨਾਲ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਹੈ ਜਿਵੇਂ ਅਸਲ `LinearRegression` ਆਬਜੈਕਟ, ਜਿਵੇਂ ਕਿ ਅਸੀਂ ਪਾਈਪਲਾਈਨ ਨੂੰ `fit` ਕਰ ਸਕਦੇ ਹਾਂ ਅਤੇ ਫਿਰ `predict` ਵਰਤ ਕੇ ਪੇਸ਼ਕਰੀ ਦੇ ਨਤੀਜੇ ਪ੍ਰਾਪਤ ਕਰ ਸਕਦੇ ਹਾਂ। ਇੱਥੇ ਟੈਸਟ ਡਾਟਾ ਅਤੇ ਅਨੁਮਾਨਿਤ ਵਕਰ ਦਿਖਾਉਣ ਵਾਲਾ ਗ੍ਰਾਫ ਹੈ:
|
|
|
|
<img alt="Polynomial regression" src="images/poly-results.png" width="50%" />
|
|
|
|
ਪੋਲੀਨੋਮਿਅਲ ਰਿਗ੍ਰੈਸ਼ਨ ਵਰਤ ਕੇ, ਅਸੀਂ ਥੋੜ੍ਹਾ ਘੱਟ MSE ਅਤੇ ਉੱਚਾ determination ਪ੍ਰਾਪਤ ਕਰ ਸਕਦੇ ਹਾਂ, ਪਰ ਬਹੁਤ ਵੱਡਾ ਫਰਕ ਨਹੀਂ। ਸਾਨੂੰ ਹੋਰ ਫੀਚਰਾਂ ਨੂੰ ਧਿਆਨ ਵਿੱਚ ਲੈਣਾ ਪਵੇਗਾ!
|
|
|
|
> ਤੁਸੀਂ ਵੇਖ ਸਕਦੇ ਹੋ ਕਿ ਘੱਟਤਮ ਕਦੂ ਦੀਆਂ ਕੀਮਤਾਂ ਹਾਲੋਵੀਨ ਦੇ ਆਸ-ਪਾਸ ਦੇਖੀਆਂ ਜਾਂਦੀਆਂ ਹਨ। ਤੁਸੀਂ ਇਸ ਨੂੰ ਕਿਵੇਂ ਸਮਝਾਉਂਦੇ ਹੋ?
|
|
|
|
🎃 ਵਧਾਈ ਹੋਵੇ, ਤੁਸੀਂ ਇੱਕ ਮਾਡਲ ਬਣਾਇਆ ਹੈ ਜੋ ਪਾਈ ਕਦੂ ਦੀ ਕੀਮਤ ਦੀ ਪੇਸ਼ਕਰੀ ਵਿੱਚ ਮਦਦ ਕਰ ਸਕਦਾ ਹੈ। ਤੁਸੀਂ ਸ਼ਾਇਦ ਇਹੀ ਪ੍ਰਕਿਰਿਆ ਸਾਰੇ ਕਦੂ ਦੀਆਂ ਕਿਸਮਾਂ ਲਈ ਦੁਹਰਾ ਸਕਦੇ ਹੋ, ਪਰ ਇਹ ਬਹੁਤ ਥਕਾਵਟ ਵਾਲਾ ਕੰਮ ਹੋਵੇਗਾ। ਚਲੋ ਹੁਣ ਸਿੱਖਦੇ ਹਾਂ ਕਿ ਕਦੂ ਦੀ ਕਿਸਮ ਨੂੰ ਆਪਣੇ ਮਾਡਲ ਵਿੱਚ ਕਿਵੇਂ ਸ਼ਾਮਲ ਕਰਨਾ ਹੈ!
|
|
|
|
## ਸ਼੍ਰੇਣੀਵਾਰ ਫੀਚਰ
|
|
|
|
ਆਦਰਸ਼ ਜਗਤ ਵਿੱਚ, ਅਸੀਂ ਇੱਕੋ ਮਾਡਲ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਵੱਖ-ਵੱਖ ਕਦੂ ਦੀਆਂ ਕਿਸਮਾਂ ਲਈ ਕੀਮਤਾਂ ਦੀ ਪੇਸ਼ਕਰੀ ਕਰਨ ਦੇ ਯੋਗ ਹੋਣਾ ਚਾਹੁੰਦੇ ਹਾਂ। ਹਾਲਾਂਕਿ, `Variety` ਕਾਲਮ `Month` ਵਰਗੇ ਕਾਲਮਾਂ ਤੋਂ ਕੁਝ ਵੱਖਰਾ ਹੈ, ਕਿਉਂਕਿ ਇਸ ਵਿੱਚ ਗੈਰ-ਸੰਖਿਆਤਮਕ ਮੁੱਲ ਹਨ। ਇਸ ਤਰ੍ਹਾਂ ਦੇ ਕਾਲਮਾਂ ਨੂੰ **ਸ਼੍ਰੇਣੀਵਾਰ** ਕਿਹਾ ਜਾਂਦਾ ਹੈ।
|
|
|
|
[](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression")
|
|
|
|
> 🎥 ਉੱਪਰ ਦਿੱਤੀ ਤਸਵੀਰ 'ਤੇ ਕਲਿਕ ਕਰੋ ਸ਼੍ਰੇਣੀਵਾਰ ਫੀਚਰ ਵਰਤਣ ਬਾਰੇ ਇੱਕ ਛੋਟੇ ਵੀਡੀਓ ਝਲਕ ਲਈ।
|
|
|
|
ਇੱਥੇ ਤੁਸੀਂ ਵੇਖ ਸਕਦੇ ਹੋ ਕਿ ਕਿਸਮ ਦੇ ਆਧਾਰ 'ਤੇ ਔਸਤ ਕੀਮਤ ਕਿਵੇਂ ਨਿਰਭਰ ਕਰਦੀ ਹੈ:
|
|
|
|
<img alt="Average price by variety" src="images/price-by-variety.png" width="50%" />
|
|
|
|
ਕਿਸਮ ਨੂੰ ਧਿਆਨ ਵਿੱਚ ਲੈਣ ਲਈ, ਸਾਨੂੰ ਪਹਿਲਾਂ ਇਸਨੂੰ ਸੰਖਿਆਤਮਕ ਰੂਪ ਵਿੱਚ ਰੂਪਾਂਤਰਿਤ ਕਰਨਾ ਪਵੇਗਾ, ਜਾਂ **encode** ਕਰਨਾ ਪਵੇਗਾ। ਇਸਨੂੰ ਕਰਨ ਦੇ ਕਈ ਤਰੀਕੇ ਹਨ:
|
|
|
|
* ਸਧਾਰਨ **numeric encoding** ਇੱਕ ਵੱਖਰੀ ਕਿਸਮਾਂ ਦੀ ਸੂਚੀ ਬਣਾਏਗਾ ਅਤੇ ਫਿਰ ਕਿਸਮ ਦੇ ਨਾਮ ਨੂੰ ਉਸ ਸੂਚੀ ਵਿੱਚ ਇੱਕ ਇੰਡੈਕਸ ਨਾਲ ਬਦਲ ਦੇਵੇਗਾ। ਇਹ ਰੇਖੀਅ ਰਿਗ੍ਰੈਸ਼ਨ ਲਈ ਸਭ ਤੋਂ ਵਧੀਆ ਵਿਚਾਰ ਨਹੀਂ ਹੈ, ਕਿਉਂਕਿ ਰੇਖੀਅ ਰਿਗ੍ਰੈਸ਼ਨ ਇੰਡੈਕਸ ਦੇ ਅਸਲ ਸੰਖਿਆਤਮਕ ਮੁੱਲ ਨੂੰ ਲੈਂਦਾ ਹੈ ਅਤੇ ਇਸਨੂੰ ਕੁਝ ਗੁਣਾਂਕ ਨਾਲ ਗੁਣਾ ਕਰਕੇ ਨਤੀਜੇ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰਦਾ ਹੈ। ਸਾਡੇ ਕੇਸ ਵਿੱਚ, ਇੰਡੈਕਸ ਨੰਬਰ ਅਤੇ ਕੀਮਤ ਦੇ ਵਿਚਕਾਰ ਸੰਬੰਧ ਸਪਸ਼ਟ ਤੌਰ 'ਤੇ ਗੈਰ-ਰੇਖੀਅ ਹੈ, ਭਾਵੇਂ ਅਸੀਂ ਇਹ ਯਕੀਨੀ ਬਣਾਈਏ ਕਿ ਇੰਡੈਕਸ ਕਿਸੇ ਵਿਸ਼ੇਸ਼ ਤਰੀਕੇ ਨਾਲ ਕ੍ਰਮਬੱਧ ਹਨ।
|
|
* **One-hot encoding** `Variety` ਕਾਲਮ ਨੂੰ 4 ਵੱਖਰੇ ਕਾਲਮਾਂ ਨਾਲ ਬਦਲ ਦੇਵੇਗਾ, ਹਰ ਕਿਸਮ ਲਈ ਇੱਕ। ਹਰ ਕਾਲਮ ਵਿੱਚ `1` ਹੋਵੇਗਾ ਜੇ ਸੰਬੰਧਿਤ ਪੰਕਤੀ ਦਿੱਤੀ ਕਿਸਮ ਦੀ ਹੈ, ਅਤੇ `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 ਕਿਸਮ ਨੂੰ ਇਨਪੁਟ ਵਜੋਂ ਵਰਤ ਕੇ ਰੇਖੀਅ ਰਿਗ੍ਰੈਸ਼ਨ ਨੂੰ ਟ੍ਰੇਨ ਕਰਨ ਲਈ, ਸਾਨੂੰ ਸਿਰਫ `X` ਅਤੇ `y` ਡਾਟਾ ਨੂੰ ਸਹੀ ਤਰੀਕੇ ਨਾਲ ਸ਼ੁਰੂ ਕਰਨ ਦੀ ਲੋੜ ਹੈ:
|
|
|
|
```python
|
|
X = pd.get_dummies(new_pumpkins['Variety'])
|
|
y = new_pumpkins['Price']
|
|
```
|
|
|
|
ਬਾਕੀ ਕੋਡ ਉਹੀ ਹੈ ਜੋ ਅਸੀਂ ਉੱਪਰ ਰੇਖੀਅ ਰਿਗ੍ਰੈਸ਼ਨ ਨੂੰ ਟ੍ਰੇਨ ਕਰਨ ਲਈ ਵਰਤਿਆ ਸੀ। ਜੇ ਤੁਸੀਂ ਇਸਨੂੰ ਅਜ਼ਮਾਉਂਦੇ ਹੋ, ਤਾਂ ਤੁਸੀਂ ਵੇਖੋਗੇ ਕਿ ਔਸਤ ਵਰਗ ਗਲਤੀ ਲਗਭਗ ਉਹੀ ਹੈ, ਪਰ ਅਸੀਂ ਕਾਫ਼ੀ ਉੱਚਾ 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 ਕੋਐਫੀਸ਼ੀਅੰਟ ਅਤੇ MSE=2.23 (~8% ਪੇਸ਼ਕਰੀ ਗਲਤੀ) ਦੇਵੇਗਾ।
|
|
|
|
| ਮਾਡਲ | 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% ਤੱਕ ਸੁਧਾਰਿਆ ਹੈ। ਰਿਗ੍ਰੈਸ਼ਨ 'ਤੇ ਅੰਤਿਮ ਭਾਗ ਵਿੱਚ, ਤੁਸੀਂ ਸ਼੍ਰੇਣੀਆਂ ਨੂੰ ਨਿਰਧਾਰਤ ਕਰਨ ਲਈ ਲਾਜਿਸਟਿਕ ਰਿਗ੍ਰੈਸ਼ਨ ਬਾਰੇ ਸਿੱਖੋਗੇ।
|
|
|
|
---
|
|
## 🚀ਚੁਣੌਤੀ
|
|
|
|
ਇਸ ਨੋਟਬੁੱਕ ਵਿੱਚ ਕਈ ਵੱਖਰੇ ਚਰਾਂ ਦੀ ਜਾਂਚ ਕਰੋ ਤਾਂ ਜੋ ਵੇਖਿਆ ਜਾ ਸਕੇ ਕਿ ਸੰਬੰਧ ਮਾਡਲ ਦੀ ਸਹੀਤਾ ਨਾਲ ਕਿਵੇਂ ਸਬੰਧਿਤ ਹੈ।
|
|
|
|
## [ਪੋਸਟ-ਪਾਠ ਕਵਿਜ਼](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
## ਸਮੀਖਿਆ ਅਤੇ ਸਵੈ-ਅਧਿਐਨ
|
|
|
|
ਇਸ ਪਾਠ ਵਿੱਚ ਅਸੀਂ ਰੇਖੀਅ ਰਿਗ੍ਰੈਸ਼ਨ ਬਾਰੇ ਸਿੱਖਿਆ। ਰਿਗ੍ਰੈਸ਼ਨ ਦੇ ਹੋਰ ਮਹੱਤਵਪੂਰਨ ਪ੍ਰਕਾਰ ਹਨ। 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) ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਅਨੁਵਾਦ ਕੀਤਾ ਗਿਆ ਹੈ। ਜਦੋਂ ਕਿ ਅਸੀਂ ਸਹੀ ਹੋਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦੇ ਹਾਂ, ਕਿਰਪਾ ਕਰਕੇ ਧਿਆਨ ਦਿਓ ਕਿ ਸਵੈਚਾਲਿਤ ਅਨੁਵਾਦਾਂ ਵਿੱਚ ਗਲਤੀਆਂ ਜਾਂ ਅਸੁਚਤਤਾਵਾਂ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਇਸ ਦੀ ਮੂਲ ਭਾਸ਼ਾ ਵਿੱਚ ਮੂਲ ਦਸਤਾਵੇਜ਼ ਨੂੰ ਅਧਿਕਾਰਤ ਸਰੋਤ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਮਹੱਤਵਪੂਰਨ ਜਾਣਕਾਰੀ ਲਈ, ਪੇਸ਼ੇਵਰ ਮਨੁੱਖੀ ਅਨੁਵਾਦ ਦੀ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਸ ਅਨੁਵਾਦ ਦੀ ਵਰਤੋਂ ਤੋਂ ਪੈਦਾ ਹੋਣ ਵਾਲੇ ਕਿਸੇ ਵੀ ਗਲਤਫਹਿਮੀ ਜਾਂ ਗਲਤ ਵਿਆਖਿਆ ਲਈ ਅਸੀਂ ਜ਼ਿੰਮੇਵਾਰ ਨਹੀਂ ਹਾਂ। |