या धड्यात, तुम्ही मागील धड्यापासून जतन केलेला डेटा संच वापराल ज्यामध्ये समतोल, स्वच्छ डेटा आहे जो पूर्णपणे काही विशिष्ट भोजनपरंपरांच्या बद्दल आहे.
तुम्ही या डेटा संचासह विविध वर्गीकरण करणाऱ्या अल्गोरिदम वापराल जे एक गट घटकांवर आधारित राष्ट्रीय भोजनपरंपरा भाकीत करतात. तसे करताना, तुम्हाला वर्गीकरणाच्या कामांसाठी अल्गोरिदम कसे वापरले जाऊ शकतात याबद्दल अधिक माहिती मिळेल.
गृहीत धरा की तुम्ही धडा 1 पूर्ण केला आहे, तर या चार धड्यांसाठी रूट /data फोल्डरमध्ये cleaned_cuisines.csv नावाचा फाईल अवश्य आहे.
-
या धड्याच्या notebook.ipynb फोल्डरमध्ये काम करताना, तो फाईल आणि Pandas लायब्ररी इंपोर्ट करा:
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 |
-
आता, अजून काही लायब्ररी इंपोर्ट करा:
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
-
X आणि y कोऑर्डिनेट्सना दोन वेगळ्या डेटा फ्रेममध्ये विभाजित करा प्रशिक्षणासाठी.
cuisineही लेबल्सची डेटा फ्रेम असू शकते:cuisines_label_df = cuisines_df['cuisine'] cuisines_label_df.head()
ते असे दिसेल:
0 indian 1 indian 2 indian 3 indian 4 indian Name: cuisine, dtype: object -
Unnamed: 0आणिcuisineस्तंभ काढून टाकाdrop()वापरून. उर्वरित डेटा ट्रेनिंग फीचर्स म्हणून जतन करा: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 |
| 1 | 1 | 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 |
| 3 | 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 |
आता तुम्ही तुमचा मॉडेल प्रशिक्षणासाठी तयार आहात!
तुमचा डेटा स्वच्छ आणि प्रशिक्षणासाठी तयार झाल्यानंतर, तुम्हाला या कामासाठी कोणता अल्गोरिदम वापरायचा हे ठरवावे लागेल.
Scikit-learn वर्गीकरणाला Supervised Learning अंतर्गत समूहित करते आणि त्या श्रेणीत तुम्हाला वर्गीकरणाचे अनेक मार्ग सापडतील. विविधता पहिल्या दृष्टीक्षेपात खूपच गुंतागुंतीची वाटू शकते. पुढील पद्धती सर्व वर्गीकरण तंत्रज्ञानाची उदाहरणे आहेत:
- रेषीय मॉडेल्स (Linear Models)
- सहाय्यक व्हेक्टर मशीन (Support Vector Machines)
- स्टोकास्टिक ग्रेडियंट डिसेंट (Stochastic Gradient Descent)
- सर्वात जवळची शेजारी (Nearest Neighbors)
- गॉसियन प्रोसेसेस (Gaussian Processes)
- निर्णय वृक्ष (Decision Trees)
- संयुक्त पद्धती (Ensemble methods, उदा. voting Classifier)
- मल्टिक्लास आणि मल्टिआउटपुट अल्गोरिदम (मल्टिक्लास आणि मल्टीलेबल वर्गीकरण, मल्टिक्लास-मल्टिआउटपुट वर्गीकरण)
तुम्ही न्यूरल नेटवर्क्स वापरून डेटा वर्गीकरण देखील करू शकता, पण तो या धड्याच्या परीघाबाहेर आहे.
तर, तुम्ही कोणता वर्गीकरण करणारा निवडावा? अनेक वेळा, अनेक वापरून आणि चांगले निकाल पाहून चाचणी करणे उपयुक्त असते. Scikit-learn तयार केलेल्या डेटासेटवर KNeighbors, SVC (दोन प्रकारे), GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB आणि QuadraticDiscriminantAnalysis यांची पक्ष-द्वेष तुलना देते आणि निकाल दृष्य स्वरूपात उत्पन्न करते:
प्लॉट्स Scikit-learn च्या दस्तऐवजात तयार केलेले आहेत
AutoML हा प्रश्न क्लाउडमध्ये हे तुलना चालवून तुमच्या डेटासाठी सर्वोत्तम अल्गोरिदम निवडण्यास मदत करतो. ते इथे वापरून पहा
अंधाधुंद अंदाज लावण्याऐवजी, डाउनलोड करता येणाऱ्या ML Cheat Sheet मधील कल्पना अनुसरण करणे चांगले आहे. येथे आपल्याला आपल्या मल्टिक्लास समस्येसाठी काही निवडी आढळतात:
Microsoft च्या Algorithm Cheat Sheet चा एक भाग, जे मल्टिक्लास वर्गीकरण पर्याय तपशीलवार दाखवते
✅ हा Cheat Sheet डाउनलोड करा, प्रिंट करा आणि तुमच्याजवळ लावा!
चला पाहूया आपल्याकडे असलेल्या अटींनुसार विविध दृष्टिकोनांबद्दल जर विवेचन करता येईल का:
- न्यूरल नेटवर्क्स खूप जड आहेत. आमचा डेटा स्वच्छ आहे पण कमी, तसेच प्रशिक्षण स्थानिक नोटबुकवर चालवले जात आहे, त्यामुळे न्यूरल नेटवर्क्स या कामासाठी जड आहेत.
- दोन वर्ग करत नाही. आपण दोन-श्रेणी वर्गीकरण वापरत नाही, म्हणून one-vs-all युक्ती वापरत नाही.
- निर्णय वृक्ष किंवा लॉजिस्टिक रिग्रेशन काम करू शकते. निर्णय वृक्ष किंवा मल्टिक्लास डेटा साठी लॉजिस्टिक रिग्रेशन वापरता येऊ शकतो.
- मल्टिक्लास बूस्टेड निर्णय वृक्ष वेगळ्या समस्येसाठी आहे. मल्टिक्लास बूस्टेड निर्णय वृक्ष मुख्यतः नॉन-पॅरामीट्रिक कामांसाठी उपयुक्त आहे, जसे की रँकिंग तयार करण्यासाठी, त्यामुळे तो आपल्यासाठी उपयुक्त नाही.
आम्ही Scikit-learn वापरून डेटा विश्लेषण करू. मात्र, Scikit-learn मध्ये लॉजिस्टिक रिग्रेशन वापरण्याचे अनेक मार्ग आहेत. पॅरामीटर्स एकदा बघा.
मूळतः दोन महत्त्वाचे पर्याय आहेत - multi_class आणि solver - जे आपण लॉजिस्टिक रिग्रेशन करताना सांगावे लागतात. multi_class मूल्य विशिष्ट वर्तन ठरवते. solver म्हणजे कोणता अल्गोरिदम वापरायचा आहे ते सूचित करते. सर्व solvers सर्व multi_class पर्यायांसोबत जुळत नाहीत.
दस्तऐवजांनुसार, मल्टिक्लास केस मध्ये, प्रशिक्षण अल्गोरिदम:
- one-vs-rest (OvR) पद्धत वापरतो, जर
multi_classपर्यायovrअसेल तर - cross-entropy loss वापरतो, जर
multi_classपर्यायmultinomialअसेल तर. (सध्याmultinomialपर्याय 'lbfgs’, ‘sag’, ‘saga’ आणि ‘newton-cg’ solvers ना समर्थन देतो.)"
🎓 'scheme' म्हणजे 'ovr' (one-vs-rest) किंवा 'multinomial' हे असू शकते. लॉजिस्टिक रिग्रेशन मुख्यतः द्विश्रेणी वर्गीकरणासाठी तयार असल्यामुळे, या युक्त्या मल्टिक्लास वर्गीकरण अधिक चांगल्या प्रकारे हाताळतात. source
🎓 ‘solver’ म्हणजे "ऑप्टिमायझेशन समस्येत वापरला जाणारा अल्गोरिदम". source.
Scikit-learn खालील टेबल देते ज्यामध्ये वेगवेगळ्या डेटा प्रकारांसाठी कसे solvers काम करतात हे दाखवले आहे:
आपण आपल्या पहिल्या प्रशिक्षणासाठी लॉजिस्टिक रिग्रेशनवर लक्ष केंद्रित करू शकतो कारण तुम्हाला मागील धड्यात याबद्दल नुकताच शिकायला मिळाले आहे.
train_test_split() वापरून तुमचा डेटा प्रशिक्षण आणि चाचणी समूहांत विभाजित करा:
X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3)तुम्ही मल्टिक्लास केस वापरत असल्याने कोणती scheme आणि कोणता solver वापरायचा हे ठरवा. मल्टिक्लास सेटिंगसाठी LogisticRegression वापरा आणि liblinear solver वापरून प्रशिक्षण द्या.
-
multi_class साठी
ovrआणि solver साठीliblinearअसलेली लॉजिस्टिक रिग्रेशन तयार करा: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))
✅ इतर solver
lbfgsदेखील वापरून पाहा, जे अनेकदा डिफॉल्ट असतोलक्षात घ्या, आवश्यक असताना तुमचा डेटा flatten करण्यासाठी Pandas ची
ravelफंक्शन वापरा.अचूकता ८०% पेक्षा जास्त चांगली आहे!
-
तुम्ही या मॉडेलची एक ओळ (#50) चाचणी देऊन ते कसे कार्य करते ते पाहू शकता:
print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}') print(f'cuisine: {y_test.iloc[50]}')
निकाल हा मुद्रित होतो:
ingredients: Index(['cilantro', 'onion', 'pea', 'potato', 'tomato', 'vegetable_oil'], dtype='object') cuisine: indian✅ दुसरी ओळ क्रमांक वापरून निकाल तपासा
-
अधिक खोलवर तपासण्यासाठी, तुम्ही या भविष्यवाणीसाठी अचूकता तपासू शकता:
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 ✅ तुम्ही समजावून सांगू शकता का की मॉडेल का इतके निश्चित आहे की हे भारतीय जेवण आहे?
-
रिग्रेशन धडे जसे केलं तसे वर्गीकरण अहवाल छापून अधिक तपशील मिळवा:
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
या धड्यात, तुम्ही स्वच्छ केलेल्या डेटाचा वापर करून असा मशीन लर्निंग मॉडेल तयार केला जो घटकांच्या मालिकेवरून राष्ट्रीय जेवणाचा अंदाज लावू शकतो. डेटा वर्गीकरणासाठी Scikit-learn अनेक पर्याय पुरवते त्यातील विविध पर्याय वाचण्यासाठी काही वेळ द्या. 'सॉल्वर' या संकल्पनेत अधिक खोलवर जाणून घ्या ज्यामुळे समजेल की मागच्या प्रक्रियेत काय होते.
या धड्यात लॉजिस्टिक रिग्रेशनच्या गणितामागील तत्त्वे अधिक खोलात बघा.
सूचना:
हा दस्तऐवज Co-op Translator या AI भाषांतर सेवेचा वापर करून भाषांतरित केला आहे. आम्ही अचूकतेसाठी प्रयत्नशील असतो, तरीही कृपया ध्यानात ठेवा की ऑटोमेटेड भाषांतरांमध्ये चुका किंवा अचूकतेची कमतरता असू शकते. मूळ दस्तऐवज त्याच्या स्थानिक भाषेत अधिकृत स्रोत मानला पाहिजे. महत्वाची माहिती असल्यास व्यावसायिक मानवी भाषांतर करण्याची शिफारस केली जाते. या भाषांतराच्या वापरातून उद्भवणार्या कुठल्याही गैरसमजुतीसाठी किंवा चुकीच्या अर्थ लावण्याबद्दल आम्ही जबाबदार नाही.


