|
|
# ಆಹಾರ ವರ್ಗೀಕರಣಗಳು 1
|
|
|
|
|
|
ಈ ಪಾಠದಲ್ಲಿ, ನೀವು ಹಿಂದಿನ ಪಾಠದಿಂದ ಉಳಿಸಿಕೊಂಡ ಸಮತೋಲನ, ಸ್ವಚ್ಛವಾದ ಆಹಾರಗಳ ಬಗ್ಗೆ ಸಂಪೂರ್ಣ ಡೇಟಾಸೆಟ್ ಅನ್ನು ಬಳಸುತ್ತೀರಿ.
|
|
|
|
|
|
ನೀವು ಈ ಡೇಟಾಸೆಟ್ ಅನ್ನು ವಿವಿಧ ವರ್ಗೀಕರಣಕಾರಿಗಳೊಂದಿಗೆ ಬಳಸುತ್ತೀರಿ _ಒಂದು ಗುಂಪಿನ ಪದಾರ್ಥಗಳ ಆಧಾರದ ಮೇಲೆ ನೀಡಲಾದ ರಾಷ್ಟ್ರೀಯ ಆಹಾರವನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು_. ಇದನ್ನು ಮಾಡುವಾಗ, ವರ್ಗೀಕರಣ ಕಾರ್ಯಗಳಿಗೆ ಆಲ್ಗೋರಿದಮ್ಗಳನ್ನು ಹೇಗೆ ಬಳಸಬಹುದು ಎಂಬುದರ ಬಗ್ಗೆ ನೀವು ಹೆಚ್ಚು ತಿಳಿಯುತ್ತೀರಿ.
|
|
|
|
|
|
## [ಪೂರ್ವ-ಪಾಠ ಕ್ವಿಜ್](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
# ತಯಾರಿ
|
|
|
|
|
|
ನೀವು [ಪಾಠ 1](../1-Introduction/README.md) ಪೂರ್ಣಗೊಳಿಸಿದ್ದೀರಿ ಎಂದು ಊಹಿಸಿ, ಈ ನಾಲ್ಕು ಪಾಠಗಳಿಗಾಗಿ ರೂಟ್ `/data` ಫೋಲ್ಡರ್ನಲ್ಲಿ _cleaned_cuisines.csv_ ಫೈಲ್ ಇರುವುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.
|
|
|
|
|
|
## ವ್ಯಾಯಾಮ - ರಾಷ್ಟ್ರೀಯ ಆಹಾರವನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಿ
|
|
|
|
|
|
1. ಈ ಪಾಠದ _notebook.ipynb_ ಫೋಲ್ಡರ್ನಲ್ಲಿ ಕೆಲಸ ಮಾಡುತ್ತ, ಆ ಫೈಲ್ ಮತ್ತು Pandas ಲೈಬ್ರರಿಯನ್ನು ಆಮದುಮಾಡಿ:
|
|
|
|
|
|
```python
|
|
|
import pandas as pd
|
|
|
cuisines_df = pd.read_csv("../data/cleaned_cuisines.csv")
|
|
|
cuisines_df.head()
|
|
|
```
|
|
|
|
|
|
ಡೇಟಾ ಹೀಗೆ ಕಾಣುತ್ತದೆ:
|
|
|
|
|
|
| | Unnamed: 0 | cuisine | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini |
|
|
|
| --- | ---------- | ------- | ------ | -------- | ----- | ---------- | ----- | ------------ | ------- | -------- | --- | ------- | ----------- | ---------- | ----------------------- | ---- | ---- | --- | ----- | ------ | -------- |
|
|
|
| 0 | 0 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
|
|
|
| 1 | 1 | indian | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
|
|
|
| 2 | 2 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
|
|
|
| 3 | 3 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
|
|
|
| 4 | 4 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
|
|
|
|
|
|
|
|
|
1. ಈಗ, ಇನ್ನಷ್ಟು ಲೈಬ್ರರಿಗಳನ್ನು ಆಮದುಮಾಡಿ:
|
|
|
|
|
|
```python
|
|
|
from sklearn.linear_model import LogisticRegression
|
|
|
from sklearn.model_selection import train_test_split, cross_val_score
|
|
|
from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve
|
|
|
from sklearn.svm import SVC
|
|
|
import numpy as np
|
|
|
```
|
|
|
|
|
|
1. ತರಬೇತಿಗಾಗಿ X ಮತ್ತು y ಸಂಯೋಜನೆಗಳನ್ನು ಎರಡು ಡೇಟಾಫ್ರೇಮ್ಗಳಾಗಿ ವಿಭಜಿಸಿ. `cuisine` ಲೇಬಲ್ಗಳ ಡೇಟಾಫ್ರೇಮ್ ಆಗಬಹುದು:
|
|
|
|
|
|
```python
|
|
|
cuisines_label_df = cuisines_df['cuisine']
|
|
|
cuisines_label_df.head()
|
|
|
```
|
|
|
|
|
|
ಇದು ಹೀಗೆ ಕಾಣುತ್ತದೆ:
|
|
|
|
|
|
```output
|
|
|
0 indian
|
|
|
1 indian
|
|
|
2 indian
|
|
|
3 indian
|
|
|
4 indian
|
|
|
Name: cuisine, dtype: object
|
|
|
```
|
|
|
|
|
|
1. ಆ `Unnamed: 0` ಕಾಲಮ್ ಮತ್ತು `cuisine` ಕಾಲಮ್ ಅನ್ನು `drop()` ಕರೆ ಮಾಡಿ ತೆಗೆದುಹಾಕಿ. ಉಳಿದ ಡೇಟಾವನ್ನು ತರಬೇತಿಗೆ ಬಳಸಬಹುದಾದ ಲಕ್ಷಣಗಳಾಗಿ ಉಳಿಸಿ:
|
|
|
|
|
|
```python
|
|
|
cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1)
|
|
|
cuisines_feature_df.head()
|
|
|
```
|
|
|
|
|
|
ನಿಮ್ಮ ಲಕ್ಷಣಗಳು ಹೀಗೆ ಕಾಣುತ್ತವೆ:
|
|
|
|
|
|
| | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | artemisia | artichoke | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini |
|
|
|
| ---: | -----: | -------: | ----: | ---------: | ----: | -----------: | ------: | -------: | --------: | --------: | ---: | ------: | ----------: | ---------: | ----------------------: | ---: | ---: | ---: | ----: | -----: | -------: |
|
|
|
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
|
|
|
| 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
|
|
|
| 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
|
|
|
| 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
|
|
|
| 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
|
|
|
|
|
|
ಈಗ ನೀವು ನಿಮ್ಮ ಮಾದರಿಯನ್ನು ತರಬೇತಿಗೆ ಸಿದ್ಧರಾಗಿದ್ದೀರಿ!
|
|
|
|
|
|
## ನಿಮ್ಮ ವರ್ಗೀಕರಣಕಾರಿಯನ್ನು ಆಯ್ಕೆ ಮಾಡುವುದು
|
|
|
|
|
|
ನಿಮ್ಮ ಡೇಟಾ ಸ್ವಚ್ಛವಾಗಿದ್ದು ತರಬೇತಿಗೆ ಸಿದ್ಧವಾಗಿದೆ, ನೀವು ಯಾವ ಆಲ್ಗೋರಿದಮ್ ಅನ್ನು ಬಳಸಬೇಕೆಂದು ನಿರ್ಧರಿಸಬೇಕು.
|
|
|
|
|
|
Scikit-learn ವರ್ಗೀಕರಣವನ್ನು Supervised Learning ಅಡಿಯಲ್ಲಿ ಗುಂಪುಮಾಡುತ್ತದೆ, ಮತ್ತು ಆ ವರ್ಗದಲ್ಲಿ ನೀವು ವರ್ಗೀಕರಿಸಲು ಹಲವಾರು ವಿಧಾನಗಳನ್ನು ಕಾಣುತ್ತೀರಿ. [ವೈವಿಧ್ಯ](https://scikit-learn.org/stable/supervised_learning.html) ಮೊದಲ ನೋಟದಲ್ಲಿ ಸ್ವಲ್ಪ ಗೊಂದಲಕಾರಿಯಾಗಿದೆ. ಕೆಳಗಿನ ವಿಧಾನಗಳು ಎಲ್ಲವೂ ವರ್ಗೀಕರಣ ತಂತ್ರಗಳನ್ನು ಒಳಗೊಂಡಿವೆ:
|
|
|
|
|
|
- ರೇಖೀಯ ಮಾದರಿಗಳು
|
|
|
- ಬೆಂಬಲ ವೆಕ್ಟರ್ ಯಂತ್ರಗಳು
|
|
|
- ಸ್ಟೋಚಾಸ್ಟಿಕ್ ಗ್ರೇಡಿಯಂಟ್ ಡಿಸೆಂಟ್
|
|
|
- ಸಮೀಪದ ನೆರೆಹೊರೆಯವರು
|
|
|
- ಗೌಸಿಯನ್ ಪ್ರಕ್ರಿಯೆಗಳು
|
|
|
- ನಿರ್ಧಾರ ಮರಗಳು
|
|
|
- ಎನ್ಸೆಂಬಲ್ ವಿಧಾನಗಳು (ಮತದಾನ ವರ್ಗೀಕರಣಕಾರಿಗಳು)
|
|
|
- ಬಹು ವರ್ಗ ಮತ್ತು ಬಹು ಔಟ್ಪುಟ್ ಆಲ್ಗೋರಿದಮ್ಗಳು (ಬಹು ವರ್ಗ ಮತ್ತು ಬಹು ಲೇಬಲ್ ವರ್ಗೀಕರಣ, ಬಹು ವರ್ಗ-ಬಹು ಔಟ್ಪುಟ್ ವರ್ಗೀಕರಣ)
|
|
|
|
|
|
> ನೀವು [ನ್ಯೂರಲ್ ನೆಟ್ವರ್ಕ್ಗಳನ್ನು ಡೇಟಾ ವರ್ಗೀಕರಿಸಲು](https://scikit-learn.org/stable/modules/neural_networks_supervised.html#classification) ಕೂಡ ಬಳಸಬಹುದು, ಆದರೆ ಅದು ಈ ಪಾಠದ ವ್ಯಾಪ್ತಿಗೆ ಹೊರಗಿದೆ.
|
|
|
|
|
|
### ಯಾವ ವರ್ಗೀಕರಣಕಾರಿಯನ್ನು ಆಯ್ಕೆ ಮಾಡಬೇಕು?
|
|
|
|
|
|
ಹೀಗಾಗಿ, ನೀವು ಯಾವ ವರ್ಗೀಕರಣಕಾರಿಯನ್ನು ಆಯ್ಕೆ ಮಾಡಬೇಕು? ಬಹುಶಃ, ಹಲವಾರು ವಿಧಾನಗಳನ್ನು ಪ್ರಯೋಗಿಸಿ ಉತ್ತಮ ಫಲಿತಾಂಶವನ್ನು ಹುಡುಕುವುದು ಪರೀಕ್ಷಿಸುವ ಒಂದು ಮಾರ್ಗ. Scikit-learn ಒಂದು [ಪಕ್ಕಪಕ್ಕದ ಹೋಲಿಕೆ](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html) ಒದಗಿಸುತ್ತದೆ, ಇದರಲ್ಲಿ KNeighbors, SVC ಎರಡು ರೀತಿಗಳು, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB ಮತ್ತು QuadraticDiscrinationAnalysis ಹೋಲಿಕೆ ಮಾಡಲಾಗಿದೆ, ಫಲಿತಾಂಶಗಳನ್ನು ದೃಶ್ಯೀಕರಿಸಲಾಗಿದೆ:
|
|
|
|
|
|

|
|
|
> Scikit-learn ಡಾಕ್ಯುಮೆಂಟೇಶನ್ನಲ್ಲಿ ರಚಿಸಲಾದ ಪ್ಲಾಟ್ಗಳು
|
|
|
|
|
|
> AutoML ಈ ಸಮಸ್ಯೆಯನ್ನು ಕ್ಲೌಡ್ನಲ್ಲಿ ಈ ಹೋಲಿಕೆಗಳನ್ನು ನಡೆಸಿ ನಿಮ್ಮ ಡೇಟಾಗೆ ಅತ್ಯುತ್ತಮ ಆಲ್ಗೋರಿದಮ್ ಆಯ್ಕೆ ಮಾಡಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಇದನ್ನು [ಇಲ್ಲಿ](https://docs.microsoft.com/learn/modules/automate-model-selection-with-azure-automl/?WT.mc_id=academic-77952-leestott) ಪ್ರಯತ್ನಿಸಿ
|
|
|
|
|
|
### ಉತ್ತಮ ವಿಧಾನ
|
|
|
|
|
|
ಅನಿರೀಕ್ಷಿತವಾಗಿ ಊಹಿಸುವುದಕ್ಕಿಂತ ಉತ್ತಮ ವಿಧಾನವೆಂದರೆ, ಈ ಡೌನ್ಲೋಡ್ ಮಾಡಬಹುದಾದ [ML ಚೀಟ್ ಶೀಟ್](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-77952-leestott) ನಲ್ಲಿ ನೀಡಲಾದ ಆಲೋಚನೆಗಳನ್ನು ಅನುಸರಿಸುವುದು. ಇಲ್ಲಿ, ನಮ್ಮ ಬಹು ವರ್ಗ ಸಮಸ್ಯೆಗೆ ಕೆಲವು ಆಯ್ಕೆಗಳು ಇವೆ:
|
|
|
|
|
|

|
|
|
> ಮೈಕ್ರೋಸಾಫ್ಟ್ನ ಆಲ್ಗೋರಿದಮ್ ಚೀಟ್ ಶೀಟ್ನ ಒಂದು ಭಾಗ, ಬಹು ವರ್ಗ ವರ್ಗೀಕರಣ ಆಯ್ಕೆಗಳನ್ನು ವಿವರಿಸುತ್ತದೆ
|
|
|
|
|
|
✅ ಈ ಚೀಟ್ ಶೀಟ್ ಅನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ, ಮುದ್ರಿಸಿ, ನಿಮ್ಮ ಗೋಡೆಯ ಮೇಲೆ ಹಚ್ಚಿ!
|
|
|
|
|
|
### ತರ್ಕ
|
|
|
|
|
|
ನಾವು ಹೊಂದಿರುವ ನಿರ್ಬಂಧಗಳನ್ನು ಗಮನಿಸಿ ವಿಭಿನ್ನ ವಿಧಾನಗಳ ಮೂಲಕ ತರ್ಕ ಮಾಡೋಣ:
|
|
|
|
|
|
- **ನ್ಯೂರಲ್ ನೆಟ್ವರ್ಕ್ಗಳು ತುಂಬಾ ಭಾರವಾಗಿವೆ**. ನಮ್ಮ ಸ್ವಚ್ಛ ಆದರೆ ಕನಿಷ್ಠ ಡೇಟಾಸೆಟ್ ಮತ್ತು ನೋಟ್ಬುಕ್ಗಳ ಮೂಲಕ ಸ್ಥಳೀಯವಾಗಿ ತರಬೇತಿ ನಡೆಸುತ್ತಿರುವುದರಿಂದ, ನ್ಯೂರಲ್ ನೆಟ್ವರ್ಕ್ಗಳು ಈ ಕಾರ್ಯಕ್ಕೆ ತುಂಬಾ ಭಾರವಾಗಿವೆ.
|
|
|
- **ಎರಡು ವರ್ಗದ ವರ್ಗೀಕರಣಕಾರಿಯನ್ನು ಬಳಸುವುದಿಲ್ಲ**. ನಾವು ಎರಡು ವರ್ಗದ ವರ್ಗೀಕರಣಕಾರಿಯನ್ನು ಬಳಸುವುದಿಲ್ಲ, ಆದ್ದರಿಂದ one-vs-all ನಿಯಮ ಹೊರತುಪಡಿಸಲಾಗಿದೆ.
|
|
|
- **ನಿರ್ಧಾರ ಮರ ಅಥವಾ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಕೆಲಸ ಮಾಡಬಹುದು**. ನಿರ್ಧಾರ ಮರ ಕೆಲಸ ಮಾಡಬಹುದು, ಅಥವಾ ಬಹು ವರ್ಗ ಡೇಟಾಗೆ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್.
|
|
|
- **ಬಹು ವರ್ಗ ಬೂಸ್ಟೆಡ್ ನಿರ್ಧಾರ ಮರಗಳು ಬೇರೆ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸುತ್ತವೆ**. ಬಹು ವರ್ಗ ಬೂಸ್ಟೆಡ್ ನಿರ್ಧಾರ ಮರವು ಅಪ್ರಮಾಣಿತ ಕಾರ್ಯಗಳಿಗೆ ಸೂಕ್ತ, ಉದಾ: ರ್ಯಾಂಕಿಂಗ್ ನಿರ್ಮಾಣಕ್ಕೆ, ಆದ್ದರಿಂದ ನಮ್ಮಿಗೆ ಉಪಯುಕ್ತವಲ್ಲ.
|
|
|
|
|
|
### Scikit-learn ಬಳಕೆ
|
|
|
|
|
|
ನಾವು ನಮ್ಮ ಡೇಟಾವನ್ನು ವಿಶ್ಲೇಷಿಸಲು Scikit-learn ಅನ್ನು ಬಳಸುತ್ತೇವೆ. ಆದರೆ, Scikit-learn ನಲ್ಲಿ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಬಳಸಲು ಹಲವಾರು ವಿಧಾನಗಳಿವೆ. [ಪ್ಯಾರಾಮೀಟರ್ಗಳನ್ನು](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression) ನೋಡಿ.
|
|
|
|
|
|
ಮೂಲತಃ ಎರಡು ಪ್ರಮುಖ ಪ್ಯಾರಾಮೀಟರ್ಗಳಿವೆ - `multi_class` ಮತ್ತು `solver` - ನಾವು Scikit-learn ಗೆ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಮಾಡಲು ಕೇಳುವಾಗ ಅವುಗಳನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಬೇಕು. `multi_class` ಮೌಲ್ಯವು ನಿರ್ದಿಷ್ಟ ವರ್ತನೆಯನ್ನು ಅನ್ವಯಿಸುತ್ತದೆ. `solver` ಮೌಲ್ಯವು ಯಾವ ಆಲ್ಗೋರಿದಮ್ ಬಳಸಬೇಕೆಂದು ಸೂಚಿಸುತ್ತದೆ. ಎಲ್ಲಾ ಸೊಲ್ವರ್ಗಳು ಎಲ್ಲಾ `multi_class` ಮೌಲ್ಯಗಳೊಂದಿಗೆ ಹೊಂದಿಕೆಯಾಗುವುದಿಲ್ಲ.
|
|
|
|
|
|
ಡಾಕ್ಯುಮೆಂಟ್ ಪ್ರಕಾರ, ಬಹು ವರ್ಗ ಪ್ರಕರಣದಲ್ಲಿ, ತರಬೇತಿ ಆಲ್ಗೋರಿದಮ್:
|
|
|
|
|
|
- **`multi_class` ಆಯ್ಕೆಯನ್ನು `ovr` ಗೆ ಸೆಟ್ ಮಾಡಿದರೆ one-vs-rest (OvR) ಯೋಜನೆಯನ್ನು ಬಳಸುತ್ತದೆ**
|
|
|
- **`multi_class` ಆಯ್ಕೆಯನ್ನು `multinomial` ಗೆ ಸೆಟ್ ಮಾಡಿದರೆ ಕ್ರಾಸ್-ಎಂಟ್ರೋಪಿ ನಷ್ಟವನ್ನು ಬಳಸುತ್ತದೆ**. (ಪ್ರಸ್ತುತ `multinomial` ಆಯ್ಕೆ ‘lbfgs’, ‘sag’, ‘saga’ ಮತ್ತು ‘newton-cg’ ಸೊಲ್ವರ್ಗಳಿಗೆ ಮಾತ್ರ ಬೆಂಬಲ ಇದೆ.)"
|
|
|
|
|
|
> 🎓 ಇಲ್ಲಿ 'ಯೋಜನೆ' ಎಂದರೆ 'ovr' (ಒಂದು-ವಿರುದ್ಧ-ಮತ್ತು) ಅಥವಾ 'multinomial'. ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಮೂಲತಃ ದ್ವಿವರ್ಗ ವರ್ಗೀಕರಣಕ್ಕೆ ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ, ಈ ಯೋಜನೆಗಳು ಬಹು ವರ್ಗ ವರ್ಗೀಕರಣ ಕಾರ್ಯಗಳನ್ನು ಉತ್ತಮವಾಗಿ ನಿರ್ವಹಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತವೆ. [ಮೂಲ](https://machinelearningmastery.com/one-vs-rest-and-one-vs-one-for-multi-class-classification/)
|
|
|
|
|
|
> 🎓 'ಸೊಲ್ವರ್' ಅನ್ನು "ಆಪ್ಟಿಮೈಜೆಷನ್ ಸಮಸ್ಯೆಯಲ್ಲಿ ಬಳಸುವ ಆಲ್ಗೋರಿದಮ್" ಎಂದು ವ್ಯಾಖ್ಯಾನಿಸಲಾಗಿದೆ. [ಮೂಲ](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression).
|
|
|
|
|
|
Scikit-learn ಈ ಟೇಬಲ್ ಅನ್ನು ನೀಡುತ್ತದೆ, ವಿವಿಧ ಡೇಟಾ ರಚನೆಗಳಿಂದ ಉಂಟಾಗುವ ಸವಾಲುಗಳನ್ನು ಸೊಲ್ವರ್ಗಳು ಹೇಗೆ ನಿರ್ವಹಿಸುತ್ತವೆ ಎಂಬುದನ್ನು ವಿವರಿಸಲು:
|
|
|
|
|
|

|
|
|
|
|
|
## ವ್ಯಾಯಾಮ - ಡೇಟಾವನ್ನು ವಿಭಜಿಸಿ
|
|
|
|
|
|
ನೀವು ಇತ್ತೀಚೆಗೆ ಹಿಂದಿನ ಪಾಠದಲ್ಲಿ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಬಗ್ಗೆ ಕಲಿತಿದ್ದೀರಿ, ಆದ್ದರಿಂದ ಮೊದಲ ತರಬೇತಿ ಪ್ರಯತ್ನಕ್ಕಾಗಿ ನಾವು ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಮೇಲೆ ಗಮನಹರಿಸಬಹುದು.
|
|
|
`train_test_split()` ಅನ್ನು ಕರೆ ಮಾಡಿ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ತರಬೇತಿ ಮತ್ತು ಪರೀಕ್ಷಾ ಗುಂಪುಗಳಾಗಿ ವಿಭಜಿಸಿ:
|
|
|
|
|
|
```python
|
|
|
X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3)
|
|
|
```
|
|
|
|
|
|
## ವ್ಯಾಯಾಮ - ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಅನ್ವಯಿಸಿ
|
|
|
|
|
|
ನೀವು ಬಹು ವರ್ಗ ಪ್ರಕರಣವನ್ನು ಬಳಸುತ್ತಿರುವುದರಿಂದ, ಯಾವ _ಯೋಜನೆ_ ಬಳಸಬೇಕು ಮತ್ತು ಯಾವ _ಸೊಲ್ವರ್_ ಸೆಟ್ ಮಾಡಬೇಕು ಎಂದು ಆಯ್ಕೆ ಮಾಡಬೇಕು. ಬಹು ವರ್ಗ ಸೆಟ್ಟಿಂಗ್ ಮತ್ತು **liblinear** ಸೊಲ್ವರ್ ಬಳಸಿ LogisticRegression ಅನ್ನು ತರಬೇತಿಗೆ ಬಳಸಿ.
|
|
|
|
|
|
1. multi_class ಅನ್ನು `ovr` ಗೆ ಮತ್ತು ಸೊಲ್ವರ್ ಅನ್ನು `liblinear` ಗೆ ಸೆಟ್ ಮಾಡಿ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ರಚಿಸಿ:
|
|
|
|
|
|
```python
|
|
|
lr = LogisticRegression(multi_class='ovr',solver='liblinear')
|
|
|
model = lr.fit(X_train, np.ravel(y_train))
|
|
|
|
|
|
accuracy = model.score(X_test, y_test)
|
|
|
print ("Accuracy is {}".format(accuracy))
|
|
|
```
|
|
|
|
|
|
✅ `lbfgs` ಎಂಬ ಬೇರೆ ಸೊಲ್ವರ್ ಅನ್ನು ಪ್ರಯತ್ನಿಸಿ, ಅದು ಸಾಮಾನ್ಯವಾಗಿ ಡೀಫಾಲ್ಟ್ ಆಗಿರುತ್ತದೆ
|
|
|
|
|
|
> ಗಮನಿಸಿ, ಅಗತ್ಯವಿದ್ದಾಗ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಫ್ಲ್ಯಾಟ್ ಮಾಡಲು Pandas [`ravel`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.ravel.html) ಫಂಕ್ಷನ್ ಬಳಸಿ.
|
|
|
|
|
|
ನಿಖರತೆ **80%** ಕ್ಕಿಂತ ಹೆಚ್ಚು ಉತ್ತಮವಾಗಿದೆ!
|
|
|
|
|
|
1. ನೀವು ಈ ಮಾದರಿಯನ್ನು ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿರುವುದನ್ನು ಡೇಟಾದ ಒಂದು ಸಾಲನ್ನು (#50) ಪರೀಕ್ಷಿಸುವ ಮೂಲಕ ನೋಡಬಹುದು:
|
|
|
|
|
|
```python
|
|
|
print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}')
|
|
|
print(f'cuisine: {y_test.iloc[50]}')
|
|
|
```
|
|
|
|
|
|
ಫಲಿತಾಂಶ ಮುದ್ರಿತವಾಗಿದೆ:
|
|
|
|
|
|
```output
|
|
|
ingredients: Index(['cilantro', 'onion', 'pea', 'potato', 'tomato', 'vegetable_oil'], dtype='object')
|
|
|
cuisine: indian
|
|
|
```
|
|
|
|
|
|
✅ ಬೇರೆ ಸಾಲಿನ ಸಂಖ್ಯೆಯನ್ನು ಪ್ರಯತ್ನಿಸಿ ಮತ್ತು ಫಲಿತಾಂಶಗಳನ್ನು ಪರಿಶೀಲಿಸಿ
|
|
|
|
|
|
1. ಇನ್ನಷ್ಟು ಆಳವಾಗಿ ಪರಿಶೀಲಿಸುವಾಗ, ನೀವು ಈ ಭವಿಷ್ಯವಾಣಿಯ ನಿಖರತೆಯನ್ನು ಪರಿಶೀಲಿಸಬಹುದು:
|
|
|
|
|
|
```python
|
|
|
test= X_test.iloc[50].values.reshape(-1, 1).T
|
|
|
proba = model.predict_proba(test)
|
|
|
classes = model.classes_
|
|
|
resultdf = pd.DataFrame(data=proba, columns=classes)
|
|
|
|
|
|
topPrediction = resultdf.T.sort_values(by=[0], ascending = [False])
|
|
|
topPrediction.head()
|
|
|
```
|
|
|
|
|
|
ಫಲಿತಾಂಶ ಮುದ್ರಿಸಲಾಗಿದೆ - ಭಾರತೀಯ ಆಹಾರವೇ ಇದರ ಅತ್ಯುತ್ತಮ ಊಹೆ, ಉತ್ತಮ ಸಾಧ್ಯತೆಯೊಂದಿಗೆ:
|
|
|
|
|
|
| | 0 |
|
|
|
| -------: | -------: |
|
|
|
| indian | 0.715851 |
|
|
|
| chinese | 0.229475 |
|
|
|
| japanese | 0.029763 |
|
|
|
| korean | 0.017277 |
|
|
|
| thai | 0.007634 |
|
|
|
|
|
|
✅ ಈ ಮಾದರಿ ಭಾರತೀಯ ಆಹಾರ ಎಂದು ಬಹುಶಃ ಖಚಿತವಾಗಿರುವುದಕ್ಕೆ ನೀವು ಕಾರಣವನ್ನು ವಿವರಿಸಬಹುದೇ?
|
|
|
|
|
|
1. ನೀವು ರಿಗ್ರೆಶನ್ ಪಾಠಗಳಲ್ಲಿ ಮಾಡಿದಂತೆ ವರ್ಗೀಕರಣ ವರದಿಯನ್ನು ಮುದ್ರಿಸುವ ಮೂಲಕ ಹೆಚ್ಚಿನ ವಿವರಗಳನ್ನು ಪಡೆಯಿರಿ:
|
|
|
|
|
|
```python
|
|
|
y_pred = model.predict(X_test)
|
|
|
print(classification_report(y_test,y_pred))
|
|
|
```
|
|
|
|
|
|
| | precision | recall | f1-score | support |
|
|
|
| ------------ | --------- | ------ | -------- | ------- |
|
|
|
| chinese | 0.73 | 0.71 | 0.72 | 229 |
|
|
|
| indian | 0.91 | 0.93 | 0.92 | 254 |
|
|
|
| japanese | 0.70 | 0.75 | 0.72 | 220 |
|
|
|
| korean | 0.86 | 0.76 | 0.81 | 242 |
|
|
|
| thai | 0.79 | 0.85 | 0.82 | 254 |
|
|
|
| accuracy | 0.80 | 1199 | | |
|
|
|
| macro avg | 0.80 | 0.80 | 0.80 | 1199 |
|
|
|
| weighted avg | 0.80 | 0.80 | 0.80 | 1199 |
|
|
|
|
|
|
## 🚀ಸವಾಲು
|
|
|
|
|
|
ಈ ಪಾಠದಲ್ಲಿ, ನೀವು ಸ್ವಚ್ಛಗೊಳಿಸಿದ ಡೇಟಾವನ್ನು ಬಳಸಿಕೊಂಡು ಒಂದು ಯಂತ್ರ ಅಧ್ಯಯನ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಿದ್ದೀರಿ, ಇದು ಪದಾರ್ಥಗಳ ಸರಣಿಯ ಆಧಾರದ ಮೇಲೆ ರಾಷ್ಟ್ರೀಯ ಆಹಾರವನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಬಹುದು. ಡೇಟಾವನ್ನು ವರ್ಗೀಕರಿಸಲು ಸ್ಕಿಕಿಟ್-ಲರ್ನ್ ನೀಡುವ ಅನೇಕ ಆಯ್ಕೆಗಳನ್ನು ಓದಲು ಸ್ವಲ್ಪ ಸಮಯ ತೆಗೆದುಕೊಳ್ಳಿ. 'ಸಾಲ್ವರ್' ಎಂಬ ಕಲ್ಪನೆಗೆ ಇನ್ನಷ್ಟು ಆಳವಾಗಿ ಹೋಗಿ, ಹಿನ್ನೆಲೆಯಲ್ಲಿ ಏನು ನಡೆಯುತ್ತದೆ ಎಂಬುದನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಿ.
|
|
|
|
|
|
## [ಪಾಠೋತ್ತರ ಪ್ರಶ್ನೋತ್ತರ](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
|
|
## ವಿಮರ್ಶೆ ಮತ್ತು ಸ್ವಯಂ ಅಧ್ಯಯನ
|
|
|
|
|
|
ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಹಿಂದಿನ ಗಣಿತವನ್ನು ಸ್ವಲ್ಪ ಹೆಚ್ಚು ಆಳವಾಗಿ ತಿಳಿದುಕೊಳ್ಳಿ [ಈ ಪಾಠದಲ್ಲಿ](https://people.eecs.berkeley.edu/~russell/classes/cs194/f11/lectures/CS194%20Fall%202011%20Lecture%2006.pdf)
|
|
|
## ನಿಯೋಜನೆ
|
|
|
|
|
|
[ಸಾಲ್ವರ್ಗಳನ್ನು ಅಧ್ಯಯನ ಮಾಡಿ](assignment.md)
|
|
|
|
|
|
---
|
|
|
|
|
|
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
|
|
**ಅಸ್ವೀಕಾರ**:
|
|
|
ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ತಪ್ಪುಗಳು ಇರಬಹುದು ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವಾಗಿ ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.
|
|
|
<!-- CO-OP TRANSLATOR DISCLAIMER END --> |