# ಸ್ಕೈಕಿಟ್-ಲರ್ನ್ ಬಳಸಿ ರೆಗ್ರೆಷನ್ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಿ: ನಾಲ್ಕೆರೆಗಳ ರೆಗ್ರೆಷನ್
## ಆರಂಭಿಕ ಟಿಪ್ಪಣಿ
ಲಿನಿಯರ್ ರೆಗ್ರೆಷನ್ ಅನ್ನು ನಾವು **ಸಂಖ್ಯಾತ್ಮಕ ಮೌಲ್ಯ** (ಉದಾಹರಣೆಗೆ, ಮನೆಯ ಬೆಲೆ, ತಾಪಮಾನ, ಅಥವಾ ಮಾರಾಟ) ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು ಬಳಸುತ್ತೇವೆ.
ಇದು ಇನ್ಪುಟ್ ವೈಶಿಷ್ಟ್ಯಗಳ ಮತ್ತು ಔಟ್ಪುಟ್ ನಡುವಿನ ಸಂಬಂಧವನ್ನು ಅತ್ಯುತ್ತಮವಾಗಿ ಪ್ರತಿನಿಧಿಸುವ ನೇರ ರೇಖೆಯನ್ನು ಕಂಡುಹಿಡಿಯುವ ಮೂಲಕ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ.
ಈ ಪಾಠದಲ್ಲಿ, ನಾವು ಆಧುನಿಕ ರೆಗ್ರೆಷನ್ ತಂತ್ರಗಳನ್ನು ಅನ್ವೇಷಿಸಲು ಮೊದಲು ಆ ಕಲ್ಪನೆಯನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದರ ಮೇಲೆ ಗಮನ ಹರಿಸುತ್ತೇವೆ.

> ಇನ್ಫೋಗ್ರಾಫಿಕ್ [ದಾಸನಿ ಮಡಿಪಳ್ಳಿ](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 for beginners - Understanding Linear Regression")
> 🎥 ಲಿನಿಯರ್ ರೆಗ್ರೆಷನ್ ಕುರಿತ ಚಿಕ್ಕ ವೀಡಿಯೋ ಅವಲೋಕನಕ್ಕೆ ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ.
> ಈ ಪಠ್ಯಕ್ರಮದಲ್ಲಿ, ಗಣಿತದ ಕಡಿಮೆ ಜ್ಞಾನ ಇರುವವರಿಗೂ ಕೆಲವೆಲ್ಲ ಬೇರೆ ಕ್ಷೇತ್ರಗಳಿಂದ ಬರುವ ವಿದ್ಯಾರ್ಥಿಗಳಿಗೂ ಸುಲಭವಾಗುವಂತೆ ಮಾಡಲು ನಾವು ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದೇವೆ; ಆದ್ದರಿಂದ ಟಿಪ್ಪಣಿಗಳು, 🧮 ಕರೆಗಳು, ಚಿತ್ರಗಳು ಮತ್ತು ಇತರೆ ಅಧ್ಯಯನ ಸಾಧನಗಳನ್ನು ಗಮನಿಸಿ.
### ಪೂರ್ವಾಪೇಕ್ಷಿತ
ಈವರೆಗೆ ನೀವು ಪರಿಶೀಲಿಸುತ್ತಿರುವ ಪಂಪ್ಕಿನ್ ಡೇಟಾ ರಚನೆಯನ್ನು ಪರಿಚಿತವಾಗಿಸಿಕೊಳ್ಳಬೇಕಾಗಿದೆ. ಈ ಪಾಠದ _notebook.ipynb_ ಫೈಲ್ನಲ್ಲಿ ಅದು ಪೂರ್ವಭಾಗಿಯಾಗಿ ಲೋಡ್ ಮತ್ತು ಪೂರ್ವಸ್ವಚ್ಛಗೊಳಿಸಲಾಗಿದೆ. ಫೈಲ್ನಲ್ಲಿ, ಪಂಪ್ಕಿನ್ ಬೆಲೆನ್ನು ಹಾಕಿ ಪ್ರತಿ ಬಷೆಲ್ ಪ್ರಕಾರ ಹೊಸ ಡೇಟಾ ಫ್ರೇಮ್ನಲ್ಲಿ ತೋರಿಸಲಾಗಿದೆ. ನೀವು ವಿದ್ಯುತ್ ಸ್ಟುಡಿಯೋ ಕೋಡ್ನ ಕರ್ಣೆಲ್ಗಳಲ್ಲಿ ಈ ನೋಟ್ಬುಕ್ಗಳನ್ನು ಚಲಾಯಿಸಲು ಸಿದ್ಧರಾಗಿರಬೇಕು.
### ತಯಾರಿ
ಸ್ವಲ್ಪ ನೆನಪಿಗೆ, ನೀವು ಈ ಡೇಟಾವನ್ನು ಕೇಳಬೇಕು ಎಂಬ ಪ್ರಶ್ನೆಗಳಿಗಾಗಿ ಲೋಡ್ ಮಾಡುತ್ತಿದ್ದೀರಿ.
- ಯಾವ ಸಮಯದಲ್ಲಿ ಪಂಪ್ಕಿನ್ ಖರೀದಿಸುವುದು ಉತ್ತಮ?
- ಮಿನಿಯ್ಚರ್ ಪಂಪ್ಕಿನ್ ಗಳ ಒಂದು ಪ್ರಕರಣದ ಬೆಲೆ ಏನು ಆಗಬಹುದು?
- ಅವುಗಳನ್ನು ಅರ್ಧ-ಬಷೆಲ್ ಟೋಪ್ಗಳಲ್ಲಿ ಖರೀದಿಸಬೇಕೇ ಅಥವಾ 1 1/9 ಬಷೆಲ್ ಬಾಕ್ಸ್ನಲ್ಲಿ ಖರೀದಿಸಬೇಕೇ?
ನಾವು ಈ ಡೇಟಾದ ಬಗ್ಗೆ ಹೆಚ್ಚಿನ ಅನ್ವೇಷಣೆಯನ್ನು ಮುಂದುವರೆಸೋಣ.
ಹಿಂದಿನ ಪಾಠದಲ್ಲಿ, ನೀವು ಪ್ಯಾಂಡಾಸ್ ಡೇಟಾ ಫ್ರೇಮ್ ಸೃಷ್ಟಿಸಿ ಮೂಲ ಡೇಟಾಸೆಟ್ನ ಭಾಗದಿಂದ ಡೇಟಾ ತುಂಬಿಸಿದ್ದೀರಿ, ಬೆಲೆಯ ಮೂಲಕ ಬಷೆಲ್ ಸರಳೀಕರಣ ಮಾಡುತ್ತಿದ್ದೀರಿ. ಇದರಿಂದ ಸುಮಾರು 400 ಡೇಟಾಪಾಯಿಂಟ್ಗಳು ಮಾತ್ರ ಮತ್ತು ಶರದ್ರುಚಿ ತಿಂಗಳಲ್ಲಿ ಮಾತ್ರ ದೊರಕಿತು.
ಈ ಪಾಠದ ಜೊತೆಯ ನೋಟ್ಬುಕ್ನಲ್ಲಿ ಪೂರ್ವಭಾಗವಾಗಿ ಲೋಡ್ ಮಾಡಲಾದ ಡೇಟಾವನ್ನು ನೋಡಿ. ಡೇಟಾ ಲೋಡ್ ಆಗಿದ್ದು ಮೊದಲ ಸ್ಕ್ಯಾಟರ್ಪ್ಲಾಟ್ ಚಾರ್ಟ್ ಆಗಿದ್ದು ತಿಂಗಳ ಡೇಟಾವನ್ನು ತೋರಿಸುತ್ತದೆ. ಡೇಟಾ ಸ್ವಚ್ಛಗೊಳಿಸಿ ಇನ್ನಷ್ಟು ವಿವರಗಳನ್ನು ಪಡೆಯಬಹುದೇ ಎಂದು ನೋಡೋಣ.
## ಲಿನಿಯರ್ ರೆಗ್ರೆಷನ್ ರೇಖೆ
ಪಾಠ 1 ರಲ್ಲಿ ಕಲಿತುಕೊಂಡಂತೆ, ಲಿನಿಯರ್ ರೆಗ್ರೆಷನ್ ವ್ಯಾಯಾಮದ ಗುರಿ ಒಂದು ರೇಖೆಯನ್ನು আঁಕುವುದು:
- **ಚರ ವ್ಯತ್ಯಯಗಳ ಸಂಬಂಧ ತೋರಿಸುವುದು**. ಚರಗಳ ನಡುವಿನ ಸಂಬಂಧವನ್ನು ತೋರಿಸಲು
- **ಭವಿಷ್ಯವಾಣಿ ಮಾಡುವುದು**. ಹೊಸ ಡೇಟಾಪಾಯಿಂಟ್ ಅಲ್ಲಿ ಎಲ್ಲಿ ಬಿದ್ದೀತೆಂದು ಅಮೆರಿಕವಾಗಿ ಭವಿಷ್ಯವಾಣಿ ಮಾಡುವುದು
**ಲೀಸ್ಟ್-ಸ್ಕ್ವೇರ್ಸ್ ರೆಗ್ರೆಷನ್** ಗೆ ಈ ರೀತಿ ರೇಖೆಯನ್ನು ಡ್ರಾ ಮಾಡುವುದು ಸಾಮಾನ್ಯ. “ಲೀಸ್ಟ್-ಸ್ಕ್ವೇರ್ಸ್” ಶಬ್ದವೆಂದರೆ ನಮ್ಮ ಮಾದರಿಯಲ್ಲಿ ಕುಲ ಒಂದು ತಪ್ಪನ್ನು ಕನಿಷ್ಠಗೊಳಿಸುವ ಪ್ರಕ್ರಿಯೆ. ಪ್ರತಿ ಡೇಟಾ ಪಾಯಿಂಟ್ ಗಾಗಿ, ನಿಜವಾದ ಪಾಯಿಂಟ್ ಮತ್ತು ನಮ್ಮ ರೆಗ್ರೆಷನ್ ರೇಖೆಯ ನಡುವೆ ಲಂಬದೂರವನ್ನು (ಇದುವನ್ನು ಉಳಿದಂತೆ residual ಎಂದು ಕರೆಯುತ್ತಾರೆ) ಅಳತೆ ಮಾಡುತ್ತೇವೆ.
ಈ ಅಂತರಗಳನ್ನು ಚದುರಿಸುತ್ತೇವೆ ಎರಡು ಮುಖ್ಯ ಕಾರಣಗಳಿಗಾಗಿ:
1. **ವರಮಾನಕ್ಕೆ ಬದಲು ಮೌಲ್ಯ**: -5 ಎಂಬ ತಪ್ಪನ್ನು +5 ಎಂಬ ತಪ್ಪು ಹಾಗೆಯೇ ಗಣನೆ ಮಾಡಲು, ಚದುರಿಸುವುದರಿಂದ ಎಲ್ಲಾ ಮೌಲ್ಯಗಳು ಸಕಾರಾತ್ಮಕವಾಗಿವೆ.
2. **ಅಸಾಧಾರಣ ಮೌಲ್ಯಗಳಿಗೆ ಶಿಕ್ಷೆ ವಿಧಿಸುವುದು**: ಚದುರಿಸುವುದು ದೊಡ್ಡ ತಪ್ಪುಗಳಿಗೆ ಹೆಚ್ಚುವರಿ ತೂಕ ನೀಡುತ್ತದೆ, ತಕ್ಷಣ ದೂರದಿರುವ ಪಾಯಿಂಟ್ಗಳಿಗೆ ರೇಖೆಯನ್ನು ಹತ್ತಿರವಾಗಿರಿಸಲು ಒತ್ತಾಯಿಸುತ್ತದೆ.
ನಂತರ ಆ ಎಲ್ಲಾ ಚದುರಿಸಿದ ಮೌಲ್ಯಗಳನ್ನು ಸೇರುತ್ತೇವೆ. ಗುರಿ ಆ ಯಾವ ವಿಶಿಷ್ಟ ರೇಖೆಯನ್ನು ಕಂಡುಹಿಡಿಯುವುದು, ಅಲ್ಲಿ ಆ ಅಂತಿಮ ಮೊತ್ತ ಕನಿಷ್ಠವಾಗಿರುತ್ತದೆ (ಸರ್ವನಿಮ್ನ ಮೌಲ್ಯ) — ಹಾಗಾಗಿ ಇದಕ್ಕೆ "ಲೀಸ್ಟ್-ಸ್ಕ್ವೇರ್ಸ್" ಎಂದು ಹೆಸರಿದೆ.
> **🧮 ನನಗೆ ಗಣಿತ ತೋರಿಸು**
>
> ಈ ರೇಖೆ, _ಅತ್ಯುತ್ತಮ ಹೊಂದಾಣಿಕೆಯ ರೇಖೆ_ ಎಂದೂ ಕರೆಯಲ್ಪಡುವುದು, [ಒಂದು ಸಮೀಕರಣದಿಂದ](https://en.wikipedia.org/wiki/Simple_linear_regression) ವ್ಯಕ್ತಪಡಿಸಬಹುದು:
>
> ```
> Y = a + bX
> ```
>
> `X` 'ವಿವರಣೆ ಚರ' ಆಗಿದ್ದು, `Y` 'ಆಧಾರಿತ ಚರ'. ರೇಖೆಯ ತರಳು `b`, ಮತ್ತು y-ಅಂಕ (y-intercept) `a` ಆಗಿದ್ದು, `X = 0` ಇದ್ದಾಗ 'Y'ಯ ಮೌಲ್ಯವನ್ನು ಸೂಚಿಸುತ್ತದೆ.
>
>
>
> ಮೊದಲು, ತರಳು `b` ಅನ್ನು ಲೆಕ್ಕಿಸು. ಇನ್ಫೋಗ್ರಾಫಿಕ್ [ಜೆನ್ ಲೂಪರ್](https://twitter.com/jenlooper) ರವರಿಂದ
>
> ಇನ್ನೊಂದು ಪದಗಳಲ್ಲಿ, ನಮ್ಮ ಪಂಪ್ಕಿನ್ ಮೂಲ ಪ್ರಶ್ನೆಗೆ ಉತ್ತರವಾಗಿ: "ಪ್ರತಿ ಬಷೆಲ್ಗೆ ಪಂಪ್ಕಿನ್ ಬೆಲೆ ಭವಿಷ್ಯವಾಣಿ ಮಾಡು", `X` ಬೆಲೆಗೆ ಮತ್ತು `Y` ಮಾರಾಟ ತಿಂಗಳಿಗೆ ಸೂಚಿಸುತ್ತದೆ.
>
>
>
> Y ಯ ಮೌಲ್ಯ ಲೆಕ್ಕಿಸು. ನೀವು ಸುಮಾರು $4 ಕೊಡುವಾಗ, ಅದು ಏಪ್ರಿಲ್ ಆಗಿರಲೇಬೇಕು! ಇನ್ಫೋಗ್ರಾಫಿಕ್ [ಜೆನ್ ಲೂಪರ್](https://twitter.com/jenlooper) ರವರಿಂದ
>
> ರೇಖೆಯನ್ನು ಲೆಕ್ಕಿಸುವ ಗಣಿತವು ರೇಖೆಯ ತರಳನ್ನು ಮತ್ತು Yಅಂಕವನ್ನು ನಿರ್ಧರಿಸುತ್ತದೆ, ಇವು `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 ಬೆಲೆಗೆ ಹತ್ತಿರವಲ್ಲ) ಸಂಬಂಧ ಸೂಚಕಾಂಕ ಹೊಂದಿರುವುದು.
✅ ಈ ಪಾಠದ ಜೊತೆಯ ನೋಟ್ಬುಕ್ ಚಾಲನೆ ಮಾಡಿ, ತಿಂಗಳುಮೂಲ್ಯ ಮತ್ತು ಬೆಲೆಯ ಸ್ಕ್ಯಾಟರ್ಪ್ಲಾಟ್ ನೋಡಿ. ಪಂಪ್ಕಿನ್ ಮಾರಾಟಗಳ ತಿಂಗಳು ಮತ್ತು ಬೆಲೆಯ ಡೇಟಾ ನಿಮ್ಮ ದೃಶ್ಯಾತ್ಮಕ ಅರ್ಥಮಾಡಿಕೊಳುವಿಕೆಗೆ ತಕ್ಕಂತೆ ಹೆಚ್ಚು ಅಥವಾ ಕಡಿಮೆ ಸಂಬಂಧವಿದೆಯೇ? `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)
```
ಈಗ ನೀವು ಲಿನಿಯರ್ ರೆಗ್ರೆಷನ್ ಹಿಂದಿನ ಗಣಿತವನ್ನು ಅರ್ಥಮಾಡಿಕೊಂಡಿದ್ದೀರಿ, ಪಂಪ್ಕಿನ್ ಪ್ಯಾಕೇಜ್ಗಳ ಬೆಲೆಗಳಾದ್ದರ ಮೇಲೆ ಯಾವ ಪ್ಯಾಕೇಜ್ ಉತ್ತಮ ಬೆಲೆ ಹೊಂದಬಹುದು ಎಂದು ಭವಿಷ್ಯವಾಣಿಗಾಗಿ ರೆಗ್ರೆಷನ್ ಮಾದರಿಯನ್ನು ರಚಿಸೋಣ. ಹಬ್ಬದ ಪಂಪ್ಕಿನ್ ಪ್ಯಾಚ್ಗಾಗಿ ಪಂಪ್ಕಿನ್ನ ಖರೀದಿದಾರರಿಗೆ ಈ ಮಾಹಿತಿ ಖರೀದಿಗಳನ್ನು ಆಪ್ಟಿಮೈಸ್ ಮಾಡಲು ಸಹಾಯಕವಾಗಬಹುದು.
## ಸಂಬಂಧವನ್ನು ಹುಡುಕುವುದು
[](https://youtu.be/uoRq-lW2eQo "ML for beginners - Looking for Correlation: The Key to Linear Regression")
> 🎥 ಸಂಬಂಧ ಕುರಿತ ಚಿಕ್ಕ ವೀಡಿಯೋ ಅವಲೋಕನಕ್ಕೆ ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ.
ಹಿಂದಿನ ಪಾಠದಿಂದ ನೀವು ಕಂಡಿದ್ದೀರಿ, ವಿವಿಧ ತಿಂಗಳ ಸರಾಸರಿ ಬೆಲೆ ಈ ರೀತಿಯಾಗಿದೆ:
ಈಗ ನಾವು ಕೆಲ ಸಂಬಂಧಗಳಿರಬೇಕು ಎನ್ನುತ್ತದೆ, ಮತ್ತು ನಾವು ಲಿನಿಯರ್ ರೆಗ್ರೆಷನ್ ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಳಿಸಿ `Month` ಮತ್ತು `Price` ನಡುವಣ ಸಂಬಂಧ ಅಥವಾ `DayOfYear` ಮತ್ತು `Price` ನಡುವಣ ಸಂಬಂಧ ಭವಿಷ್ಯವಾಣಿ ಮಾಡಬಹುದು. ಕೆಳಗಿನ ಸ್ಕ್ಯಾಟರ್ ಪ್ಲಾಟ್ ನಂತರದ ಸಂಬಂಧವನ್ನು ತೋರಿಸುತ್ತದೆ:
`corr` ಫಂಗ್ಷನ್ ಬಳಸಿ ಪರೀಕ್ಷೆ ಮಾಡೋಣ:
```python
print(new_pumpkins['Month'].corr(new_pumpkins['Price']))
print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price']))
```
ಸಂಬಂಧ ಚಿಕ್ಕದು ಎನ್ನುತ್ತಿದೆ, -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)
```
ನಮ್ಮ ಅನ್ವೇಷಣೆ ಸೂಚಿಸುತ್ತದೆ, ವೈವಿಧ್ಯಕ್ಕೆ ಮಾರಾಟ ದಿನಾಂಕಕ್ಕಿಂತ ಹೆಚ್ಚಿನ ಪರಿಣಾಮವಿದೆ. ಇದನ್ನು ಬಾರ್ ಗ್ರಾಫ್ ಮೂಲಕ ನೋಡಬಹುದು:
```python
new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar')
```
ಈಗ ನಾವು ಒಂದು ಪಂಪ್ಕಿನ್ ವೈವಿಧ್ಯ 'ಪೈ ಪ್ರಕಾರ' ಮೇಲೆ ಮಾತ್ರ ಗಮನಹರಿಸೋಣ ಮತ್ತು ದಿನಾಂಕ ಬೆಲೆಗೆ ಎಂತಹ ಪರಿಣಾಮ ಬೀರುತ್ತಿದೆ ನೋಡೋಣ:
```python
pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE']
pie_pumpkins.plot.scatter('DayOfYear','Price')
```
ಈಗ ನಾವು `corr` ಫಂಕ್ಷನ್ ಬಳಸಿ `Price` ಮತ್ತು `DayOfYear` ನಡುವಣ ಸಂಬಂಧ ಲೆಕ್ಕಿಸಿದರೆ, ಸರಿಸುಣಿಗೆ `-0.27` ಸಿಗುತ್ತದೆ - ಇದರಿಂದ ಮಾದರಿ ತರಬೇತುಗೊಳಿಸುವುದು ಯುಕ್ತಿ.
> ಲಿನಿಯರ್ ರೆಗ್ರೆಷನ್ ಮಾದರಿಯ ತರಬೇತಿಗೆ ಮೊದಲು, ಡೇಟಾ ಸರಿ ಇದ್ದುದು ಸಂಶೋಧನೆಗೆ ಮುಖ್ಯ. ಲಿನಿಯರ್ ರೆಗ್ರೆಷನ್ ಕೊರತೆಗೊಳ್ಳುವ ಮೌಲ್ಯಗಳೊಂದಿಗೆ ಚೆನ್ನಾಗಿರುವುದಿಲ್ಲ, ಆದ್ದರಿಂದ ಎಲ್ಲಾ ಖಾಲಿ ಕಣಗಳನ್ನು ತೆಗೆದುಹಾಕುವುದು ಯುಕ್ತಿ:
```python
pie_pumpkins.dropna(inplace=True)
pie_pumpkins.info()
```
ಮತ್ತೊಂದು ವಿಧಾನ ಎನ್ನುವುದು ಅವುಗಳನ್ನು ಸಂಬಂಧಿತ ಕಾಲಮ್ನ ಸರಾಸರಿ ಮೌಲ್ಯಗಳಿಂದ ಭರ್ತಿ ಮಾಡುವುದು.
## ಸರಳ ಲಿನಿಯರ್ ರೆಗ್ರೆಷನ್
[](https://youtu.be/e4c_UP2fSjg "ML for beginners - Linear and Polynomial Regression using Scikit-learn")
> 🎥 ಲಿನಿಯರ್ ಮತ್ತು ಪೋಲಿನೊಮಿಯಲ್ ರೆಗ್ರೆಷನ್ ಕುರಿತ ಚಿಕ್ಕ ವೀಡಿಯೋ ಅವಲೋಕನಕ್ಕೆ ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ.
ನಮ್ಮ ಲಿನಿಯರ್ ರೆಗ್ರೆಷನ್ ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಳಿಸಲು ನಾವು **ಸ್ಕೈಕಿಟ್-ಲರ್ನ್** ಗ್ರಂಥಾಲಯ ಬಳಸುತ್ತೇವೆ.
```python
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
```
ಮೊದಲು, ಇನ್ಪುಟ್ ಮೌಲ್ಯಗಳು (ವೈಶಿಷ್ಟ್ಯಗಳು) ಮತ್ತು ನಿರೀಕ್ಷಿತ ಔಟ್ಪುಟ್ (ಲೇಬಲ್) ಎರಡು ವಿಭಿನ್ನ ನಂಪೈ ಅರೆಗಳನ್ನು ಭೇದಿಸುವುದರಿಂದ ಪ್ರಾರಂಭಿಸೋಣ:
```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)
```
`fit` ಮಾಡುವ ನಂತರದ `LinearRegression` ವಸ್ತುವು regression ನ ಎಲ್ಲಾ coefficients ಗಳನ್ನು ಹೊಂದಿರುತ್ತದೆ, ಇದಕ್ಕೆ `.coef_` ಎಂಬ property ಉಪಯೋಗಿಸಿ ಪ್ರವೇಶಿಸಬಹುದು. ನಮ್ಮ ಪ್ರಕರಣದಲ್ಲಿ, ಕೇವಲ ಒಂದು coefficient ಇದೆ, ಅದು ಸుమಾರಿಗೆ `-0.017` ಆಗಿರಬಹುದು. ಇದರ ಅರ್ಥ ಬೆಲೆಗಳು ಕಾಲದೊಂದಿಗೆ ಸ್ವಲ್ಪ ಇಳಿಕೆಯಾಗುತ್ತಿವೆ, ಆದರೆ ಬಹಳಷ್ಟು ಅಲ್ಲ, ದಿನಕ್ಕೆ ಸುಮಾರು 2 ಸೆಂಟುಗಳು ಇಳಿಯುತ್ತವೆ. regression ನ Y-ಅಕ್ಷದ ನಡುವೆ ಇರುವ intersection point ಅನ್ನು ನಾವು `lin_reg.intercept_` ಉಪಯೋಗಿಸಿ ಪ್ರವೇಶಿಸಬಹುದು - ಇದು ನಮ್ಮ ಪ್ರಕರಣದಲ್ಲಿ ಸుమಾರಿಗೆ `21` ಇರಬಹುದು, ಇದು ವರ್ಷದ ಪ್ರಾರಂಭದಲ್ಲಿ ಬೆಲೆಯನ್ನು ಸೂಚಿಸುತ್ತದೆ.
ನಮ್ಮ ಮಾದರಿ ಎಷ್ಟು ಖಚಿತವಾಗಿದೆ ಎಂದು ನೋಡಲು, ನಾವು ಪರೀಕ್ಷಾ ಡೇಟಾಸೆಟ್ನಲ್ಲಿ ಬೆಲೆಯನ್ನು predict ಮಾಡಬಹುದು, ನಂತರ ನಮ್ಮ ಭವಿಷ್ಯವಾಣಿ ನಿರೀಕ್ಷಿತ ಮೌಲ್ಯಗಳಿಗೆ ಎಷ್ಟು ಹತ್ತಿರವಾಗಿದೆ ಎಂದು ಅಳೆಯಬಹುದು. ಇದು mean square error (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%. ತುಂಬಾ ಚೆನ್ನಾಗಿಲ್ಲ. ಮಾದರಿ ಗುಣಮಟ್ಟದ ಮತ್ತೊಂದು ಸೂಚಕವು **ನಿರ್ಣಾಯಕ коэффициент (coefficient of determination)** ಆಗಿದ್ದು, ಈ ಕೆಳಗಿನಂತೆ ಪಡೆಯಬಹುದು:
```python
score = lin_reg.score(X_train,y_train)
print('Model determination: ', score)
```
ಎರಡು ಅಂತಿಮ ಮೌಲ್ಯವಾದ 0 ಅಂದರೆ, ಮಾದರಿ ಇನ್ಪುಟ್ ಡೇಟಾವನ್ನು ಪರಿಗಣಿಸುತ್ತಿಲ್ಲ ಮತ್ತು *ಅತೀಕೆಡಾದ ರೇಖೀಯ ಭವಿಷ್ಯದಾತ* ಆಗಿ ವರ್ತಿಸುತ್ತದೆ, ಅದು ಒಟ್ಟು ಫಲಿತಾಂಶದ ಸರಾಸರಿ ಮೌಲ್ಯದಂತೆ ಇರುತ್ತದೆ. ಮೌಲ್ಯವು 1 ಎಂದರೆ ನಾವು ಎಲ್ಲಾ ನಿರೀಕ್ಷಿತ ಹೊರಗಿನ ಮೌಲ್ಯಗಳನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ತಕ್ಕಂತೆ ಭವಿಷ್ಯವಾಣಿ ಮಾಡಬಹುದು. ನಮ್ಮ ಪ್ರಕರಣದಲ್ಲಿ, коэффициент ಸುತ್ತಮುತ್ತ 0.06 ಆಗಿದ್ದು, ಇದು ತುಂಬಾ ಕಡಿಮೆ.
ನಾವು regression ರೇಖೆಯೊಂದಿಗೆ ಪರೀಕ್ಷಾ ಡೇಟಾವನ್ನು ಒಟ್ಟಾಗಿ ಚಿತ್ರಿಸುವುದರಿಂದ regression ನಮ್ಮ ಸಂದರ್ಭದಲ್ಲಿ ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ ಎಂದು ಉತ್ತಮವಾಗಿ ನೋಡಬಹುದು:
```python
plt.scatter(X_test,y_test)
plt.plot(X_test,pred)
```
## ಬಹುಪದ ರೇಖೀಯ ವಿಶ್ಲೇಷಣೆ (Polynomial Regression)
ಹೆಚ್ಚುಕಾಲ linear regression ಒಂದು ವಿಧವಾಗಿದೆ. ಕೆಲವೊಮ್ಮೆ, ಎರಡು ಚರಗಳ ನಡುವೆ ರೇಖೀಯ ಸಂಬಂಧವಿರಬಹುದು - ಕೀಮಿಗೆ ಇರುವ ಪಂಪ್ಕಿನ್ ವಾಲ್ಯೂಮ್ ದೊಡ್ಡದಾಗಿದ್ದಂತೆ ಬೆಲೆಯೂ ಹೆಚ್ಚಾಗುತ್ತದೆ - ಆದರೆ ಕೆಲವು ಸಂದರ್ಭಗಳಲ್ಲಿ ಈ ಸಂಪರ್ಕಗಳನ್ನು ಸಮತಲ ಅಥವಾ ನೇರ ರೇಖೆಯಾಗಿ ಚಿತ್ರಿಸಲಾಗುವುದಿಲ್ಲ.
✅ ಈ ಕೆಳಗಿನಗಿನ [ಇನ್ನಷ್ಟು ಉದಾಹರಣೆಗಳಿವೆ](https://online.stat.psu.edu/stat501/lesson/9/9.8) Polynomial Regression ಉಪಯೋಗಿಸಲಾದ ಡೇಟಾಗಳಿಗೆ
Date ಮತ್ತು Price ನಡುವೆ ಇರುವ ಸಂಬಂಧವನ್ನು ಮತ್ತೆ ನೋಡಿ. ಈ scatterplot ನೇರ ರೇಖೆಯ ಮೂಲಕ ವಿಶ್ಲೇಷಿಸುವುದು ಅತಿ ಅವಶ್ಯಕವೆಂದು ಭಾವಿಸುತ್ತೀರಾ? ಬೆಲೆಗಳು ಎತ್ತಕೆ ಮೇಲೆ ತಗ್ಗಬಹುದು ಅಲ್ಲವೇ? ಈ ಸಂದರ್ಭದಲ್ಲಿ, ನೀವು polynomial regression ಪ್ರಯತ್ನಿಸಬಹುದು.
✅ ಬಹುಪದಗಳು ಗಣಿತೀಯ ಸಮೀಕರಣಗಳು ಆಗಿದ್ದು, ಅವು ಒಂದಿನಿಂದ ಹೆಚ್ಚು ಚರಗಳು ಮತ್ತು coefficients ಗಳಿಂದ ಅಳವಡಿಸಬಹುದು
Polynomial regression nonlinear ಡೇಟೆಗೆ ಮತ್ತೆ ಉತ್ತಮ ಹೊಂದಾಣಿಕೆಗೆ ಒಂದು ವಕ್ರರೇಖೆಯನ್ನು ರಚಿಸುತ್ತದೆ. ನಮ್ಮ ಪ್ರಕರಣದಲ್ಲಿ, ನಾವು `DayOfYear` ಚರವನ್ನು ವರ್ಗ (squared) ರೂಪದಲ್ಲಿ ಸೇರಿಸಿದರೆ, ನಮ್ಮ ಡೇಟಾಗಳನ್ನು ಸರಿ ಹೊಂದಿಸಲು ಪರಾಬೋಲಿಕ್ ವಕ್ರವನ್ನು ಹೊಂದಬಹುದು, ಅದು ವರ್ಷದ ಯಾವುದೇ ಒಂದು ಮಿನಿಮಮ್ ಅಂಶದಲ್ಲಿ ಇರುತ್ತದೆ.
Scikit-learn ಗೆ ಒಂದು ಸಹಾಯಕ [pipeline API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) ಇದೆ, ಇದು ಡೇಟಾ ಪ್ರಾಸೆಸಿಂಗ್ ನ ವಿವಿಧ ಹಂತಗಳನ್ನು ಒಟ್ಟಿಗೆ ಜೋಡುತ್ತದೆ. **pipeline** ಎಂದರೆ **estimators** ಗಳ ಸರಪಳಿ. ನಾವು ಮೊದಲಿಗೆ polynomial features ಮೌಲ್ಯವನ್ನು ನಮ್ಮ ಮಾದರಿಗೆ ಸೇರಿಸುವ pipeline ರಚಿಸಿ, ನಂತರ regression ನನ್ನು ತರಬೇತಿಮಾಡುತ್ತೇವೆ:
```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`2, ಆದರೆ ಎರಡು ಇನ್ಪುಟ್ ಚರಗಳು X ಮತ್ತು Y ಇದ್ದರೆ, X2, XY ಮತ್ತು Y2 ಸೇರಿಸಲಾಗುತ್ತದೆ. ನಾವು ಹೆಚ್ಚಿನ ದರ್ಜೆಯ ಬಹುಪದಗಳನ್ನು ಬಳಸಬಹುದು.
Pipelines ನ್ನು ಮೂಲ `LinearRegression` ವಸ್ತುವಿನಂತೆ ಉಪಯೋಗಿಸಬಹುದು, ಅಂದರೆ ನಾವು pipeline ನ್ನು `fit` ಮಾಡಬಹುದು ಮತ್ತು ನಂತರ `predict` ಬಳಸಿ ಭವಿಷ್ಯವಾಣಿ ಫಲಿತಾಂಶಗಳನ್ನು ಪಡೆಯಬಹುದು. ಇದೇ ಚಿತ್ರವು ಪರೀಕ್ಷಾ ಡೇಟಾ ಮತ್ತು ಅಂದಾಜು ವಕ್ರರೇಖೆಯನ್ನು ತೋರಿಸುತ್ತದೆ:
Polynomial Regression ಬಳಸಿ ನಾವು ಸ್ವಲ್ಪ ಕಡಿಮೆ MSE ಮತ್ತು ಹೆಚ್ಚಾದ ನಿರ್ಣಾಯಕ коэффициент ಪಡೆಯಬಹುದು, ಆದರೆ ಬಹಳ ಹೆಚ್ಚಿನ ಪ್ರಭಾವವಿಲ್ಲ. ಇನ್ನಷ್ಟು ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಪರಿಗಣಿಸುವ ಅಗತ್ಯವಿದೆ!
> ನೀವು ನೋಡಬಹುದು, ಕನಿಷ್ಠ ಪಂಪ್ಕಿನ್ ಬೆಲೆಗಳು ಹಲೋವೀನ್ ಬಾಡಿಯಲ್ಲಿ ಕೆಲವು ಸ್ಥಳಗಳಲ್ಲಿ ಕಂಡು ಬರುತ್ತವೆ. ಇದನ್ನು ನೀವು ಹೇಗೆ ವಿವರಿಸುತ್ತೀರಿ?
🎃 ಅಭಿನಂದನೆಗಳು, ನೀವು ಹತ್ತೊಂಬತ್ತು ಪಂಪ್ಕಿನ್ ಬೆಲೆಯ ಭವಿಷ್ಯವಾಣಿಗೆ ಸಹಾಯ ಮಾಡುವ ಮಾದರಿಯನ್ನು ಸೃಷ್ಟಿಸಿದ್ದಾರೆ. ನಾವೇ ಎಲ್ಲಾ ಪಂಪ್ಕಿನ್ ಪ್ರಕಾರಗಳಿಗೂ ಇದೇ ಕ್ರಮವನ್ನು ಪುನರಾವರ್ತಿಸಬಹುದು, ಆದರೆ ಅದು ಕಷ್ಟಕರವಾಗುತ್ತದೆ. ಈಗ ನಾವು ಹೇಗೆ ನಮ್ಮ ಮಾದರಿಯಲ್ಲಿ ಪಂಪ್ಕಿನ್ ವೈವಿಧ್ಯತೆಯನ್ನು ಪರಿಗಣಿಸುವುದನ್ನು ಕಲಿಯೋಣ!
## ವರ್ಗೀಯ ಲಕ್ಷಣಗಳು (Categorical Features)
ಐಡಿಯಲ್ ಪ್ರಪಂಚದಲ್ಲಿ, ನಾವು ಒಂದೇ ಮಾದರಿಯಿಂದ ವಿಭಿನ್ನ ಪಂಪ್ಕಿನ್ ಪ್ರಕಾರಗಳ ಬೆಲೆಗಳನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು ಬಯಸುತ್ತೇವೆ. ಆದರೆ `Variety` ಕಾಲಮ್ `Month` ಲాంటి ಕಾಲಮ್ ಗಳಿಗಿಂತ ಸ್ವಲ್ಪ ವಿಭಿನ್ನ, ಏಕೆಂದರೆ ಅದರಲ್ಲಿ ಸಂಖ್ಯಾತ್ಮಕ ಮೌಲ್ಯಗಳಿಲ್ಲ. ಇಂಥ ಕಾಲಮ್ ಗಳನ್ನು **category** ಎಂದರೆ ವರ್ಗೀಯ ಕಾಲಮ್ ಗಳಂತೆ ಆಹ್ವಾನಿಸಲಾಗುತ್ತದೆ.
[](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression")
> 🎥 ಕೆಳಗಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿರಿ, ವರ್ಗೀಯ ಲಕ್ಷಣಗಳನ್ನು ಉಪಯೋಗಿಸುವ ಶೀಘ್ರ ವಿಡಿಯೋ ಅವಲೋಕನಕ್ಕೆ.
ಇಲ್ಲಿ ನೀವು ವೈವಿಧ್ಯತೆಯ ಪ್ರಕಾರ ಸರಾಸರಿ ಬೆಲೆ ಹೇಗೆ ಅವಲಂಬಿತವಾಗಿದೆ ಎಂದು ನೋಡಬಹುದು:
ವೈವಿಧ್ಯತೆಯನ್ನು ಪರಿಗಣಿಸಲು, ಮೊದಲು ಅದನ್ನು ಸಂಖ್ಯಾತ್ಮಕ ರೂಪಕ್ಕೆ ಪರಿವರ್ತಿಸಬೇಕಾಗುತ್ತದೆ, ಅಂದರೆ **encode** ಮಾಡಬೇಕಾಗುತ್ತದೆ. ಇದಕ್ಕಾಗಿ ಕೆಲವೊಂದು ವಿಧಾನಗಳಿವೆ:
* ಸರಳ **ಸಂಖ್ಯಾತ್ಮಕ ಎನ್ಕೋಡಿಂಗ್** ವಿಭಿನ್ನ ವೈವಿಧ್ಯತೆಯ ಪಟ್ಟಿಯನ್ನು ರಚಿಸಿ, ನಂತರ ವೈವಿಧ್ಯತೆಯ ಹೆಸರನ್ನು ಆ ಪಟ್ಟಿಯಲ್ಲಿ ನಿಬಂಧಿತ ಸೂಚ್ಯಂಕಕ್ಕೆ ಬದಲಿಸಿ. ಇದು ರೇಖೀಯ regression ಗೆ ಹೆಚ್ಚಿನ ಒಳ್ಳೆಯ ಆಯ್ಕೆ ಅಲ್ಲ, ಏಕೆಂದರೆ ರೇಖೀಯ regression ಸೂಚ್ಯಂಕದ ಅವರನ್ನು ನೇರ ಸಂಖ್ಯಾತ್ಮಕ ಮೌಲ್ಯವಾಗಿ ಪರಿಗಣಿಸಿ ಫಲಿತಾಂಶದಲ್ಲಿ ಕೆಲ coefficient ಗಳೊಂದಿಗೆ ಗುಣಿಸುತ್ತದೆ. ನಮ್ಮ ಸಂದರ್ಭದಲ್ಲಿ ಸೂಚ್ಯಂಕಗಳು ಮತ್ತು ಬೆಲೆಯ ನಡುವೆ ಸಂಬಂಧ ಸ್ಪಷ್ಟವಾಗಿ ರೇಖೀಯವಲ್ಲ, ಮತ್ತು ಸೂಚ್ಯಂಗಳನ್ನು ನಿರ್ದಿಷ್ಟ ಕ್ರಮದಲ್ಲಿ ಅಳವಡಿಸಿದರೂ ಸಹ.
* **ಒನ್-ಹಾಟ್ ಎನ್ಕೋಡಿಂಗ್** `Variety` ಕಾಲಮ್ ನ್ನು 4 ವಿಭಿನ್ನ ಕಾಲಮ್ ಗಳಾಗಿಸುವುದು, ಪ್ರತಿ ವೈವಿಧ್ಯತೆಯರಿಗೆ ಒಂದು ಕಾಲಮ್. ಪ್ರತಿಯೊಂದು ಕಾಲಮ್ ನಲ್ಲಿ `1` ಇರುತ್ತದೆ, ಅಂದರೆ ಆ ಸಾಲಿನ ವೈವಿಧ್ಯತಾ ನೀಡಲ್ಪಟ್ಟಿರುವುದು ಮತ್ತು ಬೇರೆಯಲ್ಲಿ `0`. ಇದರ ಅರ್ಥ regression ನಲ್ಲಿ ನಾಲ್ಕು coefficients ಇರುವಂತೆ, ಪ್ರತಿ ಪಂಪ್ಕಿನ್ ವೈವಿಧ್ಯತೆಯ "ಆರಂಭಿಕ ಬೆಲೆ" (ಅಥವಾ "ಹೆಚ್ಚುವರಿ ಬೆಲೆ") ನ್ನು ನಿರ್ಧರಿಸುವಂತೆ.
ಕೆಳಗಿನ ಕೋಡ್ ಒನ್-ಹಾಟ್ ಎನ್ಕೋಡಿಂಗ್ ಸಂಬಂಧಿಸಿ ತೋರಿಸುತ್ತದೆ:
```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
ಒನ್-ಹಾಟ್ ಎನ್ಕೋಡಿಂಗ್ ಮಾಡಿದ variety ನ್ನು ಇನ್ಪುಟ್ ಆಗಿ ಪಡೆದು linear regression ತರಬೇತಿ ಮಾಡಲು, ನಾವು ಸರಿಯಾಗಿ `X` ಮತ್ತು `y` ಡೇಟಾಗಳನ್ನು ಪ್ರಾರಂಭಿಸಬೇಕಾಗುತ್ತದೆ:
```python
X = pd.get_dummies(new_pumpkins['Variety'])
y = new_pumpkins['Price']
```
ಮತ್ತಷ್ಟು ಕೋಡ್ linear regression ತರಬೇತಿಗೆ ಮೇಲಿನಂತೆಯೇ ಇದೆ. ನೀವು ಪ್ರಯತ್ನಿಸಿದರೆ, mean squared error ಹೋಲಿಕೆಯಲ್ಲಿ ಅದೇ ಮಟ್ಟದಲ್ಲಿದ್ದು, ಆದರೆ coefficient of determination (~77%) ಹೆಚ್ಚು ಇದೆ. ಮತ್ತಷ್ಟು ಖಚಿತ ಭವಿಷ್ಯವಾಣಿಗಾಗಿ, ನಮಗೆ ಇನ್ನಷ್ಟು ವರ್ಗೀಯ ಮತ್ತು ಸಂಖ್ಯಾತ್ಮಕ ಲಕ್ಷಣಗಳನ್ನು ಪರಿಗಣಿಸಬೇಕಾಗುತ್ತದೆ, ಉದಾಹರಣೆಗೆ `Month` ಅಥವಾ `DayOfYear`. ಒಂದೇ ದೊಡ್ಡ array(features) ಪಡೆಯಲು, ನಾವು `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 ಸಿಗುತ್ತದೆ!
## ಎಲ್ಲವನ್ನೂ ಒಟ್ಟುಗೂಡಿಸುವುದು
ಉತ್ತಮ ಮಾದರಿಯನ್ನು ರಚಿಸಲು, ನಾವು ಮೇಲಿನ ಉದಾಹರಣೆಯಿಂದ ಸಂಯುಕ್ತ (ಒನ್-ಹಾಟ್ ಎನ್ಕೋಡಿಂಗ್ + ಸಂಖ್ಯಾತ್ಮಕ) ಡೇಟಾವನ್ನು 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 |
🏆 ಚೆನ್ನಾಗಿದೆ! ನೀವು ಒಂದೇ ಪಾಠದಲ್ಲಿ ನಾಲ್ಕು Regression ಮಾದರಿಗಳನ್ನು ರಚಿಸಿ, ಮಾದರಿಯ ಗುಣಮಟ್ಟವನ್ನು 97%ಕ್ಕೆ ಸುಧಾರಿಸಿದ್ದಾರೆ. Regression ಹಂತದ ಕೊನೆಯಲ್ಲಿ, ನೀವು Logistic Regression ಕುರಿತು ಕಲಿತೀರಿ, ಅದು ವರ್ಗಗಳನ್ನು ನಿರ್ಧರಿಸುವಲ್ಲಿ ಉಪಯೋಗವಾಗುತ್ತದೆ.
---
## 🚀ಸವಾಲು
ಈ ನೋಟ್ಬುಕ್ನಲ್ಲಿ ಹಲವು ಬದಲಾವಣೆಗಳನ್ನು ಪರೀಕ್ಷಿಸಿ, ಸವಾಲು ಹಾಗೂ ಮಾದರಿಯ ನಿಖರತೆಗೆ ಸಂಬಂಧವಿದೆ ಎಂದು ತಿಳಿದುಕೊಳ್ಳಿ.
## [ಪಾಠದ ನಂತರದ ಪ್ರಶ್ನೋತ್ತರ](https://ff-quizzes.netlify.app/en/ml/)
## ವಿಮರ್ಶೆ ಮತ್ತು ಸ್ವಯಂ ಅಧ್ಯಯನ
ಈ ಪಾಠದಲ್ಲಿ ನಾವು Linear Regression ಬಗ್ಗೆ ಕಲಿತೆವು. ಇನ್ನಷ್ಟು ಪ್ರಮುಖ Regression ವಿಧಗಳಿವೆ. Stepwise, Ridge, Lasso ಮತ್ತು Elasticnet ತಂತ್ರಗಳನ್ನು ಓದಿ ತಿಳಿದುಕೊಳ್ಳಿ. ಉತ್ತಮ ಅಧ್ಯಯನ ಕೋರ್ಸ್ ಆಗಿದ್ದು [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning).
## ನಿಯೋಜನೆ
[ಮಾದರಿ ರಚಿಸಿ](assignment.md)
---
**ತ್ಯಾಗಪತ್ರ**:
ಈ ದಸ್ತಾವೇಜನ್ನು AI ಅನುವಾದ ಸೇವೆ [ಕೋ-ಓಪ್ ಟ್ರಾನ್ಸ್ಲೇಟರ್](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಗೆ ಪ್ರಯತ್ನಿಸುವಾಗಲೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ತಪ್ಪುಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪುಭಾಷ್ಯಗಳು ಅಥವಾ ಅರ್ಥಕೊಳಕೊಳ್ಳಿಕೆಗಳಿಗಾಗಿ ನಾವು ಜವಾಬ್ದಾರರಾಗುವುದಿಲ್ಲ.