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/3-Linear/README.md

387 lines
46 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# ਸਕਾਈਕਿਟ-ਲੈਕਰਨ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਰਿਗ੍ਰੈਸ਼ਨ ਮਾਡਲ ਬਣਾਓ: ਰਿਗ੍ਰੈਸ਼ਨ ਦੇ ਚਾਰ ਤਰੀਕੇ
## ਸ਼ੁਰੂਆਤੀ ਨੋਟ
ਲਾਈਨਰ ਰਿਗ੍ਰੈਸ਼ਨ ਨੂੰ ਉਦੋਂ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ ਜਦੋਂ ਅਸੀਂ ਇੱਕ **ਸੰਖਿਆਤਮਕ ਮੁੱਲ** ਦੀ ਭਵਿੱਖਬਾਣੀ ਕਰਨੀ ਹੋਵੇ (ਜਿਵੇਂ ਕਿ, ਘਰ ਦੀ ਕੀਮਤ, ਤਾਪਮਾਨ, ਜਾਂ ਵਿਕਰੀ)।
ਇਹ ਓਦੋਂ ਕੰਮ ਕਰਦਾ ਹੈ ਜਦੋਂ ਇੱਕ ਸਿੱਧੀ ਲਾਈਨ ਲੱਭੀ ਜਾਏ ਜੋ ਇਨਪੁਟ ਫੀਚਰਾਂ ਅਤੇ ਆਉਟਪੁੱਟ ਦੇ ਰਿਸ਼ਤੇ ਨੂੰ ਸਭ ਤੋਂ ਵਧੀਆ ਤਰੀਕੇ ਨਾਲ ਦਰਸਾਵੇ।
ਇਸ ਪਾਠ ਵਿੱਚ, ਸਾਨੂੰ ਪਹੁੰਚ ਪਾਉਣ ਤੋਂ ਪਹਿਲਾਂ ਕੰਸੈਪਟ ਨੂੰ ਸਮਝਣ 'ਤੇ ਧਿਆਨ ਕੇਂਦਰਿਤ ਕਰਾਂਗੇ, ਫਿਰ ਅਗਲੇ ਪੱਧਰ ਦੇ ਰਿਗ੍ਰੈਸ਼ਨ ਤਕਨੀਕਾਂ ਨੂੰ ਵੇਖਾਂਗੇ।
![ਲਾਈਨਰ ਅਤੇ ਪੋਲਿਨੋਮਿਆਲ ਰਿਗ੍ਰੈਸ਼ਨ ਇੰਫੋਗ੍ਰਾਫਿਕ](../../../../translated_images/pa/linear-polynomial.5523c7cb6576ccab.webp)
> ਇੰਫੋਗ੍ਰਾਫਿਕ ਦੁਆਰਾ [ਦਸਾਨੀ ਮਦਿਪੱਲੀ](https://twitter.com/dasani_decoded)
## [ਪ੍ਰੀ-ਲੈਕਚਰ ਕੀਤਾ](https://ff-quizzes.netlify.app/en/ml/)
> ### [ਇਹ ਪਾਠ R ਵਿੱਚ ਉਪਲਬਧ ਹੈ!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
### ਜਾਣ-ਪਛਾਣ
ਹਾਲ ਤੱਕ ਤੁਸੀਂ ਪੰਪਕਿਨ ਦੀ ਕੀਮਤ ਦੇ ਡਾਟਾ ਸੈੱਟ ਵਿਚੋਂ ਕੁਝ ਨਮੂਨਾ ਡਾਟਾ ਨਾਲ ਰਿਗ੍ਰੈਸ਼ਨ ਕੀਹ ਹੈ ਦਾ ਅਨੁਸੰਦਾਨ ਕੀਤਾ ਹੈ। ਤੁਸੀਂ ਇਹ ਮੈਟਪਲਾਟਲਿਬ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਵੀ ਵਿਜੁਆਲਾਈਜ਼ ਕਰ ਚੁੱਕੇ ਹੋ।
ਹੁਣ ਤੁਸੀਂ ML ਲਈ ਰਿਗ੍ਰੈਸ਼ਨ ਵਿੱਚ ਹੋਰ ਗਹਿਰਾਈ ਨਾਲ ਜਾਣ ਦੇ ਲਈ ਤਿਆਰ ਹੋ। ਜਦੋਂਕਿ ਵਿਜੁਆਲਾਈਜ਼ੇਸ਼ਨ ਤੁਹਾਨੂੰ ਡਾਟਾ ਦੇ ਸਮਝਣ ਵਿੱਚ ਮਦਦ ਕਰਦੀ ਹੈ, ਮਸ਼ੀਨ ਲਰਨਿੰਗ ਦੀ ਅਸਲੀ ਤਾਕਤ _ਮਾਡਲਾਂ ਨੂੰ ਟ੍ਰੇਨ_ ਕਰਨ ਵਿੱਚ ਹੈ। ਮਾਡਲ ਇਤਿਹਾਸਕ ਡਾਟਾ 'ਤੇ ਟ੍ਰੇਨ ਕੀਤੇ ਜਾਂਦੇ ਹਨ ਤਾਂ ਜੋ ਡਾਟਾ ਦੀ dependency ਨੂੰ ਆਪਣੇ ਆਪ ਸਮਝ ਸਕਣ, ਅਤੇ ਇਹ ਤੁਹਾਨੂੰ ਨਵੇਂ ਡਾਟਾ ਲਈ ਨਤੀਜੇ ਭਵਿੱਖਬਾਣੀ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦੇ ਹਨ, ਜਿਸਨੂੰ ਮਾਡਲ ਪਹਿਲਾਂ ਨਹੀਂ ਦੇਖਿਆ ਹੁੰਦਾ।
ਇਸ ਪਾਠ ਵਿੱਚ, ਤੁਸੀਂ ਰਿਗ੍ਰੈਸ਼ਨ ਦੇ ਦੋ ਪ੍ਰਕਾਰਾਂ ਬਾਰੇ ਜ਼ਿਆਦਾ ਜਾਣੋਗੇ: _ਮੁਲਭੂਤ ਲਾਈਨਰ ਰਿਗ੍ਰੈਸ਼ਨ_ ਅਤੇ _ਪੋਲਿਨੋਮਿਆਲ ਰਿਗ੍ਰੈਸ਼ਨ_, ਨਾਲ ਹੀ ਇਹ ਤਕਨੀਕਾਂ ਦੇ ਮੈਥਮੈਟਿਕਲ ਅਧਾਰ ਨੂੰ ਸਮਝੋਗੇ। ਉਹ ਮਾਡਲ ਪੰਪਕਿਨਾਂ ਦੀਆਂ ਕੀਮਤਾਂ ਨੂੰ ਵੱਖ-ਵੱਖ ਇਨਪੁਟ ਡਾਟਾ ਦੇ ਅਧਾਰ 'ਤੇ ਅਨੁਮਾਨ ਲਗਾਉਣਗੇ।
[![ਬੱਚਿਆਂ ਲਈ ML - ਲਾਈਨਰ ਰਿਗ੍ਰੈਸ਼ਨ ਸਮਝਣਾ](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "ਬੱਚਿਆਂ ਲਈ ML - ਲਾਈਨਰ ਰਿਗ੍ਰੈਸ਼ਨ ਸਮਝਣਾ")
> 🎥 ਉਪਰੋਕਤ ਚਿੱਤਰ 'ਤੇ ਕਲਿੱਬ ਕਰੋ ਲਾਈਨਰ ਰਿਗ੍ਰੈਸ਼ਨ ਦਾ ਛੋਟਾ ਵੀਡੀਓ ਵੇਰਵਾ ਦੇਖਣ ਲਈ।
> ਇਸ ਸਿਲੇਬਸ ਵਿੱਚ, ਅਸੀਂ ਘੱਟੋ-ਘੱਟ ਗਣਿਤ ਗਿਆਨ ਮੰਨਦੇ ਹਾਂ, ਅਤੇ ਇਹ ਵੱਖ-ਵੱਖ ਖੇਤਰਾਂ ਤੋਂ ਆਏ ਵਿਦਿਆਰਥੀਆਂ ਲਈ ਜਾਣਣਾ ਆਸਾਨ ਬਣਾਉਣਾ ਚਾਹੁੰਦੇ ਹਾਂ, ਇਸ ਲਈ ਨੋਟਾਂ, 🧮 ਕਾਲਆਊਟ, ਡਾਇਗ੍ਰਾਮ ਅਤੇ ਹੋਰ ਸਿੱਖਣ ਵਾਲੇ ਉਪਕਾਰਨਾਂ ਨੂੰ ਧਿਆਨ ਨਾਲ ਵੇਖੋ।
### ਲੋੜੀਂਦੀ ਤਿਆਰੀ
ਤੁਸੀਂ ਹੁਣ ਤੱਕ ਪੰਪਕਿਨ ਡਾਟਾ ਦੀ ਸਰਚਨਾ ਨੂੰ ਸਮਝ ਚੁੱਕੇ ਹੋ ਜੋ ਅਸੀਂ ਇਸ ਪਾਠ ਵਿੱਚ ਵਿਸ਼ਲੇਸ਼ਣ ਕਰ ਰਹੇ ਹਾਂ। ਤੁਹਾਡੇ ਕੋਲ ਇਹ ਇਸ ਪਾਠ ਦੀ _notebook.ipynb_ ਫਾਈਲ ਵਿੱਚ ਪਹਿਲਾਂ ਹੀ ਲੋਡ ਅਤੇ ਸਾਫ ਕੀਤਾ ਹੋਇਆ ਹੈ। ਉਸ ਫਾਈਲ ਵਿੱਚ, ਪੰਪਕਿਨ ਦੀ ਕੀਮਤ ਨੂੰ ਪ੍ਰਤੀ ਬਸ਼ਲ ਵਿਆਪਕ ਕੀਤਾ ਗਿਆ ਹੈ। ਇਹ ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਤੁਸੀਂ ਵਿਜ਼ੂਅਲ ਸਟੂਡੀਓ ਕੋਡ ਚੈਣਲਾਂ ਵਿੱਚ ਇਹ ਨੋਟਬੁੱਕ ਚਲਾ ਸਕਦੇ ਹੋ।
### ਤਿਆਰੀ
ਸਮਝ ਲਈ, ਤੁਸੀਂ ਇਹ ਡਾਟਾ ਲੋਡ ਕਰ ਰਹੇ ਹੋ ਤਾਂ ਜੋ ਤੁਸੀਂ ਉਸ ਤੋਂ ਸਵਾਲ ਪੁੱਛ ਸਕੋ।
- ਪੰਪਕਿਨ ਖਰੀਦਣ ਲਈ ਸਭ ਤੋਂ ਵਧੀਆ ਸਮਾਂ ਕਦੋਂ ਹੈ?
- ਮਿਨੀਏਚਰ ਪੰਪਕਿਨਾਂ ਦੇ ਇੱਕ ਕੇਸ ਦੀ ਕੀਮਤ ਕੀ ਉਮੀਦ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ?
- ਕੀ ਮੈਂ ਅੱਧਾ-ਬਸ਼ਲ ਟੋਕਰੀਵਾਲੇ ਖਰੀਦਾਂ ਜਾਂ 1 1/9 ਬਸ਼ਲ ਬਾਕਸ ਦੁਆਰਾ?
ਆਓ ਇਸ ਡਾਟਾ ਵਿੱਚ ਹੋਰ ਖੋਜ ਕਰੀਏ।
ਪਿਛਲੇ ਪਾਠ ਵਿੱਚ, ਤੁਸੀਂ ਇੱਕ ਪੈਂਡਾਸ ਡਾਟਾ ਫਰੇਮ ਬਣਾਇਆ ਅਤੇ ਅਸਲ ਡਾਟਾ ਸੈੱਟ ਦੇ ਹਿੱਸੇ ਨਾਲ ਭਰਿਆ, ਮੁੱਲ ਦੀ ਸਟੈਂਡਰਡਾਈਜ਼ਿੰਗ ਬਸ਼ਲ ਦੇ ਮੁਤਾਬਕ ਕੀਤੀ। ਪਰ ਇਹ ਕਰਨ ਨਾਲ, ਤੁਸੀਂ ਸਿਰਫ ਲਗਭਗ 400 ਡਾਟਾਪੋਇੰਟ ਅਰਜਾ ਕਰ ਸਕੇ ਅਤੇ ਸਿਰਫ ਪਤਝੜ ਮਹੀਨਿਆਂ ਲਈ।
ਇਸ ਪਾਠ ਦੇ ਨਾਲ ਜੁੜੇ ਨੋਟਬੁੱਕ ਵਿੱਚ ਪਹਿਲਾਂ ਹੀ ਲੋਡ ਕੀਤਾ ਡਾਟਾ ਦੇਖੋ। ਡਾਟਾ ਪਹਿਲਾਂ ਹੀ ਲੋਡ ਹੈ ਅਤੇ ਇੱਕ ਬੁਨਿਆਦੀ scatterplot ਇਹ ਦਰਸਾਉਂਦਾ ਹੈ ਕਿ ਮਹੀਨੇ ਦਾ ਡਾਟਾ ਕਿਵੇਂ ਹੈ। ਸਾਡੀ ਕੋਸ਼ਿਸ਼ ਹੋ ਸਕਦੀ ਹੈ ਕਿ ਇਸ ਡਾਟਾ ਦੀ ਕੁਦਰਤ ਨੂੰ ਹੋਰ ਸਾਫ ਕਰਕੇ ਭਲਕੇ ਜਾਣਕਾਰੀ ਮਿਲੇ।
## ਇੱਕ ਲਾਈਨਰ ਰਿਗ੍ਰੈਸ਼ਨ ਲਾਈਨ
ਜਿਵੇਂ ਤੁਸੀਂ ਪਾਠ 1 ਵਿੱਚ ਸਿੱਖਿਆ ਸੀ, ਲਾਈਨਰ ਰਿਗ੍ਰੈਸ਼ਨ ਦਾ ਮੁੱਖ ਉਦੇਸ਼ ਇੱਕ ਅਜਿਹੀ ਲਾਈਨ ਦੁਆਰਾ:
- **ਵিৱਰਣਾਤਮਕ ਸੰਬੰਧ** ਦਿਖਾਉਣਾ। ਵਿਆਪਕ ਸੰਬੰਧ ਦਰਸਾਉਣਾ
- **ਭਵਿੱਖਬਾਣੀ ਕਰਨੀ**। ਇਹ ਠੀਕ ਭਵਿੱਖਬਾਣੀ ਕਰਨੀ ਕਿ ਨਵਾਂ ਡਾਟਾਪੋਇੰਟ ਕਿਹੜੇ ਸਥਾਨ ਤੇ ਆਵੇਗਾ।
ਇਹ ਆਮ ਤੌਰ ਤੇ **ਲੀਸਟ-ਸਕਵੈਅਰਜ਼ ਰਿਗ੍ਰੈਸ਼ਨ** ਦੀ ਪ੍ਰਕਿਰਿਆ ਹੁੰਦੀ ਹੈ। "ਲੀਸਟ-ਸਕਵੈਅਰਜ਼" ਸ਼ਬਦ ਮਾਡਲ ਵਿੱਚ ਕੁੱਲ ਗਲਤੀ ਨੂੰ ਘਟਾਉਣ ਦੀ ਪ੍ਰਕਿਰਿਆ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ। ਹਰ ਡਾਟਾਪੋਇੰਟ ਲਈ ਅਸੀਂ ਲਕੀਰ ਅਤੇ ਅਸਲ ਨੁਕਤੇ ਵਿਚਕਾਰ ਖੜ੍ਹੇ ਦੇ ਉਚਾਈ ਮੂਲ ਨੂੰ ਮਾਪਦੇ ਹਾਂ (ਜਿਸ ਨੂੰ ਰੇਜ਼ਿਡੂਅਲ ਕਹਿੰਦੇ ਹਨ)।
ਅਸੀਂ ਦੁੱਧਰ ਮੂਲਾਂ ਨੂੰ ਦੋ ਮੁੱਖ ਕਾਰਨਾਂ ਕਰਕੇ ਵਰਗ ਕਰਦੇ ਹਾਂ:
1. **ਦਿਸ਼ਾ ਤੋਂ ਵੱਧ ਮਹੱਤਵ**: ਅਸੀਂ ਚਾਹੁੰਦੇ ਹਾਂ ਕਿ -5 ਵੱਲੀ ਗਲਤੀ +5 ਵਾਂਗੋਂ ਸਮਾਨ ਦਾ ਮੂਲ ਰੱਖੇ। ਵਰਗ ਕਰਨ ਨਾਲ ਸਾਰੇ ਮੁੱਲ ਸਕਾਰਾਤਮਕ ਹੋ ਜਾਂਦੇ ਹਨ।
2. **ਆਉਟਲਾਇਅਰਜ਼ ਨੂੰ ਸਜ਼ਾ ਦੇਣਾ**: ਵਰਗ ਕਰਨ ਨਾਲ ਵੱਡੀਆਂ ਗਲਤੀਆਂ ਨੂੰ ਵੱਧ ਭਾਰ ਮਿਲਦਾ ਹੈ, ਜਿਸ ਨਾਲ ਲਾਈਨ ਉਹਨਾਂ ਨੁਕਤਿਆਂ ਤੋਂ ਨੇੜੇ ਰਹਿੰਦੀ ਹੈ ਜੋ ਦੂਰ ਹਨ।
ਫਿਰ ਅਸੀਂ ਇਹ ਸਾਰੇ ਵਰਗ ਮੁੱਲ ਜੋੜਦੇ ਹਾਂ। ਸਾਡੀ ਕੋਸ਼ਿਸ਼ ਹੈ ਕਿ ਉਹ ਖਾਸ ਲਾਈਨ ਲੱਭੀਏ ਜਿੱਥੇ ਇਹ ਜੋੜ ਸਭ ਤੋਂ ਘੱਟ ਹੋਵੇ — ਇਸ ਲਈ ਇਸਨੂੰ "ਲੀਸਟ-ਸਕਵੈਅਰਜ਼" ਕਹਿੰਦੇ ਹਨ।
> **🧮 ਮੈਨੂੰ ਗਣਿਤ ਦਿਖਾਓ**
>
> ਇਹ ਲਾਈਨ, ਜਿਸਨੂੰ _ਬਿਹਤਰ ਫਿੱਟ ਲਾਈਨ_ ਕਹਿੰਦੇ ਹਨ, [ਇੱਕ ਸਮੀਕਰਨ](https://en.wikipedia.org/wiki/Simple_linear_regression) ਨਾਲ ਦਰਸਾਈ ਜਾਂਦੀ ਹੈ:
>
> ```
> Y = a + bX
> ```
>
> `X` ਨੂੰ 'ਵਿਆਖਿਆਤਮਕ ਚਰ' ਕਹਿੰਦੇ ਹਨ। `Y` ਨੂੰ 'ਨਲੀ ਚਰ' ਕਹਿੰਦੇ ਹਨ। ਲਾਈਨ ਦਾ ਢਲਾਨ `b` ਹੈ ਅਤੇ `a` y-ਇੰਟਰਸੈਪਟ ਹੈ, ਜੋ ਇਹ ਦਰਸਾਉਂਦਾ ਹੈ ਕਿ ਜਦੋਂ `X = 0` ਹੋਵੇ ਤਾਂ `Y` ਦੀ ਕੀਮਤ ਕੀ ਹੈ।
>
>![ਢਲਾਨ ਦੀ ਗਣਨਾ ਕਰੋ](../../../../translated_images/pa/slope.f3c9d5910ddbfcf9.webp)
>
> ਪਹਿਲਾਂ ਢਲਾਨ `b` ਦੀ ਗਣਨਾ ਕਰੋ। ਇੰਫੋਗ੍ਰਾਫਿਕ ਦੁਆਰਾ [ਜੈਨ ਲੂਪਰ](https://twitter.com/jenlooper)
>
> ਦੂਜੇ ਸ਼ਬਦਾਂ ਵਿੱਚ, ਸਾਡੇ ਪੰਪਕਿਨ ਡਾਟਾ ਦੇ ਮੁੱਖ ਸਵਾਲ: "ਮਹੀਨੇ ਦੇ ਅਨੁਸਾਰ ਪ੍ਰਤੀ ਬਸ਼ਲ ਪੰਪਕਿਨ ਦੀ ਕੀਮਤ ਦੀ ਭਵਿੱਖਬਾਣੀ ਕਰੋ", ਵਿੱਚ `X` ਕੀਮਤ ਨੂੰ ਦਰਸਾਏਗਾ ਅਤੇ `Y` ਮਾਹ ਉਦੇਸ਼ ਸਮਝਾਏਗਾ।
>
>![ਸਮੀਕਰਨ ਪੂਰਾ ਕਰੋ](../../../../translated_images/pa/calculation.a209813050a1ddb1.webp)
>
> `Y` ਦੀ ਕੀਮਤ ਦੀ ਗਣਨਾ ਕਰੋ। ਜੇ ਤੁਸੀਂ ਲੱਗਭਗ $4 ਦੇ ਕਦਰ ਦੇ ਰਹੇ ਹੋ, ਤਾਂ ਇਹ ਜ਼ਰੂਰ ਅਪ੍ਰੈਲ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ! ਇੰਫੋਗ੍ਰਾਫਿਕ ਦੁਆਰਾ [ਜੈਨ ਲੂਪਰ](https://twitter.com/jenlooper)
>
> ਸਮੀਕਰਨ ਜੋ ਲਾਈਨ ਦੀ ਗਣਨਾ ਕਰਦਾ ਹੈ ਉਸਨੂੰ ਢਲਾਨ ਨੂੰ ਦਰਸਾਉਣਾ ਚਾਹੀਦਾ ਹੈ ਜੋ ਇਸਸ਼ਨਾਲ ਇੰਟਰਸੈਪਟ ਤੇ ਨਿਰਭਰ ਕਰਦਾ ਹੈ, ਜਾਂ ਜਿੱਥੇ `X = 0` ਹੋਵੇ ਤਾਂ `Y` ਕਿੱਥੇ ਹੈ।
>
> ਤੁਸੀਂ ਇਹ ਮੁਲ್ಯਾਂ ਦੀ ਗਣਨਾ ਕਰਨ ਦੇ ਤਰੀਕੇ ਨੂੰ [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) ਵੈੱਬਸਾਈਟ 'ਤੇ ਵੇਖ ਸਕਦੇ ਹੋ। ਇਸ ਨਾਲ ਨਾਲ [ਇਸ Least-squares ਕੈਲਕੂਲੇਟਰ](https://www.mathsisfun.com/data/least-squares-calculator.html) ਨੂੰ ਵੀ ਵੇਖੋ ਜੋ ਨੰਬਰਾਂ ਦੀਆਂ ਕਦਰਾ ਲਾਈਨ ਉੱਤੇ ਕਿਵੇਂ ਅਸਰ ਪਾਂਦੀਆਂ ਹਨ।
## ਸਹ ਸਬੰਧ
ਇਕ ਹੋਰ ਸ਼ਬਦ ਜਾਣਣਾ ਹੈ ਜੋ ਹੈ **ਸਹ ਸਬੰਧ ਗੁਣਕ** ਜੋ ਦਿੱਤੇ ਗਏ X ਅਤੇ Y ਚਰਾਂ ਵਿਚਕਾਰ ਹੁੰਦਾ ਹੈ। scatterplot ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਤੁਸੀਂ ਇਸ ਗੁਣਕ ਨੂੰ ਜਲਦੀ ਵੇਖ ਸਕਦੇ ਹੋ। ਜੇ ਡਾਟਾਪੋਇੰਟ ਇੱਕ ਸੁਸਮਤ ਲਾਈਨ ਵਿੱਚ ਵੰਡੇ ਹੋਏ ਹਨ ਤਾਂ ਉਹ ਉੱਚ ਸਹ ਸਬੰਧ ਦਰਸਾਉਂਦਾ ਹੈ, ਪਰ ਜੇ ਡਾਟਾਪੋਇੰਟ ਹਰ ਜਗ੍ਹਾ ਫੈਲੇ ਹੋਏ ਹਨ ਤਾਂ ਇਹ ਘੱਟ ਸਹ ਸਬੰਧ ਹੈ।
ਇੱਕ ਵਧੀਆ ਲਾਈਨਰ ਰਿਗ੍ਰੈਸ਼ਨ ਮਾਡਲ ਉਹ ਹੋਵੇਗਾ ਜਿਸ ਦਾ ਸਹ ਸਬੰਧ ਗੁਣਕ ਵਧੀਆ (1 ਦੇ ਨੇੜੇ 0 ਨਾਲੋਂ) ਹੋਵੇ ਅਤੇ Least-Squares Regression ਤਰੀਕੇ ਨਾਲ ਲਾਈਨ ਰਿਗ੍ਰੈਸ਼ਨ ਨਾਲ ਬਣਾਇਆ ਗਿਆ ਹੋਵੇ।
✅ ਇਸ ਪਾਠ ਨਾਲ ਜੁੜੇ ਨੋਟਬੁੱਕ ਨੂੰ ਚਲਾਓ ਅਤੇ ਮਹੀਨੇ ਤੋਂ ਕੀਮਤ scatterplot ਵੇਖੋ। ਕੀ ਪੰਪਕਿਨ ਵਿਕਰੀ ਲਈ ਮਹੀਨੇ ਅਤੇ ਕੀਮਤ ਦਾ ਡਾਟਾ ਤੇਰੇ ਵਿਜੁਅਲ ਵਿਵੇਚਨਾ ਮੁਤਾਬਕ ਉੱਚ ਜਾਂ ਘੱਟ ਸਹ ਸਬੰਧ ਦਿਖਾਉਂਦਾ ਹੈ? ਕੀ ਇਹ ਬਦਲਦਾ ਹੈ ਜੇ ਤੁਸੀਂ `Month` ਦੇ ਬਜਾਏ ਵੱਧ ਸਾਹੀ ਮਾਪ ਵਰਤੋਂ, ਜਿਵੇਂ ਕਿ *ਸਾਲ ਦਾ ਦਿਨ* (ਜਿਵੇਂ ਕਿ ਸਾਲ ਦੀ ਸ਼ੁਰੂਆਤ ਤੋਂ ਲੰਘੇ ਦਿਨਾਂ ਦੀ ਗਿਣਤੀ)?
ਹੇਠਾਂ ਦਿੱਤੇ ਕੋਡ ਵਿੱਚ ਅਸੀਂ ਮੰਨ ਰਹੇ ਹਾਂ ਕਿ ਸਾਡੇ ਕੋਲ ਸਾਫ ਕੀਤਾ ਹੋਇਆ ਡਾਟਾ ਹੈ ਅਤੇ ਇੱਕ ਡਾਟਾ ਫਰੇਮ ਹੈ ਜਿਸ ਦਾ ਨਾਮ `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)
```
ਹੁਣ ਜਦੋਂ ਕਿ ਤੁਹਾਨੂੰ ਲਾਈਨਰ ਰਿਗ੍ਰੈਸ਼ਨ ਦੇ ਮੈਥਮੈਟਿਕ ਦਾ ਬੂਝ ਹੋ ਗਿਆ ਹੈ, ਆਓ ਇਕ ਰਿਗ੍ਰੈਸ਼ਨ ਮਾਡਲ ਬਣਾਈਏ ਤਾਂ ਜੋ ਵੇਖੀਏ ਕਿ ਅਸੀਂ ਅਨੁਮਾਨ ਲਗਾ ਸਕਦੇ ਹਾਂ ਕਿ ਕਿਹੜਾ ਪੰਪਕਿਨ ਪੈਕੇਜ ਸਭ ਤੋਂ ਚੰਗੀ ਕੀਮਤ ਲਈ ਹੋਵੇਗਾ। ਕੈਸੀਨੂੰ ਛੁੱਟੀ ਵਾਲੀ ਪੁੱਛ ਲਈ ਪੰਪਕਿਨ ਖਰੀਦਣ ਵਾਲਾ ਇਹ ਜਾਣਕਾਰੀ ਚਾਹੀਦੀ ਹੋ ਸਕਦੀ ਹੈ ਤਾਂ ਜੋ ਉਹ ਆਪਣੀ ਖਰੀਦ ਦੀ ਯੋਜਨਾ ਨੂੰ ਵਧੀਆ ਬਣਾ ਸਕੇ।
## ਸਹ ਸਬੰਧ ਚਾਂਹਣਾ
[![ਬੱਚਿਆਂ ਲਈ ML - ਸਹ ਸਬੰਧ ਲੱਭਣਾ: ਲਾਈਨਰ ਰਿਗ੍ਰੈਸ਼ਨ ਦੀ ਚਾਬੀ](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "ਬੱਚਿਆਂ ਲਈ ML - ਸਹ ਸਬੰਧ ਲੱਭਣਾ: ਲਾਈਨਰ ਰਿਗ੍ਰੈਸ਼ਨ ਦੀ ਚਾਬੀ")
> 🎥 ਉਪਰੋਕਤ ਚਿੱਤਰ 'ਤੇ ਕਲਿੱਬ ਕਰੋ correlation ਦਾ ਛੋਟਾ ਵੀਡੀਓ ਵੇਰਵਾ ਵੇਖਣ ਲਈ।
ਪਿਛਲੇ ਪਾਠ ਵਿੱਚ ਤੁਸੀਂ ਸ਼ਾਇਦ ਵੇਖਿਆ ਹੈ ਕਿ ਵੱਖ-ਵੱਖ ਮਹੀਨਿਆਂ ਵਾਸਤੇ ਔਸਤ ਕੀਮਤ ਇਸ ਤਰ੍ਹਾਂ ਦਿੱਸਦੀ ਹੈ:
<img alt="ਮਹੀਨੇ ਅਨੁਸਾਰ ਔਸਤ ਕੀਮਤ" src="../../../../translated_images/pa/barchart.a833ea9194346d76.webp" width="50%"/>
ਇਸ ਤੋਂ ਇਤਲਾ ਮਿਲਦਾ ਹੈ ਕਿ ਕੁਝ ਸਹ ਸਬੰਧ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ, ਅਤੇ ਅਸੀਂ ਲਾਈਨਰ ਰਿਗ੍ਰੈਸ਼ਨ ਮਾਡਲ ਲਰ ਕੇ `Month` ਅਤੇ `Price`, ਜਾਂ `DayOfYear` ਅਤੇ `Price` ਦਰਮਿਆਨ ਰਿਸ਼ਤੇ ਦੀ ਭਵਿੱਖਬਾਣੀ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਸਕਦੇ ਹਾਂ। ਇੱਥੇ scatterplot ਹੈ ਜੋ ਦੂਜਾ ਸੰਬੰਧ ਦਰਸਾਉਂਦਾ ਹੈ:
<img alt="ਕੀਮਤ ਵੱਖ-ਵੱਖ ਦਿਨ scatterplot" src="../../../../translated_images/pa/scatter-dayofyear.bc171c189c9fd553.webp" width="50%" />
ਆਓ ਦੇਖੀਏ ਕਿ `corr` ਫੰਕਸ਼ਨ ਨਾਲ ਕੋਈ correlation ਹੈ ਜਾਂ ਨਹੀਂ:
```python
print(new_pumpkins['Month'].corr(new_pumpkins['Price']))
print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price']))
```
ਲੱਗਦਾ ਹੈ correlation ਕਾਫੀ ਛੋਟਾ ਹੈ, -0.15 `Month` ਨਾਲ ਅਤੇ -0.17 `DayOfMonth` ਨਾਲ, ਪਰ ਹੋ ਸਕਦਾ ਹੈ ਕੋਈ ਹੋਰ ਮਹੱਤਵਪੂਰਨ ਸੰਬੰਧ ਹੋਵੇ। ਲੱਗਦਾ ਹੈ ਕਿ ਕੀਮਤਾਂ ਦੇ ਵੱਖ-ਵੱਖ ਕੁਲੱਸਟਰ ਵੱਖਰੇ ਪੰਪਕਿਨ ਕਿਸਮਾਂ ਨਾਲ ਜੁੜੇ ਹੋਏ ਹਨ। ਇਸ ਸਿਧਾਂਤ ਦੀ ਪੁਸ਼ਟੀ ਕਰਨ ਲਈ, ਆਓ ਹਰ ਪੰਪਕਿਨ ਸ਼੍ਰੇਣੀ ਨੂੰ ਵੱਖਰੀ ਰੰਗ ਨਾਲ ਪਲਾਟ ਕਰੀਏ। `scatter` ਪਲਾਟਿੰਗ ਫੰਕਸ਼ਨ ਨੂੰ `ax` ਪੈਰਾਮੀਟਰ ਦੇ ਕੇ ਸਾਰੇ ਨੁਕਤੇ ਇੱਕੋ ਗ੍ਰਾਫ ‘ਤੇ ਪਲਾਟ ਕੀਤੇ ਜਾ ਸਕਦੇ ਹਨ:
```python
ax=None
colors = ['red','blue','green','yellow']
for i,var in enumerate(new_pumpkins['Variety'].unique()):
df = new_pumpkins[new_pumpkins['Variety']==var]
ax = df.plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var)
```
<img alt="ਕੀਮਤ ਵੱਖ-ਵੱਖ ਦਿਨ scatterplot ਰੰਗ ਨਾਲ" src="../../../../translated_images/pa/scatter-dayofyear-color.65790faefbb9d54f.webp" width="50%" />
ਸਾਡੇ ਖੋਜ ਨਾਲ ਪਤਾ ਲੱਗਦਾ ਹੈ ਕਿ ਕਿਸਮ ਦਾ ਕੁੱਲ ਕੀਮਤ 'ਤੇ ਮਹੱਤਵ ਵੱਧ ਹੈ ਬਜਾਏ ਕਿ ਵਿਕਰੀ ਦੀ ਅਸਲੀ ਤਾਰੀਖ ਦਾ। ਅਸੀਂ ਇਹ ਬਾਰ ਗ੍ਰਾਫ ਨਾਲ ਵੇਖ ਸਕਦੇ ਹਾਂ:
```python
new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar')
```
<img alt="ਕੀਮਤ ਵੱਖ ਕੇਸ ਬ੍ਹਿੰਨਤਾ ਦਾ ਬਾਰ ਗ੍ਰਾਫ" src="../../../../translated_images/pa/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
ਆਓ ਇੱਕ ਪੰਪਕਿਨ ਕਿਸਮ 'pie type' 'ਤੇ ਫੋਕਸ ਕਰੀਏ, ਅਤੇ ਵੇਖੀਏ ਕਿ ਕਿਵੇਂ ਮਿਤੀ ਦਾ ਕੀਮਤ ‘ਤੇ ਅਸਰ ਹੈ:
```python
pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE']
pie_pumpkins.plot.scatter('DayOfYear','Price')
```
<img alt="ਕੀਮਤ ਵੱਖ ਸਾਲ ਦੇ ਦਿਨ scatterplot" src="../../../../translated_images/pa/pie-pumpkins-scatter.d14f9804a53f927e.webp" width="50%" />
ਜੇ ਅਸੀਂ ਹੁਣ `Price` ਅਤੇ `DayOfYear` ਵਿਚਕਾਰ correlation `corr` ਫੰਕਸ਼ਨ ਨਾਲ ਕੈਲਕੁਲੇਟ ਕਰੀਏ ਤਾਂ ਲਗਭਗ `-0.27` ਆਵੇਗਾ - ਜੋ ਦੱਸਦਾ ਹੈ ਕਿ ਭਵਿੱਖਬਾਣੀ ਮਾਡਲ ਸਿੱਖਾਉਣਾ ਮਾਨਯੋਗ ਹੈ।
> ਲਾਈਨਰ ਰਿਗ੍ਰੈਸ਼ਨ ਮਾਡਲ ਸਿੱਖਾਉਣ ਤੋਂ ਪਹਿਲਾਂ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਣਾ ਜ਼ਰੂਰੀ ਹੈ ਕਿ ਸਾਡਾ ਡਾਟਾ ਸਾਫ ਹੈ। ਲਾਈਨਰ ਰਿਗ੍ਰੈਸ਼ਨ ਖਾਲੀ ਮੁੱਲਾਂ ਨਾਲ ਚੰਗੀ ਤਰ੍ਹਾਂ ਕੰਮ ਨਹੀਂ ਕਰਦਾ, ਇਸ ਲਈ ਸਾਰੇ ਖਾਲੀ ਸੈੱਲ ਹਟਾਉਣਾ ਸਹੀ ਹੈ:
```python
pie_pumpkins.dropna(inplace=True)
pie_pumpkins.info()
```
ਦੂਜਾ ਤਰੀਕਾ ਇਹ ਹੋਵੇਗਾ ਕਿ ਖਾਲੀ ਮੁੱਲਾਂ ਨੂੰ ਉਸੇ ਕਾਲਮ ਦੇ ਔਸਤ ਮੁੱਲ ਨਾਲ ਭਰ ਦਿੱਤਾ ਜਾਵੇ।
## ਸਧਾਰਣ ਲਾਈਨਰ ਰਿਗ੍ਰੈਸ਼ਨ
[![ਬੱਚਿਆਂ ਲਈ ML - ਲਾਈਨਰ ਅਤੇ ਪੋਲਿਨੋਮਿਆਲ ਰਿਗ੍ਰੈਸ਼ਨ ਸਕਾਈਕਿਟ-ਲੈਕਰਨ ਦੀ ਵਰਤੋਂ ਨਾਲ](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "ਬੱਚਿਆਂ ਲਈ ML - ਲਾਈਨਰ ਅਤੇ ਪੋਲਿਨੋਮਿਆਲ ਰਿਗ੍ਰੈਸ਼ਨ ਸਕਾਈਕਿਟ-ਲੈਕਰਨ ਦੀ ਵਰਤੋਂ ਨਾਲ")
> 🎥 ਉਪਰ ਦੀ ਤਸਵੀਰ ਤੇ ਕਲਿੱਬ ਕਰੋ ਲਾਈਨਰ ਅਤੇ ਪੋਲਿਨੋਮਿਆਲ ਰਿਗ੍ਰੈਸ਼ਨ ਦਾ ਛੋਟਾ ਵੀਡੀਓ ਵੇਰਵਾ ਵੇਖਣ ਲਈ।
ਸਾਡਾ ਲਾਈਨਰ ਰਿਗ੍ਰੈਸ਼ਨ ਮਾਡਲ ਸਿੱਖਾਉਣ ਲਈ, ਅਸੀਂ **Scikit-learn** ਲਾਇਬ੍ਰੇਰੀ ਦੀ ਵਰਤੋਂ ਕਰਾਂਗੇ।
```python
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
```
ਅਸੀਂ ਪਹਿਲਾਂ ਇਨਪੁਟ ਮੁੱਲ (ਫੀਚਰ) ਅਤੇ ਉਮੀਦ ਕੀਤੀ ਆਉਟਪੁੱਟ (ਲੇਬਲ) ਨੂੰ ਵੱਖਰੇ numpy arrays ਵਿੱਚ ਵੰਡਦੇ ਹਾਂ:
```python
X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1)
y = pie_pumpkins['Price']
```
> ਧਿਆਨ ਦਿਓ ਕਿ ਅਸੀਂ ਇਨਪੁਟ ਡਾਟਾ ਵਿੱਚ `reshape` ਕਰਨਾ ਪਿਆ ਤਾਂ ਜੋ Linear Regression ਪੈਕੇਜ ਇਸ ਨੂੰ ਸਹੀ ਸਮਝ ਸਕੇ। Linear Regression ਨੂੰ 2D-arrayExpectedInput ਜਾਂ input ਦੀ ਲੋੜ ਹੋਂਦੀ ਹੈ, ਜਿੱਥੇ ਆਰੇ ਦੇ ਹਰ ਰੋ ਵਿੱਚ ਫੀਚਰਾਂ ਦਾ ਵੈਕਟਰ ਹੁੰਦਾ ਹੈ। ਸਾਡੇ ਮਾਮਲੇ ਵਿੱਚ ਚੂੰਕਿ ਸਿਰਫ ਇੱਕ ਇਨਪੁਟ ਹੈ - ਸਾਨੂੰ ਐਨੀ ਰੇਸ਼ਪ N×1 ਦੀ ਲੋੜ ਹੈ, ਜਿੱਥੇ N ਡਾਟਾ ਸੈੱਟ ਦਾ ਆਕਾਰ ਹੈ।
ਫਿਰ, ਅਸੀਂ ਡਾਟਾ ਨੂੰ ਟ੍ਰੇਨ ਅਤੇ ਟੈਸਟ ਸੈੱਟਾਂ ਵਿੱਚ ਵੰਡਦੇ ਹਾਂ ਤਾਂ ਜੋ ਟ੍ਰੇਨਿੰਗ ਬਾਅਦ ਮਾਡਲ ਜਾਚਿਆ ਜਾ ਸਕੇ:
```python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
```
ਆਖਿਰ ਵਿੱਚ, Linear Regression ਮਾਡਲ ਨੂੰ ਸਿੱਖਾਉਣਾ ਸਿਰਫ ਦੋ ਕੋਡ ਲਾਈਨਾਂ ਲੈਂਦਾ ਹੈ। ਅਸੀਂ `LinearRegression` ਉਬਜੈਕਟ ਬਣਾਉਂਦੇ ਹਾਂ, ਅਤੇ `fit` ਵਿਧੀ ਨਾਲ ਇਸ ਨੂੰ ਡਾਟਾ 'ਤੇ ਫਿੱਟ ਕਰਦੇ ਹਾਂ:
```python
lin_reg = LinearRegression()
lin_reg.fit(X_train,y_train)
```
`LinearRegression` ਔਬਜੈਕਟ `fit` ਕਰਨ ਤੋਂ ਬਾਅਦ ਰਿਗ੍ਰੈਸ਼ਨ ਦੇ ਸਾਰੇ ਕੋਐਫੀਸ਼ਿਅੰਟ ਰੱਖਦਾ ਹੈ, ਜਿਨ੍ਹਾਂ ਨੂੰ ਤੁਸੀਂ `.coef_` ਪ੍ਰਾਪਰਟੀ ਰਾਹੀਂ ਪਹੁੰਚ ਸਕਦੇ ਹੋ। ਸਾਡੇ ਮਾਮਲੇ ਵਿੱਚ, ਸਿਰਫ਼ ਇੱਕ ਕੋਐਫੀਸ਼ਿਅੰਟ ਹੈ, ਜੋ ਲੱਗਭਗ `-0.017` ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ। ਇਸਦਾ ਅਰਥ ਹੈ ਕਿ ਕੀਮਤਾਂ ਸਮੇਂ ਦੇ ਨਾਲ ਥੋੜ੍ਹ੍ਹਾ ਘਟਦੀਆਂ ਹਨ, ਪਰ ਬਹੁਤ ਜ਼ਿਆਦਾ ਨਹੀਂ, ਲਗਭਗ 2 ਸੈਂਟ ਪ੍ਰਤੀ ਦਿਨ। ਅਸੀਂ ਰਿਗ੍ਰੈਸ਼ਨ ਦੇ Y-ਅਕਸ਼ ਨਾਲ ਟਕਰਾਉਣ ਵਾਲਾ ਬਿੰਦੂ `lin_reg.intercept_` ਰਾਹੀਂ ਵੀ ਵੇਖ ਸਕਦੇ ਹਾਂ - ਸਾਡੇ ਮਾਮਲੇ ਵਿੱਚ ਇਹ ਲਗਭਗ `21` ਹੋਵੇਗਾ, ਜੋ ਸਾਲ ਦੀ ਸ਼ੁਰੂਆਤ ਉੱਤੇ ਕੀਮਤ ਦਰਸਾਉਂਦਾ ਹੈ।
ਸਾਡੇ ਮਾਡਲ ਦੀ ਸਹੀ ਤülਾ ਕਰਨ ਲਈ, ਅਸੀਂ ਟੈਸਟ ਡੈਟਾ ਸੈਟ 'ਤੇ ਕੀਮਤਾਂ ਦੀ ਭਵਿੱਖਵਾਣੀ ਕਰ ਸਕਦੇ ਹਾਂ, ਅਤੇ ਫਿਰ ਵੇਖ ਸਕਦੇ ਹਾਂ ਕਿ ਸਾਡੇ ਅਨੁਮਾਨ ਨੇ ਉਮੀਦ ਕੀਤੀ ਕੀਮਤਾਂ ਨਾਲ ਕਿੰਨਾ ਨੇੜੇ ਹਨ। ਇਹ ਦਰੁਸਤੀਆਂ ਨੂੰ ਮੀਨ ਸਕਵੇਅਰ ਏਰਰ (MSE) ਮੈਟ੍ਰਿਕਸ ਰਾਹੀਂ ਮਾਪਿਆ ਜਾ ਸਕਦਾ ਹੈ, ਜੋ ਉਮੀਦ ਕੀਤੇ ਅਤੇ ਅਨੁਮਾਨ ਕੀਤੇ ਮੁੱਲਾਂ ਵਿਚਕਾਰ ਸਾਰੇ ਵਰਗਾਂ ਦੇ ਅੰਤਰਾਂ ਦਾ ਮੀਨ ਹੁੰਦਾ ਹੈ।
```python
pred = lin_reg.predict(X_test)
mse = np.sqrt(mean_squared_error(y_test,pred))
print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')
```
ਸਾਡੀ ਗਲਤੀ ਲਗਭਗ 2 ਪੌਇੰਟ ਹੈ, ਜੋ ~17% ਹੈ। ਬਹੁਤ ਚੰਗਾ ਨਹੀਂ। ਮਾਡਲ ਦੀ ਗੁਣਵੱਤਾ ਦਾ ਇਕ ਹੋਰ ਸੰਕੇਤਕ ਹੈ **ਕੋਐਫੀਸ਼ਿਅੰਟ ਆਫ ਡਿਟਰਮੀਨੇਸ਼ਨ**, ਜਿਸ ਨੂੰ ਇਸ ਤਰ੍ਹਾਂ ਪ੍ਰਾਪਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ:
```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="../../../../translated_images/pa/linear-results.f7c3552c85b0ed1c.webp" width="50%" />
## ਪੋਲੀਨੋਮਿਯਲ ਰਿਗ੍ਰੈਸ਼ਨ
ਲੀਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਦਾ ਇੱਕ ਹੋਰ ਪ੍ਰਕਾਰ ਪੋਲੀਨੋਮਿਯਲ ਰਿਗ੍ਰੈਸ਼ਨ ਹੈ। ਜਦ ਕਦੇ ਕਈ ਵਾਰੀ ਇਨਪੁਟ ਵੈਰੀਏਬਲਾਂ ਵਿਚਕਾਰ ਲੀਨੀਅਰ ਸੰਬੰਧ ਹੁੰਦੇ ਹਨ - ਜਿਵੇਂ ਕਿ ਵਾਲੀ ਭਰੀ ਵੱਡੀ ਹੁੰਦੀ ਹੈ, ਕੀਮਤ ਵਧਦੀ ਹੈ - ਪਰ ਕਈ ਵਾਰੀ ਉਹ ਸੰਬੰਧ ਸਿੱਧੀ ਲਾਈਨ ਜਾਂ ਸਮਤਲ 'ਤੇ ਤਿਆਰ ਨਹੀਂ ਕੀਤੇ ਜਾ ਸਕਦੇ।
✅ ਇਹਾਂ ਕੁਝ ਹੋਰ ਉਦਾਹਰਨਾਂ ਹਨ [ਜੋ Polynomial Regression ਵਰਤ ਸਕਦੀਆਂ ਹਨ](https://online.stat.psu.edu/stat501/lesson/9/9.8)
ਦਿਨ ਅਤੇ ਕੀਮਤ ਵਿਚਕਾਰ ਦੇ ਸੰਬੰਧ ਨੂੰ ਫਿਰ ਤੋਂ ਵੇਖੋ। ਕੀ ਇਹ ਸਕੈਟਰਪਲੌਟ ਐਸਾ ਲੱਗਦਾ ਹੈ ਕਿ ਇਸਨੂੰ ਜ਼ਰੂਰੀ ਤੌਰ 'ਤੇ ਸਿੱਧੀ ਲਾਈਨ ਨਾਲ ਵਿਸ਼ਲੇਸ਼ਣ ਕੀਤਾ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ? ਕੀ ਕੀਮਤਾਂ ਫਲਕਟੂਏਟ ਨਹੀਂ ਹੋ ਸਕਦੀਆਂ? ਇਸ ਮਾਮਲੇ ਵਿੱਚ, ਤੁਸੀਂ ਪੋਲੀਨੋਮਿਯਲ ਰਿਗ੍ਰੈਸ਼ਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਸਕਦੇ ਹੋ।
✅ ਪੋਲੀਨੋਮਿਯਲਜ਼ ਗਣਿਤਕ ਬਿਆਨ ਹੁੰਦੇ ਹਨ ਜੋ ਇੱਕ ਜਾਂ ਵਧੇਰੇ ਵੈਰੀਏਬਲਾਂ ਅਤੇ ਕੋਐਫੀਸ਼ਿਅੰਟਾਂ ਤੋਂ ਬਣੇ ਹੁੰਦੇ ਹਨ।
ਪੋਲੀਨੋਮਿਯਲ ਰਿਗ੍ਰੈਸ਼ਨ ਇੱਕ ਵੱਕਰੀ ਲਾਈਨ ਬਣਾਉਂਦਾ ਹੈ ਜੋ ਗੈਰ-ਲੀਨੀਅਰ ਡਾਟਾ ਨੂੰ ਵਧੀਆ ਫਿੱਟ ਕਰਦਾ ਹੈ। ਸਾਡੇ ਮਾਮਲੇ ਵਿੱਚ, ਜੇ ਅਸੀਂ `DayOfYear` ਦਾ ਵਰਗਾ (ਸਕੁਏਰਡ) ਵੈਰੀਏਬਲ ਇਨਪੁਟ ਡਾਟਾ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੀਏ, ਤਾਂ ਅਸੀਂ ਆਪਣਾ ਡਾਟਾ ਪੈਰਾਾਬੋਲਿਕ ਕਰਵ ਨਾਲ ਫਿੱਟ ਕਰ ਸਕਦੇ ਹਾਂ, ਜੋ ਸਾਲ ਦੇ ਇੱਕ ਨਿਰਧਾਰਿਤ ਬਿੰਦੂ ਉੱਤੇ ਘੱਟੋ-ਘੱਟ ਹੋਵੇਗਾ।
Scikit-learn ਵਿੱਚ ਇੱਕ ਸਹਾਇਕ [pipeline API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) ਹੈ ਜੋ ਵੱਖ-ਵੱਖ ਡਾਟਾ ਪ੍ਰੋਸੈਸਿੰਗ ਦੇ ਕਦਮਾਂ ਨੂੰ ਇੱਕਠਾ ਕਰਦਾ ਹੈ। ਇੱਕ **ਪਾਈਪਲਾਈਨ** **estimators** ਦੀ ਇੱਕ ਕੜੀ ਹੁੰਦੀ ਹੈ। ਸਾਡੇ ਮਾਮਲੇ ਵਿੱਚ, ਅਸੀਂ ਇੱਕ ਪਾਈਪਲਾਈਨ ਬਣਾਵਾਂਗੇ ਜੋ ਪਹਿਲਾਂ ਪੋਲੀਨੋਮਿਯਲ ਫੀਚਰਾਂ ਨੂੰ ਮਾਡਲ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰਦਾ ਹੈ, ਫਿਰ ਰਿਗ੍ਰੈਸ਼ਨ ਨੂੰ ਸਿਖਾਉਂਦਾ ਹੈ:
```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="../../../../translated_images/pa/poly-results.ee587348f0f1f60b.webp" width="50%" />
ਪੋਲੀਨੋਮਿਯਲ ਰਿਗ੍ਰੈਸ਼ਨ ਵਰਤ ਕੇ, ਅਸੀਂ ਥੋੜ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹ੍ਹੀ MSE ਅਤੇ ਉੱਚਾ ਕੋਐਫੀਸ਼ਿਅੰਟ ਆਫ ਡਿਟਰਮੀਨੇਸ਼ਨ ਪ੍ਰਾਪਤ ਕਰ ਸਕਦੇ ਹਾਂ, ਪਰ ਇਹ ਜ਼ਿਆਦਾ ਮਹੱਤਵਪੂਰਣ ਨਹੀਂ ਹੁੰਦਾ। ਸਾਨੂੰ ਹੋਰ ਫੀਚਰਾਂ ਦਾ ਖਿਆਲ ਰੱਖਣਾ ਹੋਵੇਗਾ!
> ਤੁਸੀਂ ਦੇਖ ਸਕਦੇ ਹੋ ਕਿ ਪੰਪਕਿਨ ਕੀਮਤਾਂ ਦਾ ਘੱਟੋ-ਘੱਟ ਦਰ ਹਾਲੋਵੀਨ ਦੇ ਆਲੇ-ਦੁਆਲੇ ਹੁੰਦੀ ਹੈ। ਤੁਸੀਂ ਇਸ ਨੂੰ ਕਿਵੇਂ ਸਮਝਾ ਸਕਦੇ ਹੋ?
🎃 ਵਧਾਈ ਹੋ! ਤੁਸੀਂ ਹਾਲ ਹੀ ਵਿੱਚ ਇਕ ਮਾਡਲ ਬਨਾਇਆ ਹੈ ਜੋ ਪਾਈ ਪੰਪਕਿਨਾਂ ਦੀ ਕੀਮਤ ਭਵਿੱਖਵਾਣੀ ਕਰ ਸਕਦਾ ਹੈ। ਤੁਸੀਂ ਸੰਭਵਤ: ਸਾਰੇ ਪੰਪਕਿਨ ਕਿਸਮਾਂ ਲਈ ਇਹੀ ਪ੍ਰਕਿਰਿਆ ਦੁਹਰਾ ਸਕਦੇ ਹੋ, ਪਰ ਇਹ ਥੋੜ੍ਹਾ ਥਕਾਵਟ ਭਰਿਆ ਹੋਵੇਗਾ। ਚੱਲੋ ਹੁਣ ਸਿੱਖਦੇ ਹਾਂ ਕਿ ਆਪਣੇ ਮਾਡਲ ਵਿੱਚ ਪੰਪਕਿਨ ਕਿਸਮ ਨੂੰ ਕਿਵੇਂ ਸ਼ਾਮਲ ਕਰਨਾ ਹੈ!
## ਸ਼੍ਰੇਣੀਬੱਧ ਫੀਚਰ (Categorical Features)
ਆਦਰਸ਼ ਸੰਸਾਰ ਵਿੱਚ, ਅਸੀਂ ਇੱਕੋ ਮਾਡਲ ਵਰਤ ਕੇ ਵੱਖ-ਵੱਖ ਪੰਪਕਿਨ ਕਿਸਮਾਂ ਦੀਆਂ ਕੀਮਤਾਂ ਦੀ ਭਵਿੱਖਵਾਣੀ ਕਰ ਸਕਣਾ ਚਾਹੁੰਦੇ ਹਾਂ। ਪਰ `Variety` ਕਾਲਮ `Month` ਵਰਗੇ ਕਾਲਮਾਂ ਤੋਂ ਕੁਝ ਵੱਖਰਾ ਹੈ, ਕਿਉਂਕਿ ਇਸ ਵਿੱਚ ਗੈਰ-ਸੰਖਿਆਤਮਕ ਮੁੱਲ ਹੁੰਦੇ ਹਨ। ਇਸ ਤਰ੍ਹਾਂ ਦੇ ਕਾਲਮਾਂ ਨੂੰ **ਸ਼੍ਰੇਣੀਬੱਧ** ਕਿਹਾ ਜਾਂਦਾ ਹੈ।
[![ML for beginners - Categorical Feature Predictions with Linear Regression](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression")
> 🎥 ਉਪਰ ਦਿੱਤੀ ਚਿੱਤਰ 'ਤੇ ਕਲਿੱਕ ਕਰੋ ਕੈਟੇਗੋਰੀਕਲ ਫੀਚਰ ਵਰਤਣ ਦੇ ਸੂਚਨਾ ਵਾਲੇ ਛੋਟੇ ਵੀਡੀਓ ਲਈ।
ਇੱਥੇ ਤੁਸੀਂ ਦੇਖ ਸਕਦੇ ਹੋ ਕਿ ਵਰਾਇਟੀ 'ਤੇ ਆਧਾਰਿਤ ਔਸਤ ਕੀਮਤ ਕਿਵੇਂ ਹੈ:
<img alt="Average price by variety" src="../../../../translated_images/pa/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
ਵਰਾਇਟੀ ਨੂੰ ਵਿਚਾਰ ਵਿੱਚ ਲੈਣ ਲਈ, ਪਹਿਲਾਂ ਘੱਟੋ-ਘੱਟ ਇਸ ਨੂੰ ਸੰਖਿਆਤਮਕ ਰੂਪ ਵਿੱਚ ਬਦਲਣਾ ਪਵੇਗਾ, ਜਾਂ **ਇੰਕੋਡ** ਕਰਨਾ ਪਵੇਗਾ। ਅਸੀਂ ਇਸਦਾ ਕੁਝ ਤਰੀਕੇ ਨਾਲ ਕਰ ਸਕਦੇ ਹਾਂ:
* ਸਰਲ **ਨੰਬਰਾਤਮਕ ਇੰਕੋਡਿੰਗ** ਇੱਕ ਟੇਬਲ ਬਣਾਉਂਦਾ ਹੈ ਜਿਸ ਵਿੱਚ ਵੱਖ-ਵੱਖ ਵਰਾਇਟੀ ਹੁੰਦੀਆਂ ਹਨ, ਅਤੇ ਫਿਰ ਟੇਬਲ ਵਿੱਚ ਉਸ ਵਰਾਇਟੀ ਨਾਮ ਦੇ ਅਨੁਕੂਲ ਇੰਡੈਕਸ ਨਾਲ ਸਥਾਨ ਬਦਲ ਦਿੰਦਾ ਹੈ। ਪਰ ਇਹ ਲੀਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਲਈ ਸਭ ਤੋਂ ਵਧੀਆ ਵਿਚਾਰ ਨਹੀਂ ਹੈ, ਕਿਉਂਕਿ ਲੀਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਇੰਡੈਕਸ ਦਾ ਅਸਲੀ ਸੰਖਿਆਤਮਕ ਮੁੱਲ ਲੈਂਦਾ ਹੈ ਅਤੇ ਕੁਝ ਕੋਐਫੀਸ਼ਿਅੰਟ ਨਾਲ ਗੁਣਾ ਕਰਦਾ ਹੈ। ਸਾਡੇ ਮਾਮਲੇ ਵਿੱਚ, ਇੰਡੈਕਸ ਨੰਬਰ ਅਤੇ ਕੀਮਤ ਵਿਚਕਾਰ ਸੰਬੰਧ ਸਪਸ਼ਟ ਤੌਰ 'ਤੇ ਗੈਰ-ਲੀਨੀਅਰ ਹੈ, ਭਾਵੇਂ ਅਸੀਂ ਇੰਡੈਕਸ ਨੂੰ ਕਿਸੇ ਖ਼ਾਸ ਤਰਤੀਬ 'ਚ ਰੱਖੀਏ।
* **One-hot encoding** `Variety` ਕਾਲਮ ਦੀ ਥਾਂ 4 ਵੱਖਰੇ ਕਾਲਮ ਬਣਾ ਦੇਵੇਗਾ, ਪ੍ਰਤੀ ਵੱਖਰੀ ਵਰਾਇਟੀ ਇੱਕ। ਹਰ ਕਾਲਮ ਵਿੱਚ `1` ਹੋਵੇਗਾ ਜੇ ਉਸ ਕਤਾਰ ਦੀ ਵਰਾਇਟੀ ਉਹੀ ਹੋਵੇ, ਨਹੀਂ ਤਾਂ `0`। ਇਸਦਾ ਅਰਥ ਹੈ ਕਿ ਲੀਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਵਿੱਚ 4 ਕੋਐਫੀਸ਼ਿਅੰਟ ਹੋਣਗੇ, ਇਕ-ਇਕ ਹਰ ਕਿਸਮ ਦੇ ਪੰਪਕਿਨ ਲਈ, ਜੋ ਉਸ ਖ਼ਾਸ ਵਰਾਇਟੀ ਲਈ "ਸ਼ੁਰੂਆਤੀ ਕੀਮਤ" (ਜਾਂ ਹੋਰ "ਵਧੀਕ ਕੀਮਤ") ਦਾ ਜ਼ਿੰਮੇਵਾਰ ਹੋਵੇਗਾ।
ਹੇਠ ਲਿਖਿਆ ਕੋਡ ਦਿਖਾਉਂਦਾ ਹੈ ਕਿ ਅਸੀਂ ਕਿਵੇਂ ਵਰਾਇਟੀ ਨੂੰ 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 encode ਕੀਤੀ ਵਰਾਇਟੀ ਨਾਲ ਸਿਖਾਉਣ ਲਈ, ਸਾਨੂੰ ਸਿਰਫ਼ `X` ਅਤੇ `y` ਡਾਟਾ ਸਹੀ ਤਰੀਕੇ ਨਾਲ ਤਿਆਰ ਕਰਨ ਦੀ ਲੋੜ ਹੈ:
```python
X = pd.get_dummies(new_pumpkins['Variety'])
y = new_pumpkins['Price']
```
ਬਾਕੀ ਕੋਡ ਸਾਡੇ ਪਹਿਲਾਂ ਵਰਤੇ ਹੋਏ Linear Regression ਵਰਗੀ ਹੀ ਹੈ। ਜੇ ਤੁਸੀਂ ਇਸ ਨੂੰ ਕੋਸ਼ਿਸ਼ ਕਰੋਗੇ, ਤਾਂ ਤੁਸੀਂ ਵੇਖੋਗੇ ਕਿ ਮੀਨ ਸਕਵੇਅਰ ਏਰਰ ਲਗਭਗ ਇਕੋ ਜਿਹਾ ਰਹਿੰਦਾ ਹੈ, ਪਰ ਸਾਨੂੰ ਬਹੁਤ ਉੱਚਾ ਕੋਐਫੀਸ਼ਿਅੰਟ ਆਫ ਡਿਟਰਮੀਨੇਸ਼ਨ (~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%) ਅਤੇ ਡਿਟਰਮੀਨੇਸ਼ਨ 0.94 ਮਿਲਦਾ ਹੈ!
## ਸਾਰਾ ਕੁਝ ਇਸਤਰ੍ਹਾਂ ਜੋੜਨਾ
ਸਭ ਤੋਂ ਵਧੀਆ ਮਾਡਲ ਬਣਾਉਣ ਲਈ, ਅਸੀਂ ਉਪਰੋਕਤ ਉਦਾਹਰਨ ਤੋਂ ਮਿਲੇ ਗਏ ਮਿਲੇ-ਜੁਲੇ (one-hot encode ਕੀਤੇ ਸ਼੍ਰੇਣੀਬੱਧ + ਸੰਖਿਆਤਮਕ) ਡਾਟਾ ਨਾਲ Polynomial Regression ਵਰਤ ਸਕਦੇ ਹਾਂ। ਤੁਹਾਡੇ ਸੁਖਦ ਲਈ ਸਾਰਾ ਕੋਡ ਹੇਠਾਂ ਦਿੱਤਾ ਹੈ:
```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']
# ਟ੍ਰੇਨ-ਟੈਸਟ ਵੰਡ ਬਣਾਓ
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# ਪਾਈਪਲਾਈਨ ਸੈੱਟਅਪ ਅਤੇ ਸਿਖਲਾਈ ਕਰੋ
pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)
# ਟੈਸਟ ਡਾਟਾ ਲਈ ਨਤੀਜੇ ਭਵਿੱਖਵਾਣੀ ਕਰੋ
pred = pipeline.predict(X_test)
# MSE ਅਤੇ ਨਿਧਾਰਨ ਦੀ ਗਣਨਾ ਕਰੋ
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% ਦਾ ਸਭ ਤੋਂ ਵਧੀਆ ਡਿਟਰਮੀਨੇਸ਼ਨ ਕੋਐਫੀਸ਼ਿਅੰਟ ਅਤੇ MSE=2.23 (~8% ਭਵਿੱਖਵਾਣੀ ਗਲਤੀ) ਮਿਲੇਗੀ।
| ਮਾਡਲ | MSE | ਡਿਟਰਮੀਨੇਸ਼ਨ |
|-------|-----|---------------|
| `DayOfYear` ਲੀਨੀਅਰ | 2.77 (17.2%) | 0.07 |
| `DayOfYear` ਪੋਲੀਨੋਮਿਯਲ | 2.73 (17.0%) | 0.08 |
| `Variety` ਲੀਨੀਅਰ | 5.24 (19.7%) | 0.77 |
| ਸਭ ਫੀਚਰ ਲੀਨੀਅਰ | 2.84 (10.5%) | 0.94 |
| ਸਭ ਫੀਚਰ ਪੋਲੀਨੋਮਿਯਲ | 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)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**ਅਸਵੀਕਾਰੋਪੱਤਰ**:
ਇਸ ਦਸਤਾਵੇਜ਼ ਨੂੰ AI ਅਨੁਵਾਦ ਸੇਵਾ [Co-op Translator](https://github.com/Azure/co-op-translator) ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਅਨੁਵਾਦ ਕੀਤਾ ਗਿਆ ਹੈ। ਜਦੋਂ ਕਿ ਅਸੀਂ ਸਹੀਤ ਲਈ ਕੋਸ਼ਿਸ਼ ਕਰਦੇ ਹਾਂ, ਕਿਰਪਾ ਕਰਕੇ ਦੇਖੋ ਕਿ ਸਵੈਚਲਿਤ ਅਨੁਵਾਦਾਂ ਵਿੱਚ ਗਲਤੀਆਂ ਜਾਂ ਅਸੰਤੁਲਨ ਹੋ ਸਕਦੇ ਹਨ। ਮੂਲ ਦਸਤਾਵੇਜ਼ ਆਪਣੇ ਮੂਲ ਭਾਸ਼ਾ ਵਿੱਚ ਅਧਿਕਾਰਿਕ ਸਰੋਤ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਮਹੱਤਵਪੂਰਣ ਜਾਣਕਾਰੀ ਲਈ, ਪੇਸ਼ੇਵਰ ਮਨੁੱਖੀ ਅਨੁਵਾਦ ਦੀ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਅਸੀਂ ਇਸ ਅਨੁਵਾਦ ਦੀ ਵਰਤੋਂ ਕਾਰਨ ਕਿਸੇ ਵੀ ਗਲਤਫਹਮੀ ਜਾਂ ਗਲਤ ਅਰਥ ਲੱਗਣ ਲਈ ਜ਼ਿੰਮੇਵਾਰ ਨਹੀਂ ਹਾਂ।
<!-- CO-OP TRANSLATOR DISCLAIMER END -->