|
|
# ਸਕਾਇਕਿਟ-ਲਰਨ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਰਿਗ੍ਰੈਸ਼ਨ ਮਾਡਲ ਬਣਾਓ: ਰਿਗ੍ਰੈਸ਼ਨ ਚਾਰ ਤਰੀਕੇ
|
|
|
|
|
|
## ਸ਼ੁਰੂਆਤੀ ਨੋਟ
|
|
|
|
|
|
ਲਾਈਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਉਸ ਸਮੇਂ ਵਰਤੀ ਜਾਂਦੀ ਹੈ ਜਦੋਂ ਅਸੀਂ ਇੱਕ **ਸੰਖਿਆਤਮਕ ਮੁੱਲ** ਦੀ ਭਵਿੱਖਬਾਣੀ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹਾਂ (ਉਦਾਹਰਨ ਲਈ, ਘਰ ਦੀ ਕੀਮਤ, ਤਾਪਮਾਨ, ਜਾਂ ਵਿਕਰੀ).
|
|
|
ਇਹ ਇੰਪੁੱਟ ਫੀਚਰਾਂ ਅਤੇ ਆਉਟਪੁੱਟ ਦਰਮਿਆਨ ਸੰਬੰਧ ਨੂੰ ਸਭ ਤੋਂ ਵਧੀਆ ਦਰਸਾਉਂਦੀ ਲੱਕੜੀ ਲੈ ਕੇ ਕੰਮ ਕਰਦੀ ਹੈ।
|
|
|
|
|
|
ਇਸ ਪਾਠ ਵਿੱਚ, ਅਸੀਂ ਧਿਆਨ ਕੇਵਲ ਸਮਝਣ ਵੱਲ ਹੈ ਇਸ ਤਰੀਕੇ ਨੂੰ ਸਮਝਣ 'ਤੇ ਜਦੋਂ ਕਿ ਅਸੀਂ ਹੋਰ ਵਿਕਸਤ ਰਿਗ੍ਰੈਸ਼ਨ ਤਕਨੀਕਾਂ ਵੇਖਾਂਗੇ।
|
|
|

|
|
|
> ਇੰਨਫੋਗ੍ਰਾਫਿਕ [ਦਾਸਾਨੀ ਮਾਦਿਪੱਲੀ](https://twitter.com/dasani_decoded) ਵੱਲੋਂ
|
|
|
## [ਪ੍ਰੀ-ਲੈਕਚਰ ਕੁਇਜ਼](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
|
|
> ### [ਇਹ ਪਾਠ R ਵਿੱਚ ਵੀ ਉਪਲਬਧ ਹੈ!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
|
|
|
### ਜਾਣਪਛਾਣ
|
|
|
|
|
|
ਹੁਣ ਤੱਕ ਤੁਸੀਂ ਸਮਝਿਆ ਹੈ ਕਿ ਰਿਗ੍ਰੈਸ਼ਨ ਕੀ ਹੈ ਸਟੈਂਡਰਡ ਦੱਤੇਂ ਤੋਂ ਲੈ ਕੇ, ਜੋ ਕਿ ਅਸੀਂ ਉੱਥੇ ਇਸ ਪਾਠ ਦੌਰਾਨ ਵਰਤਾਂਗੇ. ਤੁਸੀਂ ਇਸਨੂੰ ਮੈਟਪਲੌਟਲਿਬ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਵੀ ਵੇਖਿਆ ਹੈ।
|
|
|
|
|
|
ਹੁਣ ਤੁਸੀਂ ਮਸ਼ੀਨ ਲਰਨਿੰਗ ਲਈ ਰਿਗ੍ਰੈਸ਼ਨ ਵਿੱਚ ਗਹਿਰਾਈ ਵਿੱਚ ਜਾਣ ਲਈ ਤਿਆਰ ਹੋ। ਜਦੋਂ ਕਿ ਵਿਜੁਅਲਾਈਜ਼ੇਸ਼ਨ ਤੁਹਾਨੂੰ ਦੱਤੇ ਦਾ ਸਮਝ ਉਪਲਬਧ ਕਰਵਾਉਂਦੀ ਹੈ, ਮਸ਼ੀਨ ਲਰਨਿੰਗ ਦੀ ਅਸਲ ਤਾਕਤ _ਮਾਡਲ ਟਰੇਨਿੰਗ_ ਵਿੱਚ ਹੈ। ਮਾਡਲ ਸਿੱਖਣਕਾਰੀ ਦੱਤੇ 'ਤੇ ਤਿਆਰ ਕੀਤੇ ਜਾਂਦੇ ਹਨ, ਜੋ ਡੇਟਾ ਦੀਆਂ ਨਿਰਭਰਤਾਵਾਂ ਆਪੋ-ਆਪ ਦਿਖਾਉਂਦੇ ਹਨ, ਅਤੇ ਇਹ ਤੁਹਾਨੂੰ ਨਵੇਂ ਦੱਤੇ ਲਈ ਭਵਿੱਖਬਾਣੀ ਕਰਨ ਦਿੰਦੇ ਹਨ, ਜਿਸ ਨੂੰ ਮਾਡਲ ਪਹਿਲਾਂ ਨਹੀਂ ਦੇਖਿਆ।
|
|
|
|
|
|
ਇਸ ਪਾਠ ਵਿੱਚ, ਤੁਸੀਂ ਦੋ ਕਿਸਮ ਦੇ ਰਿਗ੍ਰੈਸ਼ਨ ਬਾਰੇ ਜ਼ਿਆਦਾ ਜਾਣੋਗੇ: _ਮੂਲ ਲਾਈਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ_ ਅਤੇ _ਪੋਲੀਨੋਮਿਯਲ ਰਿਗ੍ਰੈਸ਼ਨ_, ਨਾਲ ਨਾਲ ਕੁਝ ਗਣਿਤ ਜੋ ਇਹ ਤਕਨੀਕਾਂ ਦਾ ਅਧਾਰ ਹੈ। ਇਹ ਮਾਡਲ ਸਾਨੂੰ ਪੰਪਕਿਨਾਂ ਦੀਆਂ ਕੀਮਤਾਂ ਭਵਿੱਖਬਾਣੀ ਕਰਨ ਵਿੱਚ ਸਹਾਇਤਾ ਦੇਣਗੇ ਜੋ ਵੱਖ-ਵੱਖ ਇੰਪੁੱਟ ਡੇਟਾ ਦੇ ਅਧਾਰ 'ਤੇ ਹਨ।
|
|
|
|
|
|
[](https://youtu.be/CRxFT8oTDMg "ਸ਼ੁਰੂਆਤੀਆਂ ਲਈ ML - ਲਾਈਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਸਮਝਣਾ")
|
|
|
|
|
|
> 🎥 ਲਾਈਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਦਾ ਇੱਕ ਛੋਟਾ ਵੀਡੀਓ ਵੇਖਣ ਲਈ ਉਪਰ ਦਿੱਤੀ ਚਿੱਤਰ ਓਪਨ ਕਰੋ।
|
|
|
|
|
|
> ਸਾਡੇ ਇਸ ਪਾਠਕ੍ਰਮ ਵਿੱਚ ਵੱਡਾ ਗਣਿਤ ਗਿਆਨ ਨਹੀਂ ਲਿਆ ਜਾਂਦਾ, ਅਤੇ ਅਸੀਂ ਇਸਨੂੰ ਹੋਰ ਖੇਤਰਾਂ ਦੇ ਵਿਦਿਆਰਥੀਆਂ ਲਈ ਅਸਾਨ ਬਣਾਉਣਾ ਚਾਹੁੰਦੇ ਹਾਂ, ਇਸ ਲਈ ਨੋਟਸ, 🧮 ਕਾਲਆਊਟ, ਡਾਯਾਗ੍ਰਾਮ ਅਤੇ ਹੋਰ ਸਿੱਖਣ ਵਾਲੇ ਸੰਦ ਦੀ ਦੇਖਭਾਲ ਕਰੋ।
|
|
|
|
|
|
### ਮੂਲ ਭੂਮਿਕਾ
|
|
|
|
|
|
ਤੁਹਾਨੂੰ ਹੁਣ ਤੱਕ ਪੰਪਕਿਨ ਡੇਟਾ ਦੀ ਸੰਰਚਨਾ ਨਾਲ ਜਾਣੂ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ ਜਿਸ ਨੂੰ ਅਸੀਂ ਵੇਖ ਰਹੇ ਹਾਂ। ਇਹ ਡੇਟਾ ਇਸ ਪਾਠ ਦੇ ਨੋਟਬੁੱਕ.ipynb ਫਾਈਲ ਵਿੱਚ ਪਹਿਲਾਂ ਹੀ ਲੋਡ ਅਤੇ ਸਾਫ ਕੀਤਾ ਹੋਇਆ ਮਿਲੇਗਾ। ਫਾਈਲ ਵਿੱਚ, ਪੰਪਕਿਨ ਦੀ ਕੀਮਤ ਪ੍ਰਤੀ ਬਸ਼ਲ ਦਿਖਾਈ ਗਈ ਹੈ। ਇਹ ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਤੁਸੀਂ ਇਹ ਨੋਟਬੁੱਕਜ਼ ਵਿਜੁਅਲ ਸਟੂਡੀਓ ਕੋਡ ਵਿੱਚ ਕਰਨੇਲ ਵਿੱਚ ਚਲਾ ਸਕਦੇ ਹੋ।
|
|
|
|
|
|
### ਤਿਆਰੀ
|
|
|
|
|
|
ਇੱਕ ਯਾਦ ਕਰਾਉਣਾ, ਤੁਸੀਂ ਇਹ ਡੇਟਾ ਲੋਡ ਕਰ ਰਹੇ ਹੋ ਤਾਂ ਜੋ ਤੁਸੀਂ ਇਸ ਬਾਰੇ ਸਵਾਲ ਪੁੱਛ ਸਕੋ।
|
|
|
|
|
|
- ਕਦੋਂ ਪੰਪਕਿਨ ਖਰੀਦਣ ਦਾ ਸਭ ਤੋਂ ਵਧੀਆ ਸਮਾਂ ਹੈ?
|
|
|
- ਮਿਨੀਏਚਰ ਪੰਪਕਿਨ ਦੇ ਕੇਸ ਦੀ ਕੀਮਤ ਕਿੰਨੀ ਹੋਵੇਗੀ?
|
|
|
- ਕੀ ਮੈਂ ਉਹਨਾਂ ਨੂੰ ਅਧਾ-ਬਸ਼ਲ ਟੋकरਿਆਂ ਵਿੱਚ ਖਰੀਦਾਂ ਜਾਂ 1 1/9 ਬਸ਼ਲ ਬਾਕਸ ਵਿੱਚ?
|
|
|
ਆਓ ਇਸ ਡੇਟਾ 'ਚ ਹੋਰ ਖੋਜ ਕਰੀਏ।
|
|
|
|
|
|
ਪਿਛਲੇ ਪਾਠ ਵਿੱਚ, ਤੁਸੀਂ ਪੈਂਡਸ ਦਾ ਡੇਟਾ ਫ੍ਰੇਮ ਬਣਾਇਆ ਅਤੇ ਮੂਲ ਡੇਟਾਸੈਟ ਦੇ ਹਿੱਸੇ ਨਾਲ ਭਰਿਆ, ਕੀਮਤ ਨੂੰ ਬਸ਼ਲ ਦੇ ਪੱਧਰ 'ਤੇ ਇੱਕਸਾਰ ਕਰਦੇ ਹੋਏ। ਪਰ ਇਸ ਤਰੀਕੇ ਨਾਲ, ਤੁਸੀਂ ਸਿਰਫ ਲਗਭਗ 400 ਡਾਟਾ ਪੁਆਇੰਟ ਪ੍ਰਾਪਤ ਕੀਤੇ ਜੋ ਕਿ ਸਿਰਫ ਸ਼ਰਦ ਕਾਲ ਦੇ ਮਹੀਨੇ ਸਨ।
|
|
|
|
|
|
ਇਸ ਪਾਠ ਦੇ ਨਾਲ ਜੁੜੇ ਨੋਟਬੁੱਕ ਵਿੱਚ ਜੋ ਡੇਟਾ ਅਸੀਂ ਪਹਿਲਾਂ ਹੀ ਲੋਡ ਕੀਤਾ ਹੈ ਉਸ ਨੂੰ ਵੇਖੋ। ਡੇਟਾ ਪਹਿਲਾਂ ਹੀ ਲੋਡ ਕੀਤਾ ਗਿਆ ਹੈ ਅਤੇ ਇੱਕ ਸ਼ੁਰੂਆਤੀ scatterplot ਮਹੀਨੇ ਦਾ ਡੇਟਰ ਦਰਸਾਉਂਦਾ ਹੈ। ਸ਼ਾਇਦ ਅਸੀਂ ਇਸ ਡੇਟਾ ਕੁਝ ਹੋਰ ਸਾਫ਼-ਸਫਾਈ ਕਰਕੇ ਇਸ ਦੇ ਕੁਝ ਹੋਰ ਡੀਟੇਲ ਜਾ ਪਾ ਸਕਦੇ ਹਾਂ।
|
|
|
|
|
|
## ਇੱਕ ਲਾਈਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਲਾਈਨ
|
|
|
|
|
|
ਜਿਵੇਂ ਕਿ ਤੁਸੀਂ ਲੈੱਸਨ 1 ਵਿੱਚ ਸਿੱਖਿਆ, ਲਾਈਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਅਭਿਆਸ ਦਾ ਲੱਕੜੀ ਦੀ ਰੇਖਾ ਖਿੱਚਣ ਦਾ ਟੀਚਾ ਹੁੰਦਾ ਹੈ ਤਾਂ ਕਿ:
|
|
|
|
|
|
- **ਚਲ ਬਦਲ ਸੰਬੰਧ ਦਿਖਾਓ**। ਚਲਾਂ ਵਿਚਕਾਰ ਸੰਬੰਧ ਦਰਸਾਓ
|
|
|
- **ਭਵਿੱਖਬਾਣੀ ਕਰੋ**। ਇਹ ਭਵਿੱਖਬਾਣੀ ਕਰੋ ਕਿ ਨਵਾਂ ਡਾਟਾ ਅਧਾਰ ਲਾਈਨ ਦੇ ਕਿੱਥੇ ਪਏਗਾ।
|
|
|
|
|
|
ਇਹ ਆਮ ਤੌਰ 'ਤੇ **Least-Squares Regression** ਨੂੰ ਲਾਈਨ ਖਿੱਚਣ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ। "Least-Squares" ਸ਼ਬਦ ਮਾਡਲ ਵਿੱਚ ਕੁੱਲ ਗ਼ਲਤੀ ਘਟਾਉਣ ਦੀ ਪ੍ਰਕਿਰਿਆ ਨੂੰ ਦਰਸਾਉਂਦਾ ਹੈ। ਹਰ ਡਾਟਾ ਪੁਆਇੰਟ ਲਈ, ਅਸੀਂ ਅਸਲੀ ਪੁਆਇੰਟ ਅਤੇ ਆਪਣੀ ਰਿਗ੍ਰੈਸ਼ਨ ਲਾਈਨ ਦਰਮਿਆਨ ਖੜ੍ਹੀ ਦੂਰੀ (ਜਿਸਨੂੰ `residual` ਕਹਿੰਦੇ ਹਨ) ਮਾਪਦੇ ਹਾਂ।
|
|
|
|
|
|
ਅਸੀਂ ਇਹ ਦੂਰੀਆਂ ਵਰਗਾ ਕਰਦੇ ਹਾਂ ਦੋ ਮੁੱਖ ਕਾਰਨਾਂ ਕਰਕੇ:
|
|
|
|
|
|
1. **ਦਿਸ਼ਾ ਦੀ ਬਜਾਏ ਅਕਾਰ**: ਅਸੀਂ -5 ਦੀ ਗ਼ਲਤੀ ਨੂੰ +5 ਜਿਵੇਂ ਹੀ ਮੰਨਣਾ ਚਾਹੁੰਦੇ ਹਾਂ। ਵਰਗਾ ਕਰਨ ਨਾਲ ਸਾਰੇ ਮੁੱਲ ਸਕਾਰਾਤਮਕ ਹੋ ਜਾਂਦੇ ਹਨ।
|
|
|
|
|
|
2. **ਬਹਿਰੂਏਂ (Outliers) ਨੂੰ ਸਜ਼ਾ ਦੇਣਾ**: ਵਰਗਾ ਕਰਨ ਨਾਲ ਵੱਡੀਆਂ ਗ਼ਲਤੀਆਂ ਨੂੰ ਹੋਰ ਭਾਰ ਮਿਲਦਾ ਹੈ, ਇਸ ਕਰਕੇ ਲਾਈਨ ਦੂਰੇ ਪੁਆਇੰਟਾਂ ਦੇ ਨੇੜੇ ਰਹਿੰਦੀ ਹੈ।
|
|
|
|
|
|
ਅਸੀਂ ਇਹ ਸਾਰੇ ਵਰਗੇ ਮੁੱਲ ਮਿਲਾ ਦੇਂਦੇ ਹਾਂ। ਸਾਡਾ ਟੀਚਾ ਇਹ ਹੈ ਕਿ ਅਸੀਂ ਉਹ ਲਾਈਨ ਲੱਭੀਏ ਜਿਸ ਲਈ ਇਹ ਅੰਤਿਮ ਜੋੜ ਘੱਟ ਤੋਂ ਘੱਟ ਹੋਵੇ—ਇਸੇ ਲਈ ਇਸਨੂੰ "Least-Squares" ਕਹਿੰਦੇ ਹਨ।
|
|
|
|
|
|
> **🧮 ਮੈਨੂੰ ਗਣਿਤ ਦਿਖਾਓ**
|
|
|
>
|
|
|
> ਇਹ ਲਾਈਨ, ਜਿਸਨੂੰ _ਸਭ ਤੋਂ ਵਧੀਆ ਫਿਟ ਲਾਈਨ_ ਕਿਹਾ ਜਾਂਦਾ ਹੈ, ਇਸਨੂੰ [ਇਕ ਸਮੀਕਰਨ](https://en.wikipedia.org/wiki/Simple_linear_regression) ਰਾਹੀਂ ਦਰਸਾਇਆ ਜਾ ਸਕਦਾ ਹੈ:
|
|
|
>
|
|
|
> ```
|
|
|
> Y = a + bX
|
|
|
> ```
|
|
|
>
|
|
|
> `X` ਨੂੰ 'ਵਿਆਖਿਆਤਮਕ ਚਲ' ਕਿਹਾ ਜਾਂਦਾ ਹੈ। `Y` ਨੂੰ 'ਆਧਾਰਿਤ ਚਲ' ਕਿਹਾ ਜਾਂਦਾ ਹੈ। ਲਾਈਨ ਦੀ ঢਲ `b` ਹੈ ਅਤੇ `a` y-ਇੰਟਰਸੈਪਟ ਹੈ, ਜਿਹੜਾ ਉਸ ਮੁੱਲ ਨੂੰ ਦਰਸਾਉਂਦਾ ਹੈ ਜਦੋਂ `X = 0` ਹੋਵੇ।
|
|
|
>
|
|
|
>
|
|
|
>
|
|
|
> ਪਹਿਲਾਂ, ঢੱਲ `b` ਦੀ ਗਣਨਾ ਕਰੋ। ਇੰਨਫੋਗ੍ਰਾਫਿਕ [ਜੈਨ ਲੂਪਰ](https://twitter.com/jenlooper) ਵੱਲੋਂ
|
|
|
>
|
|
|
> ਦੂਜੇ ਸ਼ਬਦਾਂ ਵਿੱਚ, ਅਤੇ ਸਾਡੇ ਪੰਪਕਿਨ ਡੇਟਾ ਦੇ ਮੂਲ ਸਵਾਲ ਨੂੰ ਧਿਆਨ ਵਿੱਚ ਰੱਖਦਿਆਂ: "ਪੰਪਕਿਨ ਦੀ ਕੀਮਤ ਮਹੀਨੇ ਪ੍ਰਤੀ ਬਸ਼ਲ ਦਿੱਤੇ ਜਾਣ ਦਾ ਅੰਦਾਜ਼ਾ ਲਗਾਉਣਾ", `X` ਕੀਮਤ ਨੂੰ ਦਰਸਾਉਂਦਾ ਹੈ ਅਤੇ `Y` ਵਿਕਰੀ ਦੇ ਮਹੀਨੇ ਨੂੰ।
|
|
|
>
|
|
|
>
|
|
|
>
|
|
|
> Y ਦਾ ਮੁੱਲ ਕੈਲਕੁਲੇਟ ਕਰੋ। ਜੇ ਤੁਸੀਂ ਲਗਭਗ 4 ਡਾਲਰ ਦੇ ਨੇੜੇ ਭੁਗਤਾਨ ਕਰ ਰਹੇ ਹੋ, ਤਾਂ ਇਹ ਅਪ੍ਰੈਲ ਹੀ ਹੋ ਸਕਦਾ ਹੈ! ਇੰਨਫੋਗ੍ਰਾਫਿਕ [ਜੈਨ ਲੂਪਰ](https://twitter.com/jenlooper) ਵੱਲੋਂ
|
|
|
>
|
|
|
> ਜੋ ਗਣਿਤ ਲਾਈਨ ਦੀ ঢੱਲ ਦੀ ਗਣਨਾ ਕਰਦਾ ਹੈ, ਉਸ ਨੂੰ ਦਰਸਾਉਣਾ ਚਾਹੀਦਾ ਹੈ, ਜੋ ਇੰਟਰਸੈਪਟ 'ਤੇ ਵੀ ਨਿਰਭਰ ਕਰਦਾ ਹੈ, ਜਿਸ ਥਾਂ Y ਸਥਿਤ ਹੁੰਦਾ ਹੈ ਜਦੋਂ X = 0 ਹੋਵੇ।
|
|
|
>
|
|
|
> ਤੁਸੀਂ ਇਹ ਮੁੱਲ ਕੈਲਕੁਲੇਸ਼ਨ ਦਾ ਤਰੀਕਾ [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) ਵੈੱਬਸਾਈਟ ਤੇ ਵੇਖ ਸਕਦੇ ਹੋ। ਇੱਥੇ [Least-squares ਕੈਲਕੁਲੇਟਰ](https://www.mathsisfun.com/data/least-squares-calculator.html) ਤੇ ਵੀ ਜਾਓ ਹੇਠਾਂ ਵੇਖਣ ਲਈ ਕਿ ਕਿਸੇ ਸੰਖਿਆ ਦੇ ਮੁੱਲ ਲਾਈਨ ਨੂੰ ਕਿਵੇਂ ਪ੍ਰਭਾਵਿਤ ਕਰਦੇ ਹਨ।
|
|
|
|
|
|
## ਸਹਿਸੰਬੰਧ
|
|
|
|
|
|
ਹੋਰ ਇੱਕ ਸ਼ਬਦ ਸੋਝੀ ਰਹਿਣ ਲਈ ਸਮਝੋ ਉਹ ਹੈ **Correlation Coefficient** X ਅਤੇ Y ਚਲਾਂ ਦੇ ਵਿਚਕਾਰ। ਇੱਕ scatterplot ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਤੁਸੀਂ ਇਸ ਕੋਐਫੀਸ਼ੀਅਂਟ ਨੂੰ ਜਲਦੀ ਦੇਖ ਸਕਦੇ ਹੋ। ਜੇ ਡੇਟਾ ਪੁਆਇੰਟ ਇਕ ਲੰਮੀ ਰੇਖਾ ਵਿੱਚ scatter ਹੋਣ ਤਾਂ ਸਹਿਸੰਬੰਧ ਜ਼ਿਆਦਾ ਹੁੰਦਾ ਹੈ, ਪਰ ਜੇ ਪੁਆਇੰਟ ਦੁਨੀਆ ਭਰ ਵਿੱਚ scatter ਹੋਣ, ਸਹਿਸੰਬੰਧ ਘੱਟ ਹੁੰਦਾ ਹੈ।
|
|
|
|
|
|
ਇੱਕ ਵਧੀਆ ਲਾਈਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਮਾਡਲ ਉਹ ਹੋਵੇਗਾ ਜਿਸਦਾ Correlation Coefficient ਉੱਚਾ ਹੋਵੇ (0 ਦੀ ਬਜਾਏ 1 ਦੇ ਨੇੜੇ) Least-Squares Regression ਤਰੀਕੇ ਨਾਲ।
|
|
|
|
|
|
✅ ਇਸ ਪਾਠ ਨਾਲ ਜੁੜੇ ਨੋਟਬੁੱਕ ਨੂੰ ਰਨ ਕਰੋ ਅਤੇ ਮਹੀਨੇ ਤੋਂ ਕੀਮਤ scatterplot ਵੇਖੋ। ਕੀ ਮਹੀਨੇ ਨੂੰ ਕੀਮਤ ਨਾਲ ਸੰਬੰਧਿਤ ਡੇਟਾ ਵਿੱਚ ਉੱਚਾ ਜਾਂ ਘੱਟ ਸਹਿਸੰਬੰਧ ਮਹਿਲੂਸ ਹੁੰਦਾ ਹੈ, ਤੁਹਾਡੇ scatterplot ਦੇ ਵਿਜ਼ੂਅਲ ਅਨੁਭਵ ਮੁਤਾਬਕ? ਕੀ ਇਹ ਬਦਲਦਾ ਹੈ ਜੇ ਤੁਸੀਂ ਮਹੀਨੇ ਦੀ ਬਜਾਏ *ਸਾਲ ਦਾ ਦਿਨ* ਵਰਗਾ ਹੌਲੀ-ਥੋੜਾ ਮਾਪ ਲਵੋ (ਜਿਵੇਂ ਕਿ ਸਾਲ ਦੀ ਸ਼ੁਰੂਆਤ ਤੋਂ ਕਿੰਨੇ ਦਿਨ ਹੋਏ)?
|
|
|
|
|
|
ਹੇਠਾਂ ਦਿੱਤੇ ਕੋਡ ਵਿੱਚ, ਅਸੀਂ ਮੰਨ ਲਏ ਹਾਂ ਕਿ ਅਸੀਂ ਡੇਟਾ ਸਾਫ਼ ਕਰ ਚੁੱਕੇ ਹਾਂ, ਅਤੇ ਇੱਕ ਡੇਟਾ ਫ੍ਰੇਮ ਬਣਾਇਆ ਹੈ ਜਿਸਦਾ ਨਾਮ ਹੈ `new_pumpkins`, ਜੋ ਇਸ ਤਰ੍ਹਾਂ ਹੈ:
|
|
|
|
|
|
ID | ਮਹੀਨਾ | ਸਾਲ ਦਾ ਦਿਨ | ਕਿਸਮ | ਸ਼ਹਿਰ | ਪੈਕেজ | ਘੱਟ ਕੀਮਤ | ਉੱਚ ਕੀਮਤ | ਕੀਮਤ
|
|
|
---|--------|-------------|-------|--------|----------|---------------|--------------|--------
|
|
|
70 | 9 | 267 | ਪਾਈ ਟਾਈਪ | ਬਾਲਟਿਮੋਰ | 1 1/9 ਬਸ਼ਲ ਕਾਰਟਨ | 15.0 | 15.0 | 13.636364
|
|
|
71 | 9 | 267 | ਪਾਈ ਟਾਈਪ | ਬਾਲਟਿਮੋਰ | 1 1/9 ਬਸ਼ਲ ਕਾਰਟਨ | 18.0 | 18.0 | 16.363636
|
|
|
72 | 10 | 274 | ਪਾਈ ਟਾਈਪ | ਬਾਲਟਿਮੋਰ | 1 1/9 ਬਸ਼ਲ ਕਾਰਟਨ | 18.0 | 18.0 | 16.363636
|
|
|
73 | 10 | 274 | ਪਾਈ ਟਾਈਪ | ਬਾਲਟਿਮੋਰ | 1 1/9 ਬਸ਼ਲ ਕਾਰਟਨ | 17.0 | 17.0 | 15.454545
|
|
|
74 | 10 | 281 | ਪਾਈ ਟਾਈਪ | ਬਾਲਟਿਮੋਰ | 1 1/9 ਬਸ਼ਲ ਕਾਰਟਨ | 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)
|
|
|
```
|
|
|
|
|
|
ਹੁਣ ਜਦੋਂ ਕਿ ਤੁਹਾਨੂੰ ਲਾਈਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਦੇ ਮੂਲ ਗਣਿਤ ਬਾਰੇ ਸਮਝ ਹੋ ਗਈ ਹੈ, ਚਲੋ ਇੱਕ ਰਿਗ੍ਰੈਸ਼ਨ ਮਾਡਲ ਬਣਾਈਏ ਤਾਂ ਜੋ ਦੇਖੀਏ ਕਿ ਅਸੀਂ ਕੋਈ ਪੰਪਕਿਨ ਪੈਕਜੇਂਗ ਦੇ ਚੰਗੇ ਕੀਮਤੀ ਪੰਪਕਿਨ ਦੀ ਭਵਿੱਖਬਾਣੀ ਕਰ ਸਕਦੇ ਹਾਂ ਕਿ ਨਹੀਂ। ਕੋਈ ਵਿਅਕਤੀ ਜੋ ਛੁੱਟੀਆਂ ਲਈ ਪੰਪਕਿਨ ਪੈਚ ਖਰੀਦ ਰਿਹਾ ਹੈ, ਉਹ ਆਪਣੀਆਂ ਖਰੀਦੀਆਂ ਨੂੰ optimize ਕਰਨ ਲਈ ਇਹ ਜਾਣਕਾਰੀ ਚਾਹੁੰਦਾ ਹੋ ਸਕਦਾ ਹੈ।
|
|
|
|
|
|
## ਸਹਿਸੰਬੰਧ ਲੱਭਣਾ
|
|
|
|
|
|
[](https://youtu.be/uoRq-lW2eQo "ਸ਼ੁਰੂਆਤੀਆਂ ਲਈ ML - ਸਹਿਸੰਬੰਧ ਲੱਭਣਾ: ਲਾਈਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਦੀ ਚਾਬੀ")
|
|
|
|
|
|
> 🎥 ਸਹਿਸੰਬੰਧ ਦਾ ਛੋਟਾ ਵੀਡੀਓ ਵੇਖਣ ਲਈ ਉਪਰ ਦਿੱਤੀ ਚਿੱਤਰ ਤਿੱਪੜੀ ਕਰੋ।
|
|
|
|
|
|
ਪਿਛਲੇ ਪਾਠ ਤੋਂ ਤੁਸੀਂ ਦੇਖਿਆ ਹੋਵੇਗਾ ਕਿ ਵੱਖ-ਵੱਖ ਮਹੀਨਿਆਂ ਲਈ ਔਸਤ ਕੀਮਤ ਇਸ ਤਰ੍ਹਾਂ ਹੈ:
|
|
|
|
|
|
<img alt="ਮਹੀਨੇ ਲਈ ਔਸਤ ਕੀਮਤ" src="../../../../translated_images/pa/barchart.a833ea9194346d76.webp" width="50%"/>
|
|
|
|
|
|
ਇਸਦਾ ਅਰਥ ਹੈ ਕਿ ਕਿਛ ਸਹਿਸੰਬੰਧ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ, ਅਤੇ ਅਸੀਂ ਕੋਸ਼ਿਸ਼ ਕਰ ਸਕਦੇ ਹਾਂ ਕਿ ਲਾਈਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਮਾਡਲ ਤਿਆਰ ਕਰਕੇ ਮਹੀਨਾ ਅਤੇ ਕੀਮਤ ਦੇ ਦਰਮਿਆਨ ਜਾਂ ਸਾਲ ਦੇ ਦਿਨ ਅਤੇ ਕੀਮਤ ਦੇ ਦਰਮਿਆਨ ਸੰਬੰਧ ਦੀ ਭਵਿੱਖਬਾਣੀ ਕਰੀਏ। ਹੇਠਾਂ scatter plot ਹੈ ਜੋ ਬਾਅਦਲੇ ਸੰਬੰਧ ਨੂੰ ਦਿਖਾਉਂਦਾ ਹੈ:
|
|
|
|
|
|
<img alt="ਕੀਮਤ ਵਿਰੁੱਧ ਸਾਲ ਦਾ ਦਿਨ scatter plot" src="../../../../translated_images/pa/scatter-dayofyear.bc171c189c9fd553.webp" width="50%" />
|
|
|
|
|
|
ਚਲੋ ਵੇਖੀਏ ਕਿ `corr` ਫੰਕਸ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਸਹਿਸੰਬੰਧ ਹੈ ਕਿ ਨਹੀਂ:
|
|
|
|
|
|
```python
|
|
|
print(new_pumpkins['Month'].corr(new_pumpkins['Price']))
|
|
|
print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price']))
|
|
|
```
|
|
|
|
|
|
ਲੱਗਦਾ ਹੈ ਕਿ ਸਹਿਸੰਬੰਧ ਕੁਝ ਘੱਟ ਹੈ, ਮਹੀਨੇ ਲਈ -0.15 ਅਤੇ ਸਾਲ ਦੇ ਦਿਨ ਲਈ -0.17, ਪਰ ਹੋ ਸਕਦਾ ਹੈ ਕੋਈ ਹੋਰ ਮਹੱਤਵਪੂਰਣ ਸੰਬੰਧ ਹੋਵੇ। ਲੱਗਦਾ ਹੈ ਕਿ ਕੀਮਤਾਂ ਦੀ ਵੱਖ-ਵੱਖ ਸ਼੍ਰੇਣੀਆਂ ਹਨ ਜੋ ਵੱਖ-ਵੱਖ ਪੰਪਕਿਨ ਕਿਸਮਾਂ ਨਾਲ ਸੰਬੰਧਤ ਹਨ। ਇਸ ਪਰਿਕਲਪਨਾ ਦੀ ਪੁਸ਼ਟੀ ਕਰਨ ਲਈ, ਆਓ ਹਰ ਸ਼੍ਰੇਣੀ ਨੂੰ ਵੱਖ-ਵੱਖ ਰੰਗ ਦੇ ਕੇ plot ਕਰੀਏ। `ax`参数 `scatter` plotting ਫੰਕਸ਼ਨ ਨੂੰ ਦੇ ਕੇ ਅਸੀਂ ਸਾਰੇ ਪੁਆਇੰਟ ਇਕੱਠੇ ਇੱਕ ਗ੍ਰਾਫ਼ 'ਤੇ ਦਰਸਾ ਸਕਦੇ ਹਾਂ:
|
|
|
|
|
|
```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="ਕੀਮਤ ਵਿਰੁੱਧ ਸਾਲ ਦਾ ਦਿਨ scatter plot (ਰੰਗ ਨਾਲ)" 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%" />
|
|
|
|
|
|
ਆਓ ਇਸ ਵੇਲੇ ਸਿਰਫ਼ ਇੱਕ ਪੰਪਕਿਨ ਕਿਸਮ, 'ਪਾਈ ਟਾਈਪ' 'ਤੇ ਧਿਆਨ ਦਈਏ ਅਤੇ ਵੇਖੀਏ ਕਿ ਮਿਤੀ ਦੀ ਕੀਮਤ ਤੇ ਕੀ ਅਸਰ ਪੈਂਦਾ ਹੈ:
|
|
|
|
|
|
```python
|
|
|
pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE']
|
|
|
pie_pumpkins.plot.scatter('DayOfYear','Price')
|
|
|
```
|
|
|
<img alt="ਕੀਮਤ ਵਿਰੁੱਧ ਸਾਲ ਦਾ ਦਿਨ scatter plot - ਪਾਈ ਪੰਪਕਿਨ" src="../../../../translated_images/pa/pie-pumpkins-scatter.d14f9804a53f927e.webp" width="50%" />
|
|
|
|
|
|
ਜੇ ਹੁਣ ਅਸੀਂ `Price` ਅਤੇ `DayOfYear` ਵਿੱਚ correlation ਗਣਨਾ ਕਰੀਏ `corr` ਫੰਕਸ਼ਨ ਨਾਲ, ਤਾਂ ਕੁਝ ਇਸ ਤਰ੍ਹਾਂ ਮਿਲੇਗਾ: `-0.27` - ਜਿਸਦਾ ਮਤਲਬ ਹੈ ਕਿ ਇੱਕ predictive ਮਾਡਲ ਸਿੱਖਣਾ ਸਮਝਦਾਰ ਹੈ।
|
|
|
|
|
|
> ਲਾਈਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਮਾਡਲ ਸਿਖਾਉਣ ਤੋਂ ਪਹਿਲਾਂ ਇਹ ਜ਼ਰੂਰੀ ਹੈ ਕਿ ਸਾਡਾ ਡੇਟਾ ਸਾਫ਼ ਹੋਵੇ। ਖਾਲੀ ਮੁੱਲਾਂ ਨਾਲ ਲਾਈਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਅਚ্ছে ਤਰ੍ਹਾਂ ਕੰਮ ਨਹੀਂ ਕਰਦਾ, ਇਸ ਲਈ ਸਾਰੇ ਖਾਲੀ ਕੋਸ਼ਿਕਾਂ ਨੂੰ ਹਟਾਉਣਾ ਬਿਹਤਰ ਹੈ:
|
|
|
|
|
|
```python
|
|
|
pie_pumpkins.dropna(inplace=True)
|
|
|
pie_pumpkins.info()
|
|
|
```
|
|
|
|
|
|
ਇੱਕ ਹੋਰ ਤਰੀਕਾ ਇਹ ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਇਨ੍ਹਾਂ ਖਾਲੀ ਮੁੱਲਾਂ ਨੂੰ ਉਸ ਕਾਲਮ ਦੇ ਮੀਨ ਮੁੱਲ ਨਾਲ ਭਰ ਦਿੱਤਾ ਜਾਵੇ।
|
|
|
|
|
|
## ਸਰਲ ਲਾਈਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ
|
|
|
|
|
|
[](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 ਐਰੇਜ਼ ਵਿੱਚ ਵੰਡਦੇ ਹਾਂ:
|
|
|
|
|
|
```python
|
|
|
X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1)
|
|
|
y = pie_pumpkins['Price']
|
|
|
```
|
|
|
|
|
|
> ਧਿਆਨ ਦਿਓ ਕਿ ਸਾਨੂੰ ਇੰਪੁੱਟ ਡੇਟਾ ਤੇ `reshape` ਲਾਉਣਾ ਪਿਆ ਤਾਂ ਜੋ ਲਾਈਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਪੈਕੇਜ ਇਸਨੂੰ ਸਹੀ ਤੌਰ ਤੇ ਸਮਝ ਸਕੇ। ਲਾਈਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਨੂੰ ਇੱਕ 2D ਐਰੇ ਚਾਹੀਦਾ ਹੈ ਜਿਸ ਵਿੱਚ ਹਰ ਕਤਾਰ ਇੰਪੁੱਟ ਫੀਚਰਾਂ ਦਾ ਇੱਕ ਵੈਕਟਰ ਹੁੰਦਾ ਹੈ। ਸਾਡੇ ਮਾਮਲਿਆਂ ਵਿੱਚ, ਸਾਨੂੰ ਸਿਰਫ਼ ਇੱਕ ਇੰਪੁੱਟ ਹੈ - ਇਸ ਲਈ ਸਾਨੂੰ N×1 ਵਾਲਾ ਐਰੇ ਚਾਹੀਦਾ ਹੈ ਜਿੱਥੇ N ਡੇਟਾਸੈਟ ਦਾ ਆਕਾਰ ਹੈ।
|
|
|
|
|
|
ਫਿਰ, ਸਾਨੂੰ ਡੇਟਾ ਨੂੰ ਸਿਖਲਾਈ ਅਤੇ ਪਰੀਖਿਆ ਡੇਟਾਸੈਟਾਂ ਵਿੱਚ ਵੰਡਨਾ ਪੈਂਦਾ ਹੈ, ਤਾਂ ਜੋ ਮਾਡਲ ਟਰੇਨ ਕਰਨ ਤੋਂ ਬਾਅਦ ਅਸੀਂ ਇਸਨੂੰ ਜ਼ਾਂਚ ਕਰ ਸਕੀਏ:
|
|
|
|
|
|
```python
|
|
|
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
|
|
|
```
|
|
|
|
|
|
ਆਖ਼ਿਰ ਵਿੱਚ, ਅਸਲ ਵਿਚ ਲਾਈਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਮਾਡਲ ਟਰੇਨ ਕਰਨਾ ਸਿਰਫ਼ ਦੋ ਕਮਾਂਡਾਂ ਦੀ ਲਾਈਨਾਂ ਦਾ ਕੰਮ ਹੈ। ਅਸੀਂ `LinearRegression` ਉਬਜੈਕਟ ਬਣਾਉਂਦੇ ਹਾਂ, ਅਤੇ ਇਸ ਨੂੰ `fit` ਮੈਥਡ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਡੇਟਾ 'ਤੇ ਫਿੱਟ ਕਰਦੇ ਹਾਂ:
|
|
|
|
|
|
```python
|
|
|
lin_reg = LinearRegression()
|
|
|
lin_reg.fit(X_train,y_train)
|
|
|
```
|
|
|
|
|
|
`LinearRegression` ਵਸਤੂ `fit` ਕਰਨ ਤੋਂ ਬਾਅਦ ਰਿਗ੍ਰੈਸ਼ਨ ਦੇ ਸਾਰੇ ਕੋਐਫੀਸ਼ੀਅੰਟਸ ਨੂੰ ਰੱਖਦੀ ਹੈ, ਜਿਨ੍ਹਾਂ ਤੱਕ `.coef_` ਪ੍ਰਾਪਰਟੀ ਦੇ ਜ਼ਰੀਏ ਪਹੁੰਚ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ। ਸਾਡੇ ਮਾਮਲੇ ਵਿੱਚ, ਸਿਰਫ ਇਕ ਕੋਐਫੀਸ਼ੀਅੰਟ ਹੈ, ਜੋ ਲਗਭਗ `-0.017` ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ। ਇਸਦਾ ਮਤਲਬ ਹੈ ਕਿ ਕੀਮਤਾਂ ਸਮੇਂ ਦੇ ਨਾਲ ਕੁਝ ਘਟਦੀਆਂ ਹਨ, ਪਰ ਬਹੁਤ ਜ਼ਿਆਦਾ ਨਹੀਂ, ਲਗਭਗ 2 ਸੈਂਟ ਪ੍ਰਤੀ ਦਿਨ। ਅਸੀਂ ਰਿਗ੍ਰੈਸ਼ਨ ਦਾ Y-ਅਕਸ ਨਾਲ ਕੱਟਦਾ ਬਿੰਦੂ ਵੀ `lin_reg.intercept_` ਦੀ ਵਰਤੋਂ ਨਾਲ ਪਤਾ ਕਰ ਸਕਦੇ ਹਾਂ - ਇਹ ਸਾਡੇ ਮਾਮਲੇ ਵਿੱਚ ਲਗਭਗ `21` ਹੋਵੇਗਾ, ਜੋ ਸਾਲ ਦੀ ਸ਼ੁਰੂਆਤ ਵਿੱਚ ਕੀਮਤ ਦਰਸਾਉਂਦਾ ਹੈ।
|
|
|
|
|
|
ਸਾਡਾ ਮਾਡਲ ਕਿੰਨਾ ਸਹੀ ਹੈ ਦੇਖਣ ਲਈ, ਅਸੀਂ ਟੈਸਟ ਡੇਟਾਸੇਟ 'ਤੇ ਕੀਮਤਾਂ ਦੀ ਭਵਿੱਖਬਾਣੀ ਕਰ ਸਕਦੇ ਹਾਂ, ਫਿਰ ਉਹਨਾਂ ਭਵਿੱਖਬਾਣੀਆਂ ਨੂੰ ਉਮੀਦਵਾਰ ਮੁੱਲਾਂ ਨਾਲ ਕਿੰਨਾ ਨੇੜੇ ਹਨ ਮਾਪ ਸਕਦੇ ਹਾਂ। ਇਹ ਰੂਟ ਮੀਨ ਸਕਵੇਅਰ ਤਰੁੱਟ (RMSE) ਮੈਟਰਿਕਸ ਦੇ ਜ਼ਰੀਏ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ, ਜੋ ਉਮੀਦਵਾਰ ਅਤੇ ਭਵਿੱਖਬਾਣੀ ਕੀਤੇ ਮੁੱਲਾਂ ਵਿਚਕਾਰ ਸਾਰੇ ਵਰਗਾਂ ਦੇ ਫਰਕਾਂ ਦੇ ਮੀਨ ਦਾ ਵਰਗਮੂਲ ਹੁੰਦਾ ਹੈ।
|
|
|
|
|
|
```python
|
|
|
pred = lin_reg.predict(X_test)
|
|
|
|
|
|
rmse = np.sqrt(mean_squared_error(y_test,pred))
|
|
|
print(f'RMSE: {rmse:3.3} ({rmse/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%" />
|
|
|
|
|
|
## ਪੁਲਿਨੋਮਿਯਲ ਰਿਗ੍ਰੈਸ਼ਨ
|
|
|
|
|
|
ਰੈਖੀਅ ਰਿਗ੍ਰੈਸ਼ਨ ਦਾ ਇੱਕ ਹੋਰ ਪ੍ਰਕਾਰ ਪੁਲਿਨੋਮਿਯਲ ਰਿਗ੍ਰੈਸ਼ਨ ਹੈ। ਕਦੇ-ਕਦੇ ਵੈਰੀਏਬਲਾਂ ਵਿਚਕਾਰ ਰੇਖੀਅ ਸੰਬੰਧ ਹੁੰਦਾ ਹੈ – ਜਿਵੇਂ ਕਿ ਵਾਅਲੇ ਦੀ ਮਾਤਰਾ ਵਧਣ ਤੇ ਕੀਮਤ ਵਧਦੀ ਹੈ - ਪਰ ਕਈ ਵਾਰ ਇਨ੍ਹਾਂ ਸੰਬੰਧਾਂ ਨੂੰ ਸਿੱਧੀ ਲਾਈਨ ਜਾਂ ਸਮਤਲ ਤੱਕ ਸੀਮਿਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ।
|
|
|
|
|
|
✅ ਇਨ੍ਹਾਂ ਵਿਚੋਂ ਕੁਝ ਹੋਰ ਉਦਾਹਰਨਾਂ ਲਈ [ਇੱਥੇ ਦੇਖੋ](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) ਸ਼ਾਮਿਲ ਕਰਦਾ ਹੈ ਜਿਸ ਨਾਲ ਡੇਟਾ ਪ੍ਰੋਸੈਸਿੰਗ ਦੇ ਵੱਖ-ਵੱਖ ਕਦਮ ਇਕੱਠੇ ਜੋੜੇ ਜਾ ਸਕਦੇ ਹਨ। ਇੱਕ **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> ਸ਼ਾਮਿਲ ਕਰੇਗਾ। ਅਸੀਂ ਜਾਂਚਣ ਲਈ ਵੱਧ ਡਿਗਰੀ ਵਾਲੇ ਪੁਲਿਨੋਮਿਯਲ ਵੀ ਵਰਤ ਸਕਦੇ ਹਾਂ।
|
|
|
|
|
|
Pipeline ਨੂੰ ਮੂਲ `LinearRegression` ਵਸਤੂ ਵਾਂਗ ਹੀ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ pipeline ਨੂੰ `fit` ਕਰਨਾ ਅਤੇ ਫਿਰ `predict` ਦੀ ਵਰਤੋਂ ਨਾਲ ਭਵਿੱਖਬਾਣੀਆਂ ਨਿਕਾਲਨਾ। ਹੇਠਾਂ ਦੀ ਗ੍ਰਾਫ ਵਿੱਚ ਟੈਸਟ ਡੇਟਾ ਤੇ ਅਨੁਮਾਨੀ ਤਿਰਛੀ ਲਾਈਨ(d curve) ਦਿੱਤੀ ਗਈ ਹੈ:
|
|
|
|
|
|
<img alt="Polynomial regression" src="../../../../translated_images/pa/poly-results.ee587348f0f1f60b.webp" width="50%" />
|
|
|
|
|
|
ਪੁਲਿਨੋਮਿਯਲ ਰਿਗ੍ਰੈਸ਼ਨ ਨਾਲ ਅਸੀਂ ਥੋੜ੍ਹੀ ਘੱਟ MSE ਅਤੇ ਵੱਧ ਡਿਟਰਮੀਨੇਸ਼ਨ ਪ੍ਰਾਪਤ ਕਰ ਸਕਦੇ ਹਾਂ, ਪਰ ਜ਼ਿਆਦਾ ਮਾਹੱਤਵਪੂਰਨ ਨਹੀਂ। ਅਸੀਂ ਹੋਰ ਫੀਚਰਜ਼ ਦਾ ਵੀ ਧਿਆਨ ਰੱਖਣਾ ਪਵੇਗਾ!
|
|
|
|
|
|
> ਤੁਸੀਂ ਦੇਖ ਸਕਦੇ ਹੋ ਕਿ ਪੰਪਕਿਨ ਦੀ ਘੱਟੋ-ਘੱਟ ਕੀਮਤ ਕਿਤੇ ਹਾਲੋਵੀਨ ਦੇ ਆਸ-ਪਾਸ ਆਉਂਦੀ ਹੈ। ਤੁਸੀਂ ਇਸਦਾ ਕਿਵੇਂ ਵਿਆਖਿਆ ਕਰੋਂਗੇ?
|
|
|
|
|
|
🎃 ਵਧਾਈ ਹੋ! ਤੁਸੀਂ ਇੱਕ ਐਸਾ ਮਾਡਲ ਬਣਾਇਆ ਹੈ ਜੋ ਪਾਈ ਪੰਪਕਿਨ ਦੀ ਕੀਮਤ ਭਵਿੱਖਬਾਣੀ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰ ਸਕਦਾ ਹੈ। ਤੁਸੀਂ ਸ਼ਾਇਦ ਇਹੀ ਪ੍ਰਕਿਰਿਆ ਸਾਰੀਆਂ ਕਿਸਮਾਂ ਦੇ ਪੰਪਕਿਨ ਲਈ ਦੁਹਰਾਉਣਗੇ, ਪਰ ਇਹ ਮਿਹਨਤੀ ਹੋਵੇਗਾ। ਹੁਣ ਸیکھੀਏ ਕਿ ਸਾਡੇ ਮਾਡਲ ਵਿੱਚ ਪੰਪਕਿਨ ਕਿਸਮ (variety) ਨੂੰ ਕਿਵੇਂ ਧਿਆਨ ਵਿੱਚ ਰੱਖਿਆ ਜਾਵੇ!
|
|
|
|
|
|
## ਵਰਗੀਕ੍ਰਿਤ ਫੀਚਰ
|
|
|
|
|
|
ਆਦਰਸ਼ ਦੁਨੀਆਂ ਵਿੱਚ, ਅਸੀਂ ਇੱਛਾ ਕਰਦੇ ਹਾਂ ਕਿ ਵੱਖ-ਵੱਖ ਪੰਪਕਿਨ ਕਿਸਮਾਂ ਲਈ ਕੀਮਤਾਂ ਇੱਕੋ ਮਾਡਲ ਨਾਲ ਭਵਿੱਖਬਾਣੀ ਕਰਨ ਯੋਗ ਹੋਣ। ਪਰ, `Variety` ਕਾਲਮ ਕੁਝ ਅਲੱਗ ਹੈ ਜਿਵੇਂ ਕਿ `Month` ਵਰਗੇ ਕਾਲਮਾਂ ਤੋਂ, ਕਿਉਂਕਿ ਇਸ ਵਿੱਚ ਗੈਰ-ਸੰਖਿਆਤਮਕ ਮੁੱਲ ਹੁੰਦੇ ਹਨ। ਇਨ੍ਹਾਂ ਕਾਲਮਾਂ ਨੂੰ **ਵਰਗੀਕ੍ਰਿਤ** ਕਹਿੰਦੇ ਹਨ।
|
|
|
|
|
|
[](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%" />
|
|
|
|
|
|
ਕਿਸਮ ਨੂੰ ਧਿਆਨ ਵਿੱਚ ਰੱਖਣ ਲਈ, ਸਾਨੂੰ ਪਹਿਲਾਂ ਇਸਨੂੰ ਸੰਖਿਆਤਮਕ ਰੂਪ ਵਿੱਚ ਬਦਲਨਾ ਪਵੇਗਾ, ਜਾਂ ਇਸ ਨੂੰ **ਇੰਕੋਡ** ਕਰਨਾ ਪਵੇਗਾ। ਸਾਡੇ ਕੋਲ ਕਈ ਤਰੀਕੇ ਹਨ:
|
|
|
|
|
|
* ਸਧਾਰਣ **ਸੰਖਿਆਤਮਕ ਇੰਕੋਡਿੰਗ** ਇੱਕ ਵੱਖਰੀਆਂ ਕਿਸਮਾਂ ਦੀ ਸੂਚੀ ਬਣਾਏਗਾ, ਅਤੇ ਫਿਰ ਕਿਸਮ ਦੇ ਨਾਮ ਨੂੰ ਉਸ ਸੂਚੀ ਵਿੱਚ ਉਸ ਦੀ ਸੂਚਕਾਂਕ ਨਾਲ ਬਦਲੇਗਾ। ਇਹ ਲੀਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਲਈ ਚੰਗਾ ਨਹੀਂ, ਕਿਉਂਕਿ ਲੀਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਅਸਲ ਸੰਖਿਆਤਮਕ ਮੁੱਲ ਨੂੰ ਲੈਂਦਾ ਹੈ ਅਤੇ ਕੁਝ ਕੋਐਫੀਸ਼ੀਅੰਟ ਨਾਲ ਗੁਣਾ ਕਰਦਾ ਹੈ। ਸਾਡੇ ਮਾਮਲੇ ਵਿੱਚ, ਇੰਡੈਕਸ ਨੰਬਰ ਅਤੇ ਕੀਮਤ ਵਿਚਕਾਰ ਸੰਬੰਧ ਸਾਫ਼ ਤੌਰ ਤੇ ਗੈਰ-ਰੇਖੀਅ ਹੈ, ਭਾਵੇਂ ਸੀਮਿਤ ਇੰਡੈਕਸ ਕਿਸੇ ਖਾਸ ਢੰਗ ਨਾਲ ਕ੍ਰਮਵੱਧ ਹੋਣ।
|
|
|
* **ਵਨ-ਹੌਟ ਇੰਕੋਡਿੰਗ** `Variety` ਕਾਲਮ ਨੂੰ 4 ਵੱਖ-ਵੱਖ ਕਾਲਮਾਂ ਵਿੱਚ ਬਦਲ ਦੇਵੇਗੀ, ਹਰ ਕਿਸਮ ਲਈ ਇੱਕ ਕਾਲਮ। ਹਰ ਕਾਲਮ ਵਿੱਚ `1` ਹੋਵੇਗਾ ਜੇ ਉਸ ਲਾਈਨ ਦੀ ਕਿਸਮ ਉਸ ਮੁਕੱਦਰ ਕਿਸਮ ਨਾਲ ਮਿਲਦੀ ਹੈ, ਨਹੀਂ ਤਾਂ `0`। ਇਸਦਾ ਅਰਥ ਹੈ ਕਿ ਲੀਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਵਿੱਚ ਚਾਰ ਕੋਐਫੀਸ਼ੀਅੰਟ ਹੋਣਗੇ, ਹਰ ਪੰਪਕਿਨ ਕਿਸਮ ਲਈ ਇਕ, ਜੋ ਉਸ ਕਿਸਮ ਦੀ ਸ਼ੁਰੂਆਤੀ ਕੀਮਤ (ਜਾਂ ਵੱਧ ਕੀਮਤ) ਲਈ ਜ਼ਿੰਮੇਵਾਰ ਹੋਵੇਗਾ।
|
|
|
|
|
|
ਹੇਠਾਂ ਦਿੱਤਾ ਕੋਡ ਦਿਖਾਉਂਦਾ ਹੈ ਕਿ ਕਿਸ ਤਰ੍ਹਾਂ ਇੱਕ ਵਿਭਿੰਨਤਾ ਨੂੰ one-hot ਇੰਕੋਡ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ:
|
|
|
|
|
|
```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 ਇੰਕੋਡ ਕੀਤੀ ਕਿਸਮ ਨਾਲ ਟ੍ਰੇਨ ਕਰਨ ਲਈ ਸਾਨੂੰ ਸਿਰਫ਼ ਠੀਕ ਤਰ੍ਹਾਂ `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 ਇੰਕੋਡ ਕੀਤੇ ਵਰਗੀਕ੍ਰਿਤ + ਗਿਣਤੀ ਯੋਗ) ਡੇਟਾ ਨੂੰ ਪੁਲਿਨੋਮਿਯਲ ਰਿਗ੍ਰੈਸ਼ਨ ਨਾਲ ਇਕੱਠਾ ਕਰ ਸਕਦੇ ਹਾਂ। ਤੁਹਾਡੇ ਸੁਵਿਧਾ ਲਈ ਪੂਰਾ ਕੋਡ ਹੇਠਾਂ ਦਿੱਤਾ ਗਿਆ ਹੈ:
|
|
|
|
|
|
```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` Linear | 2.77 (17.2%) | 0.07 |
|
|
|
| `DayOfYear` Polynomial | 2.73 (17.0%) | 0.08 |
|
|
|
| `Variety` Linear | 5.24 (19.7%) | 0.77 |
|
|
|
| ਸਾਰੇ ਫੀਚਰਜ਼ Linear | 2.84 (10.5%) | 0.94 |
|
|
|
| ਸਾਰੇ ਫੀਚਰਜ਼ Polynomial | 2.23 (8.25%) | 0.97 |
|
|
|
|
|
|
🏆 ਵਧਾਈਆਂ! ਤੁਸੀਂ ਇੱਕ ਹੀ ਲੈਸਨ ਵਿੱਚ ਚਾਰ Regression ਮਾਡਲ ਬਣਾਏ, ਅਤੇ ਮਾਡਲ ਦੀ ਕੁਆਲਟੀ ਨੂੰ 97% ਤੱਕ ਸੁਧਾਰਿਆ। Regression ਦੇ ਆਖਰੀ ਸੈਕਸ਼ਨ ਵਿੱਚ, ਤੁਸੀਂ Logistic Regression ਬਾਰੇ ਸਿੱਖੋਗੇ ਜੋ ਕਿ ਕੈਟੇਗਰੀਜ਼ ਨਿਰਧਾਰਤ ਕਰਨ ਲਈ ਵਰਤੀ ਜਾਂਦੀ ਹੈ।
|
|
|
|
|
|
---
|
|
|
## 🚀ਚੈਲੰਜ
|
|
|
|
|
|
ਇਸ ਨੋਟਬੁੱਕ ਵਿੱਚ ਕਈ ਵੱਖ-ਵੱਖ ਵੈਰੀਏਬਲਾਂ ਦੀ ਜਾਂਚ ਕਰੋ ਅਤੇ ਦੇਖੋ ਕਿ ਕਿਉਂਕਰੋਲੇਸ਼ਨ ਮਾਡਲ ਦੀ ਸਹੀਅਤਾ ਨਾਲ ਕਿਵੇਂ ਜੁੜਦੀ ਹੈ।
|
|
|
|
|
|
## [ਪੋਸਟ-ਲੇਕਚਰ ਕੁਇਜ਼](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
|
|
## ਸਮੀਖਿਆ ਅਤੇ ਸਵੈਅਧਿਆਨ
|
|
|
|
|
|
ਇਸ ਪਾਠ ਵਿੱਚ ਅਸੀਂ ਲੀਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ ਬਾਰੇ ਸਿੱਖਿਆ। ਹੋਰ ਮਹੱਤਵਪੂਰਨ ਕਿਸਮਾਂ ਦਾ ਵੀ ਰਿਗ੍ਰੈਸ਼ਨ ਹੈ। ਸਟੀਪਵਾਈਜ਼, ਰਿਡਜ, ਲਾਸ਼ੋ ਅਤੇ ਇਲਾਸਟਿਕਨੇਟ ਤਕਨੀਕਾਂ ਬਾਰੇ ਪੜ੍ਹੋ। ਇੱਕ ਵਧੀਆ ਕੋਰਸ ਸਟੈਨਫੋਰਡ ਸਟੈਟਿਸਟਿਕਲ ਲਰਨਿੰਗ ਕੋਰਸ ਹੈ: [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 --> |