# ಆಹಾರ ವರ್ಗೀಕರಣಗಳು 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 ಹೋಲಿಕೆ ಮಾಡಲಾಗಿದೆ, ಫಲಿತಾಂಶಗಳನ್ನು ದೃಶ್ಯೀಕರಿಸಲಾಗಿದೆ: ![classification ಹೋಲಿಕೆ](../../../../translated_images/kn/comparison.edfab56193a85e7f.webp) > 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) ನಲ್ಲಿ ನೀಡಲಾದ ಆಲೋಚನೆಗಳನ್ನು ಅನುಸರಿಸುವುದು. ಇಲ್ಲಿ, ನಮ್ಮ ಬಹು ವರ್ಗ ಸಮಸ್ಯೆಗೆ ಕೆಲವು ಆಯ್ಕೆಗಳು ಇವೆ: ![ಬಹು ವರ್ಗ ಸಮಸ್ಯೆಗಳ ಚೀಟ್‌ಶೀಟ್](../../../../translated_images/kn/cheatsheet.07a475ea444d2223.webp) > ಮೈಕ್ರೋಸಾಫ್ಟ್‌ನ ಆಲ್ಗೋರಿದಮ್ ಚೀಟ್ ಶೀಟ್‌ನ ಒಂದು ಭಾಗ, ಬಹು ವರ್ಗ ವರ್ಗೀಕರಣ ಆಯ್ಕೆಗಳನ್ನು ವಿವರಿಸುತ್ತದೆ ✅ ಈ ಚೀಟ್ ಶೀಟ್ ಅನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ, ಮುದ್ರಿಸಿ, ನಿಮ್ಮ ಗೋಡೆಯ ಮೇಲೆ ಹಚ್ಚಿ! ### ತರ್ಕ ನಾವು ಹೊಂದಿರುವ ನಿರ್ಬಂಧಗಳನ್ನು ಗಮನಿಸಿ ವಿಭಿನ್ನ ವಿಧಾನಗಳ ಮೂಲಕ ತರ್ಕ ಮಾಡೋಣ: - **ನ್ಯೂರಲ್ ನೆಟ್‌ವರ್ಕ್‌ಗಳು ತುಂಬಾ ಭಾರವಾಗಿವೆ**. ನಮ್ಮ ಸ್ವಚ್ಛ ಆದರೆ ಕನಿಷ್ಠ ಡೇಟಾಸೆಟ್ ಮತ್ತು ನೋಟ್ಬುಕ್‌ಗಳ ಮೂಲಕ ಸ್ಥಳೀಯವಾಗಿ ತರಬೇತಿ ನಡೆಸುತ್ತಿರುವುದರಿಂದ, ನ್ಯೂರಲ್ ನೆಟ್‌ವರ್ಕ್‌ಗಳು ಈ ಕಾರ್ಯಕ್ಕೆ ತುಂಬಾ ಭಾರವಾಗಿವೆ. - **ಎರಡು ವರ್ಗದ ವರ್ಗೀಕರಣಕಾರಿಯನ್ನು ಬಳಸುವುದಿಲ್ಲ**. ನಾವು ಎರಡು ವರ್ಗದ ವರ್ಗೀಕರಣಕಾರಿಯನ್ನು ಬಳಸುವುದಿಲ್ಲ, ಆದ್ದರಿಂದ 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 ಈ ಟೇಬಲ್ ಅನ್ನು ನೀಡುತ್ತದೆ, ವಿವಿಧ ಡೇಟಾ ರಚನೆಗಳಿಂದ ಉಂಟಾಗುವ ಸವಾಲುಗಳನ್ನು ಸೊಲ್ವರ್‌ಗಳು ಹೇಗೆ ನಿರ್ವಹಿಸುತ್ತವೆ ಎಂಬುದನ್ನು ವಿವರಿಸಲು: ![ಸೊಲ್ವರ್‌ಗಳು](../../../../translated_images/kn/solvers.5fc648618529e627.webp) ## ವ್ಯಾಯಾಮ - ಡೇಟಾವನ್ನು ವಿಭಜಿಸಿ ನೀವು ಇತ್ತೀಚೆಗೆ ಹಿಂದಿನ ಪಾಠದಲ್ಲಿ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಬಗ್ಗೆ ಕಲಿತಿದ್ದೀರಿ, ಆದ್ದರಿಂದ ಮೊದಲ ತರಬೇತಿ ಪ್ರಯತ್ನಕ್ಕಾಗಿ ನಾವು ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಮೇಲೆ ಗಮನಹರಿಸಬಹುದು. `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) --- **ಅಸ್ವೀಕಾರ**: ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ತಪ್ಪುಗಳು ಇರಬಹುದು ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವಾಗಿ ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.