# వర్గీకరణకు పరిచయం ఈ నాలుగు పాఠాలలో, మీరు క్లాసిక్ మెషీన్ లెర్నింగ్ యొక్క ఒక ప్రాథమిక దృష్టి - _వర్గీకరణ_ ను అన్వేషించబోతున్నారు. ఆసియా మరియు భారతదేశంలోని అన్ని అద్భుతమైన వంటకాల గురించి డేటాసెట్‌తో వివిధ వర్గీకరణ అల్గోరిథమ్స్ ఉపయోగించడం ద్వారా మనం నడవబోతున్నాము. మీరు ఆకలిగా ఉన్నారని ఆశిస్తున్నాము! ![just a pinch!](../../../../translated_images/te/pinch.1b035ec9ba7e0d40.webp) > ఈ పాఠాలలో పాన్-ఆసియన్ వంటకాలను జరుపుకోండి! చిత్రం [జెన్ లూపర్](https://twitter.com/jenlooper) ద్వారా వర్గీకరణ అనేది [సూపర్వైజ్డ్ లెర్నింగ్](https://wikipedia.org/wiki/Supervised_learning) యొక్క ఒక రూపం, ఇది రిగ్రెషన్ సాంకేతికతలతో చాలా సామాన్యమైనది. మెషీన్ లెర్నింగ్ డేటాసెట్లను ఉపయోగించి విలువలు లేదా పేర్లను అంచనా వేయడమే అయితే, వర్గీకరణ సాధారణంగా రెండు గుంపులుగా విభజించబడుతుంది: _బైనరీ వర్గీకరణ_ మరియు _బహుళ వర్గీకరణ_. [![Introduction to classification](https://img.youtube.com/vi/eg8DJYwdMyg/0.jpg)](https://youtu.be/eg8DJYwdMyg "Introduction to classification") > 🎥 వీడియో కోసం పై చిత్రాన్ని క్లిక్ చేయండి: MIT యొక్క జాన్ గుట్‌టాగ్ వర్గీకరణను పరిచయం చేస్తారు గమనించండి: - **లీనియర్ రిగ్రెషన్** మీరు వేరియబుల్స్ మధ్య సంబంధాలను అంచనా వేయడంలో మరియు కొత్త డేటాపాయింట్ ఆ లైన్‌కు సంబంధించి ఎక్కడ పడుతుందో ఖచ్చితంగా అంచనా వేయడంలో సహాయపడింది. ఉదాహరణకు, మీరు _సెప్టెంబర్ మరియు డిసెంబర్‌లో పంప్కిన్ ధర ఎంత ఉంటుందో అంచనా వేయవచ్చు_. - **లాజిస్టిక్ రిగ్రెషన్** "బైనరీ వర్గాలు" కనుగొనడంలో సహాయపడింది: ఈ ధర వద్ద, _ఈ పంప్కిన్ నారింజ రంగులో ఉందా లేదా కాదు_? వర్గీకరణ వివిధ అల్గోరిథమ్స్ ఉపయోగించి డేటాపాయింట్ యొక్క లేబుల్ లేదా తరగతిని నిర్ణయించడానికి ఇతర మార్గాలను కనుగొంటుంది. మనం ఈ వంటకాల డేటాతో పని చేసి, ఒక సమూహం పదార్థాలను పరిశీలించి, దాని వంటక మూలాన్ని నిర్ణయించగలమా అని చూద్దాం. ## [పాఠం ముందు క్విజ్](https://ff-quizzes.netlify.app/en/ml/) > ### [ఈ పాఠం R లో అందుబాటులో ఉంది!](../../../../4-Classification/1-Introduction/solution/R/lesson_10.html) ### పరిచయం వర్గీకరణ మెషీన్ లెర్నింగ్ పరిశోధకుడు మరియు డేటా శాస్త్రవేత్త యొక్క ప్రాథమిక కార్యకలాపాలలో ఒకటి. ఒక బైనరీ విలువ ("ఈ ఇమెయిల్ స్పామ్ కాదా?") యొక్క ప్రాథమిక వర్గీకరణ నుండి, కంప్యూటర్ విజన్ ఉపయోగించి సంక్లిష్ట చిత్రం వర్గీకరణ మరియు విభజన వరకు, డేటాను తరగతులుగా వర్గీకరించి దానిపై ప్రశ్నలు అడగడం ఎప్పుడూ ఉపయోగకరం. ప్రక్రియను మరింత శాస్త్రీయంగా చెప్పాలంటే, మీ వర్గీకరణ పద్ధతి ఇన్‌పుట్ వేరియబుల్స్ మరియు అవుట్‌పుట్ వేరియబుల్స్ మధ్య సంబంధాన్ని మ్యాప్ చేయగల ఒక అంచనా మోడల్‌ను సృష్టిస్తుంది. ![binary vs. multiclass classification](../../../../translated_images/te/binary-multiclass.b56d0c86c81105a6.webp) > వర్గీకరణ అల్గోరిథమ్స్ నిర్వహించాల్సిన బైనరీ మరియు బహుళ వర్గ సమస్యలు. ఇన్ఫోగ్రాఫిక్ [జెన్ లూపర్](https://twitter.com/jenlooper) ద్వారా మన డేటాను శుభ్రపరచడం, దాన్ని విజువలైజ్ చేయడం మరియు ML పనుల కోసం సిద్ధం చేయడం ప్రారంభించే ముందు, మెషీన్ లెర్నింగ్ డేటాను వర్గీకరించడానికి ఉపయోగించగల వివిధ మార్గాల గురించి కొంత తెలుసుకుందాం. [సంఖ్యాశాస్త్రం](https://wikipedia.org/wiki/Statistical_classification) నుండి ఉద్భవించిన వర్గీకరణ క్లాసిక్ మెషీన్ లెర్నింగ్ ఉపయోగించి `smoker`, `weight`, మరియు `age` వంటి లక్షణాలను ఉపయోగించి _X వ్యాధి అభివృద్ధి చెందే అవకాశాన్ని_ నిర్ణయిస్తుంది. మీరు ముందుగా చేసిన రిగ్రెషన్ వ్యాయామాల్లా, ఇది సూపర్వైజ్డ్ లెర్నింగ్ సాంకేతికత, మీ డేటా లేబుల్డ్ ఉంటుంది మరియు ML అల్గోరిథమ్స్ ఆ లేబుల్స్ ఉపయోగించి డేటాసెట్ యొక్క తరగతులు (లక్షణాలు) వర్గీకరించి వాటిని ఒక గుంపు లేదా ఫలితానికి కేటాయిస్తాయి. ✅ వంటకాల గురించి ఒక డేటాసెట్‌ను ఊహించండి. బహుళ వర్గ మోడల్ ఏమి సమాధానం చెప్పగలదు? బైనరీ మోడల్ ఏమి సమాధానం చెప్పగలదు? మీరు ఒక వంటకం మెంతులు ఉపయోగించే అవకాశం ఉందా అని నిర్ణయించాలనుకుంటే? మీరు ఒక గ్రోసరీ బ్యాగ్‌లో స్టార్ అనీస్, ఆర్టిచోక్స్, కాలీఫ్లవర్, మరియు హోర్సరాడిష్ ఉన్నప్పుడు, మీరు ఒక సాధారణ భారతీయ వంటకం తయారుచేయగలరా? [![Crazy mystery baskets](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](https://youtu.be/GuTeDbaNoEU "Crazy mystery baskets") > 🎥 వీడియో కోసం పై చిత్రాన్ని క్లిక్ చేయండి. 'Chopped' షో యొక్క మొత్తం భావన 'మిస్టరీ బాస్కెట్' - అక్కడ చెఫ్స్ రాండమ్ పదార్థాలతో వంటకం తయారుచేయాలి. ఖచ్చితంగా ML మోడల్ సహాయపడేది! ## హలో 'క్లాసిఫయర్' ఈ వంటకాల డేటాసెట్ నుండి అడగదలచిన ప్రశ్న వాస్తవానికి **బహుళ వర్గ ప్రశ్న** ఎందుకంటే మనకు అనేక జాతీయ వంటకాలు ఉన్నాయి. పదార్థాల బ్యాచ్ ఇచ్చినప్పుడు, ఈ అనేక తరగతులలో ఏది డేటాకు సరిపోతుంది? Scikit-learn వివిధ అల్గోరిథమ్స్ అందిస్తుంది, మీరు పరిష్కరించదలచిన సమస్య రకాన్ని ఆధారంగా డేటాను వర్గీకరించడానికి. తదుపరి రెండు పాఠాలలో, మీరు ఈ అల్గోరిథమ్స్ గురించి తెలుసుకుంటారు. ## వ్యాయామం - మీ డేటాను శుభ్రపరచి సమతుల్యం చేయండి ఈ ప్రాజెక్ట్ ప్రారంభించే ముందు మొదటి పని, మీ డేటాను శుభ్రపరచి **సమతుల్యం** చేయడం, మెరుగైన ఫలితాలు పొందడానికి. ఈ ఫోల్డర్ రూట్‌లో ఉన్న ఖాళీ _notebook.ipynb_ ఫైల్‌తో ప్రారంభించండి. మొదట ఇన్‌స్టాల్ చేయవలసినది [imblearn](https://imbalanced-learn.org/stable/). ఇది Scikit-learn ప్యాకేజీ, ఇది డేటాను మెరుగ్గా సమతుల్యం చేయడానికి సహాయపడుతుంది (ఈ పనిని మీరు కొద్దిసేపట్లో నేర్చుకుంటారు). 1. `imblearn` ఇన్‌స్టాల్ చేయడానికి, ఇలా `pip install` నడపండి: ```python pip install imblearn ``` 1. మీ డేటాను దిగుమతి చేసుకోవడానికి మరియు దాన్ని విజువలైజ్ చేయడానికి అవసరమైన ప్యాకేజీలను దిగుమతి చేసుకోండి, అలాగే `imblearn` నుండి `SMOTE` ను దిగుమతి చేసుకోండి. ```python import pandas as pd import matplotlib.pyplot as plt import matplotlib as mpl import numpy as np from imblearn.over_sampling import SMOTE ``` ఇప్పుడు మీరు డేటాను దిగుమతి చేసుకోవడానికి సిద్ధంగా ఉన్నారు. 1. తదుపరి పని డేటాను దిగుమతి చేసుకోవడం: ```python df = pd.read_csv('../data/cuisines.csv') ``` `read_csv()` ఉపయోగించి _cusines.csv_ ఫైల్ యొక్క కంటెంట్‌ను చదివి `df` వేరియబుల్‌లో ఉంచుతుంది. 1. డేటా ఆకారాన్ని తనిఖీ చేయండి: ```python df.head() ``` మొదటి ఐదు వరుసలు ఇలా ఉంటాయి: ```output | | 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 | 65 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | 1 | 66 | indian | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | 2 | 67 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | 3 | 68 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | 4 | 69 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | ``` 1. `info()` పిలిచి ఈ డేటా గురించి సమాచారం పొందండి: ```python df.info() ``` మీ అవుట్‌పుట్ ఇలా ఉంటుంది: ```output RangeIndex: 2448 entries, 0 to 2447 Columns: 385 entries, Unnamed: 0 to zucchini dtypes: int64(384), object(1) memory usage: 7.2+ MB ``` ## వ్యాయామం - వంటకాల గురించి తెలుసుకోవడం ఇప్పుడు పని మరింత ఆసక్తికరంగా మారుతుంది. వంటకాల వారీగా డేటా పంపిణీని కనుగొనండి 1. `barh()` పిలిచి డేటాను బార్లుగా ప్లాట్ చేయండి: ```python df.cuisine.value_counts().plot.barh() ``` ![cuisine data distribution](../../../../translated_images/te/cuisine-dist.d0cc2d551abe5c25.webp) వంటకాల సంఖ్య పరిమితి ఉన్నప్పటికీ, డేటా పంపిణీ అసమానంగా ఉంది. మీరు దీన్ని సరిచేయవచ్చు! ముందుగా, మరింత అన్వేషించండి. 1. వంటకాల వారీగా ఎంత డేటా ఉందో కనుగొని ప్రింట్ చేయండి: ```python thai_df = df[(df.cuisine == "thai")] japanese_df = df[(df.cuisine == "japanese")] chinese_df = df[(df.cuisine == "chinese")] indian_df = df[(df.cuisine == "indian")] korean_df = df[(df.cuisine == "korean")] print(f'thai df: {thai_df.shape}') print(f'japanese df: {japanese_df.shape}') print(f'chinese df: {chinese_df.shape}') print(f'indian df: {indian_df.shape}') print(f'korean df: {korean_df.shape}') ``` అవుట్‌పుట్ ఇలా ఉంటుంది: ```output thai df: (289, 385) japanese df: (320, 385) chinese df: (442, 385) indian df: (598, 385) korean df: (799, 385) ``` ## పదార్థాలను కనుగొనడం ఇప్పుడు మీరు డేటాలో లోతుగా వెళ్ళి వంటకాల వారీగా సాధారణ పదార్థాలు ఏమిటో తెలుసుకోవచ్చు. వంటకాల మధ్య గందరగోళం సృష్టించే పునరావృత డేటాను శుభ్రపరచాలి, కాబట్టి ఈ సమస్య గురించి తెలుసుకుందాం. 1. పదార్థాల డేటాఫ్రేమ్ సృష్టించడానికి Python లో `create_ingredient()` ఫంక్షన్ సృష్టించండి. ఈ ఫంక్షన్ ఉపయోగకరంలేని కాలమ్‌ను తొలగించి, పదార్థాలను వారి కౌంట్ ఆధారంగా సర్దుతుంది: ```python def create_ingredient_df(df): ingredient_df = df.T.drop(['cuisine','Unnamed: 0']).sum(axis=1).to_frame('value') ingredient_df = ingredient_df[(ingredient_df.T != 0).any()] ingredient_df = ingredient_df.sort_values(by='value', ascending=False, inplace=False) return ingredient_df ``` ఇప్పుడు మీరు ఆ ఫంక్షన్ ఉపయోగించి వంటకాల వారీగా టాప్ టెన్ అత్యంత ప్రాచుర్యం పొందిన పదార్థాల ఆలోచన పొందవచ్చు. 1. `create_ingredient()` పిలిచి `barh()` పిలిచి ప్లాట్ చేయండి: ```python thai_ingredient_df = create_ingredient_df(thai_df) thai_ingredient_df.head(10).plot.barh() ``` ![thai](../../../../translated_images/te/thai.0269dbab2e78bd38.webp) 1. జపనీస్ డేటా కోసం అదే చేయండి: ```python japanese_ingredient_df = create_ingredient_df(japanese_df) japanese_ingredient_df.head(10).plot.barh() ``` ![japanese](../../../../translated_images/te/japanese.30260486f2a05c46.webp) 1. ఇప్పుడు చైనీస్ పదార్థాల కోసం: ```python chinese_ingredient_df = create_ingredient_df(chinese_df) chinese_ingredient_df.head(10).plot.barh() ``` ![chinese](../../../../translated_images/te/chinese.e62cafa5309f111a.webp) 1. ఇండియన్ పదార్థాలను ప్లాట్ చేయండి: ```python indian_ingredient_df = create_ingredient_df(indian_df) indian_ingredient_df.head(10).plot.barh() ``` ![indian](../../../../translated_images/te/indian.2c4292002af1a1f9.webp) 1. చివరగా, కొరియన్ పదార్థాలను ప్లాట్ చేయండి: ```python korean_ingredient_df = create_ingredient_df(korean_df) korean_ingredient_df.head(10).plot.barh() ``` ![korean](../../../../translated_images/te/korean.4a4f0274f3d9805a.webp) 1. ఇప్పుడు, వేర్వేరు వంటకాల మధ్య గందరగోళం సృష్టించే అత్యంత సాధారణ పదార్థాలను `drop()` పిలిచి తొలగించండి: అందరూ అన్నం, వెల్లుల్లి మరియు అల్లం ఇష్టపడతారు! ```python feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1) labels_df = df.cuisine #.unique() feature_df.head() ``` ## డేటాసెట్‌ను సమతుల్యం చేయండి ఇప్పుడు మీరు డేటాను శుభ్రపరిచిన తర్వాత, [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) - "సింథటిక్ మైనారిటీ ఓవర్-సాంప్లింగ్ టెక్నిక్" - ఉపయోగించి దాన్ని సమతుల్యం చేయండి. 1. `fit_resample()` పిలవండి, ఈ వ్యూహం ఇంటర్‌పోలేషన్ ద్వారా కొత్త నమూనాలను సృష్టిస్తుంది. ```python oversample = SMOTE() transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df) ``` మీ డేటాను సమతుల్యం చేయడం ద్వారా, మీరు దాన్ని వర్గీకరించేటప్పుడు మెరుగైన ఫలితాలు పొందుతారు. ఒక బైనరీ వర్గీకరణ గురించి ఆలోచించండి. మీ డేటాలో ఎక్కువ భాగం ఒక తరగతికి చెందినట్లయితే, ML మోడల్ ఆ తరగతిని ఎక్కువగా అంచనా వేయగలదు, ఎందుకంటే దానికి ఎక్కువ డేటా ఉంటుంది. డేటాను సమతుల్యం చేయడం ఏదైనా వక్రీకృత డేటాను తీసుకుని ఈ అసమతుల్యతను తొలగించడంలో సహాయపడుతుంది. 1. ఇప్పుడు పదార్థాల వారీగా లేబుల్స్ సంఖ్యను తనిఖీ చేయండి: ```python print(f'new label count: {transformed_label_df.value_counts()}') print(f'old label count: {df.cuisine.value_counts()}') ``` మీ అవుట్‌పుట్ ఇలా ఉంటుంది: ```output new label count: korean 799 chinese 799 indian 799 japanese 799 thai 799 Name: cuisine, dtype: int64 old label count: korean 799 indian 598 chinese 442 japanese 320 thai 289 Name: cuisine, dtype: int64 ``` డేటా చక్కగా శుభ్రపరచబడింది, సమతుల్యం చేయబడింది, మరియు చాలా రుచికరంగా ఉంది! 1. చివరి దశలో, లేబుల్స్ మరియు లక్షణాలను కలిగి ఉన్న మీ సమతుల్య డేటాను కొత్త డేటాఫ్రేమ్‌లో సేవ్ చేయండి, దీన్ని ఫైల్‌గా ఎగుమతి చేయవచ్చు: ```python transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer') ``` 1. `transformed_df.head()` మరియు `transformed_df.info()` ఉపయోగించి డేటాను మరొకసారి చూడవచ్చు. భవిష్యత్తు పాఠాల కోసం ఈ డేటా కాపీని సేవ్ చేయండి: ```python transformed_df.head() transformed_df.info() transformed_df.to_csv("../data/cleaned_cuisines.csv") ``` ఈ తాజా CSV ఇప్పుడు రూట్ డేటా ఫోల్డర్‌లో కనిపిస్తుంది. --- ## 🚀సవాలు ఈ పాఠ్యాంశంలో అనేక ఆసక్తికరమైన డేటాసెట్లు ఉన్నాయి. `data` ఫోల్డర్లలో వెతకండి మరియు ఏవైనా బైనరీ లేదా బహుళ వర్గీకరణకు అనుకూలమైన డేటాసెట్లు ఉన్నాయా చూడండి? మీరు ఆ డేటాసెట్ నుండి ఏ ప్రశ్నలు అడగాలనుకుంటారు? ## [పాఠం తర్వాత క్విజ్](https://ff-quizzes.netlify.app/en/ml/) ## సమీక్ష & స్వీయ అధ్యయనం SMOTE యొక్క API ను అన్వేషించండి. ఇది ఏ ఉపయోగాల కోసం ఉత్తమంగా ఉపయోగించబడుతుంది? ఇది ఏ సమస్యలను పరిష్కరిస్తుంది? ## అసైన్‌మెంట్ [వర్గీకరణ పద్ధతులను అన్వేషించండి](assignment.md) --- **అస్పష్టత**: ఈ పత్రాన్ని AI అనువాద సేవ [Co-op Translator](https://github.com/Azure/co-op-translator) ఉపయోగించి అనువదించబడింది. మేము ఖచ్చితత్వానికి ప్రయత్నించినప్పటికీ, ఆటోమేటెడ్ అనువాదాల్లో పొరపాట్లు లేదా తప్పిదాలు ఉండవచ్చు. అసలు పత్రం దాని స్వదేశీ భాషలోనే అధికారిక మూలంగా పరిగణించాలి. ముఖ్యమైన సమాచారానికి, ప్రొఫెషనల్ మానవ అనువాదం చేయించుకోవడం మంచిది. ఈ అనువాదం వాడకంలో ఏర్పడిన ఏవైనా అపార్థాలు లేదా తప్పుదారులు కోసం మేము బాధ్యత వహించము.