# खाना वर्गीकरणकर्ता २ यस दोस्रो वर्गीकरण पाठमा, तपाईंले संख्यात्मक डाटालाई वर्गीकरण गर्ने थप तरिकाहरू अन्वेषण गर्नुहुनेछ। साथै, तपाईंले एक वर्गीकरणकर्ता चयन गर्दा हुने प्रभावहरूको बारेमा सिक्नुहुनेछ। ## [पाठ अघि क्विज](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/23/) ### पूर्वशर्त हामी मान्दछौं कि तपाईंले अघिल्लो पाठहरू पूरा गर्नुभएको छ र तपाईंको `data` फोल्डरमा _cleaned_cuisines.csv_ नामक सफा गरिएको डेटासेट छ, जुन यो ४-पाठको फोल्डरको मूलमा छ। ### तयारी हामीले तपाईंको _notebook.ipynb_ फाइललाई सफा गरिएको डेटासेटसँग लोड गरेका छौं र यसलाई X र y डाटाफ्रेमहरूमा विभाजन गरेका छौं, मोडेल निर्माण प्रक्रियाको लागि तयार। ## वर्गीकरणको नक्सा पहिले, तपाईंले माइक्रोसफ्टको चिट शीट प्रयोग गरेर डाटा वर्गीकरण गर्दा विभिन्न विकल्पहरूको बारेमा सिक्नुभएको थियो। Scikit-learn ले यस्तै तर अधिक विस्तृत चिट शीट प्रदान गर्दछ जसले तपाईंलाई वर्गीकरणकर्ता (अर्को शब्दमा, "एस्टिमेटर") चयन गर्न अझ सटीक रूपमा मद्दत गर्न सक्छ: ![Scikit-learn बाट ML नक्सा](../../../../translated_images/map.e963a6a51349425ab107b38f6c7307eb4c0d0c7ccdd2e81a5e1919292bab9ac7.ne.png) > टिप: [यो नक्सा अनलाइन हेर्नुहोस्](https://scikit-learn.org/stable/tutorial/machine_learning_map/) र मार्गमा क्लिक गरेर दस्तावेज पढ्नुहोस्। ### योजना यो नक्सा तपाईंको डाटाको स्पष्ट समझ भएपछि धेरै उपयोगी हुन्छ, किनकि तपाईं यसका मार्गहरू 'हिँडेर' निर्णयमा पुग्न सक्नुहुन्छ: - हामीसँग >५० नमूनाहरू छन् - हामीले एक श्रेणीको भविष्यवाणी गर्न चाहन्छौं - हामीसँग लेबल गरिएको डाटा छ - हामीसँग १००K भन्दा कम नमूनाहरू छन् - ✨ हामीले Linear SVC चयन गर्न सक्छौं - यदि यो काम गर्दैन भने, किनकि हामीसँग संख्यात्मक डाटा छ - हामी ✨ KNeighbors Classifier प्रयास गर्न सक्छौं - यदि यो काम गर्दैन भने, ✨ SVC र ✨ Ensemble Classifiers प्रयास गर्नुहोस् यो पछ्याउन धेरै उपयोगी मार्ग हो। ## अभ्यास - डाटा विभाजन गर्नुहोस् यस मार्गलाई पछ्याउँदै, हामीले प्रयोग गर्न केही लाइब्रेरीहरू आयात गर्न सुरु गर्नुपर्छ। 1. आवश्यक लाइब्रेरीहरू आयात गर्नुहोस्: ```python from sklearn.neighbors import KNeighborsClassifier from sklearn.linear_model import LogisticRegression from sklearn.svm import SVC from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier 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 import numpy as np ``` 1. आफ्नो प्रशिक्षण र परीक्षण डाटा विभाजन गर्नुहोस्: ```python X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) ``` ## Linear SVC वर्गीकरणकर्ता Support-Vector clustering (SVC) Support-Vector machines परिवारको ML प्रविधिहरूको एक भाग हो (तल यसबारे थप जान्नुहोस्)। यस विधिमा, तपाईंले लेबलहरू क्लस्टर गर्न 'kernel' चयन गर्न सक्नुहुन्छ। 'C' प्यारामिटर 'regularization' लाई जनाउँछ जसले प्यारामिटरहरूको प्रभावलाई नियमन गर्दछ। kernel [कयौं](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC) मध्ये एक हुन सक्छ; यहाँ हामीले 'linear' सेट गरेका छौं ताकि हामी linear SVC प्रयोग गर्न सकौं। Probability डिफल्टमा 'false' हुन्छ; यहाँ हामीले probability estimates सङ्कलन गर्न 'true' सेट गरेका छौं। हामीले random state '0' सेट गरेका छौं ताकि डाटालाई probability प्राप्त गर्न शफल गर्न सकियोस्। ### अभ्यास - linear SVC लागू गर्नुहोस् क्लासिफायरहरूको एक array सिर्जना गरेर सुरु गर्नुहोस्। हामीले परीक्षण गर्दा यस array मा क्रमिक रूपमा थप्नेछौं। 1. Linear SVC बाट सुरु गर्नुहोस्: ```python C = 10 # Create different classifiers. classifiers = { 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) } ``` 2. Linear SVC प्रयोग गरेर आफ्नो मोडेल प्रशिक्षण गर्नुहोस् र रिपोर्ट प्रिन्ट गर्नुहोस्: ```python n_classifiers = len(classifiers) for index, (name, classifier) in enumerate(classifiers.items()): classifier.fit(X_train, np.ravel(y_train)) y_pred = classifier.predict(X_test) accuracy = accuracy_score(y_test, y_pred) print("Accuracy (train) for %s: %0.1f%% " % (name, accuracy * 100)) print(classification_report(y_test,y_pred)) ``` नतिजा धेरै राम्रो छ: ```output Accuracy (train) for Linear SVC: 78.6% precision recall f1-score support chinese 0.71 0.67 0.69 242 indian 0.88 0.86 0.87 234 japanese 0.79 0.74 0.76 254 korean 0.85 0.81 0.83 242 thai 0.71 0.86 0.78 227 accuracy 0.79 1199 macro avg 0.79 0.79 0.79 1199 weighted avg 0.79 0.79 0.79 1199 ``` ## K-Neighbors वर्गीकरणकर्ता K-Neighbors ML विधिहरूको "neighbors" परिवारको भाग हो, जसले सुपरभाइज्ड र अनसुपरभाइज्ड सिकाइका लागि प्रयोग गर्न सकिन्छ। यस विधिमा, पूर्वनिर्धारित बिन्दुहरूको संख्या सिर्जना गरिन्छ र डाटालाई ती बिन्दुहरूको वरिपरि सङ्कलन गरिन्छ ताकि डाटाको सामान्यीकृत लेबलहरूको भविष्यवाणी गर्न सकियोस्। ### अभ्यास - K-Neighbors वर्गीकरणकर्ता लागू गर्नुहोस् अघिल्लो वर्गीकरणकर्ता राम्रो थियो, र डाटासँग राम्रोसँग काम गर्यो, तर सायद हामी अझ राम्रो accuracy प्राप्त गर्न सक्छौं। K-Neighbors वर्गीकरणकर्ता प्रयास गर्नुहोस्। 1. आफ्नो क्लासिफायर array मा एक लाइन थप्नुहोस् (Linear SVC वस्तु पछि comma थप्नुहोस्): ```python 'KNN classifier': KNeighborsClassifier(C), ``` नतिजा अलिकति खराब छ: ```output Accuracy (train) for KNN classifier: 73.8% precision recall f1-score support chinese 0.64 0.67 0.66 242 indian 0.86 0.78 0.82 234 japanese 0.66 0.83 0.74 254 korean 0.94 0.58 0.72 242 thai 0.71 0.82 0.76 227 accuracy 0.74 1199 macro avg 0.76 0.74 0.74 1199 weighted avg 0.76 0.74 0.74 1199 ``` ✅ [K-Neighbors](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) को बारेमा जान्नुहोस् ## Support Vector Classifier Support-Vector classifiers [Support-Vector Machine](https://wikipedia.org/wiki/Support-vector_machine) परिवारको ML विधिहरूको भाग हो जसले वर्गीकरण र regression कार्यहरूको लागि प्रयोग गरिन्छ। SVMs "प्रशिक्षण उदाहरणहरूलाई ठाउँमा बिन्दुहरूमा नक्सा" गर्छन् ताकि दुई श्रेणीहरू बीचको दूरी अधिकतम गर्न सकियोस्। त्यसपछि डाटालाई यस ठाउँमा नक्सा गरिन्छ ताकि तिनीहरूको श्रेणीको भविष्यवाणी गर्न सकियोस्। ### अभ्यास - Support Vector Classifier लागू गर्नुहोस् Support Vector Classifier प्रयोग गरेर अझ राम्रो accuracy प्रयास गरौं। 1. K-Neighbors वस्तु पछि comma थप्नुहोस्, र त्यसपछि यो लाइन थप्नुहोस्: ```python 'SVC': SVC(), ``` नतिजा धेरै राम्रो छ! ```output Accuracy (train) for SVC: 83.2% precision recall f1-score support chinese 0.79 0.74 0.76 242 indian 0.88 0.90 0.89 234 japanese 0.87 0.81 0.84 254 korean 0.91 0.82 0.86 242 thai 0.74 0.90 0.81 227 accuracy 0.83 1199 macro avg 0.84 0.83 0.83 1199 weighted avg 0.84 0.83 0.83 1199 ``` ✅ [Support-Vectors](https://scikit-learn.org/stable/modules/svm.html#svm) को बारेमा जान्नुहोस् ## Ensemble Classifiers पथको अन्त्यसम्म पुगौं, यद्यपि अघिल्लो परीक्षण धेरै राम्रो थियो। 'Ensemble Classifiers' प्रयास गरौं, विशेष गरी Random Forest र AdaBoost: ```python 'RFST': RandomForestClassifier(n_estimators=100), 'ADA': AdaBoostClassifier(n_estimators=100) ``` नतिजा धेरै राम्रो छ, विशेष गरी Random Forest को लागि: ```output Accuracy (train) for RFST: 84.5% precision recall f1-score support chinese 0.80 0.77 0.78 242 indian 0.89 0.92 0.90 234 japanese 0.86 0.84 0.85 254 korean 0.88 0.83 0.85 242 thai 0.80 0.87 0.83 227 accuracy 0.84 1199 macro avg 0.85 0.85 0.84 1199 weighted avg 0.85 0.84 0.84 1199 Accuracy (train) for ADA: 72.4% precision recall f1-score support chinese 0.64 0.49 0.56 242 indian 0.91 0.83 0.87 234 japanese 0.68 0.69 0.69 254 korean 0.73 0.79 0.76 242 thai 0.67 0.83 0.74 227 accuracy 0.72 1199 macro avg 0.73 0.73 0.72 1199 weighted avg 0.73 0.72 0.72 1199 ``` ✅ [Ensemble Classifiers](https://scikit-learn.org/stable/modules/ensemble.html) को बारेमा जान्नुहोस् Machine Learning को यो विधिले "कयौं आधार एस्टिमेटरहरूको भविष्यवाणीलाई संयोजन" गरेर मोडेलको गुणस्तर सुधार गर्दछ। हाम्रो उदाहरणमा, हामीले Random Trees र AdaBoost प्रयोग गरेका थियौं। - [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest), एक औसत विधि, 'decision trees' को 'forest' निर्माण गर्दछ जसमा randomness समावेश गरिएको हुन्छ ताकि overfitting रोक्न सकियोस्। n_estimators प्यारामिटरलाई रूखहरूको संख्या सेट गरिएको छ। - [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) एक वर्गीकरणकर्तालाई डेटासेटमा फिट गर्छ र त्यसपछि सोही डेटासेटमा सोही वर्गीकरणकर्ताको प्रतिलिपिहरू फिट गर्छ। यसले गलत वर्गीकृत वस्तुहरूको तौलमा ध्यान केन्द्रित गर्छ र अर्को वर्गीकरणकर्ताको फिटलाई सुधार गर्न समायोजन गर्छ। --- ## 🚀 चुनौती यी प्रत्येक प्रविधिहरूमा धेरै प्यारामिटरहरू छन् जसलाई तपाईंले समायोजन गर्न सक्नुहुन्छ। प्रत्येकको डिफल्ट प्यारामिटरहरूको अनुसन्धान गर्नुहोस् र यी प्यारामिटरहरू समायोजन गर्दा मोडेलको गुणस्तरमा के प्रभाव पर्छ भनेर सोच्नुहोस्। ## [पाठ पछि क्विज](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/24/) ## समीक्षा र आत्म अध्ययन यी पाठहरूमा धेरै जटिल शब्दावली छ, त्यसैले [यो सूची](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) को उपयोगी शब्दावली समीक्षा गर्न एक मिनेट लिनुहोस्! ## असाइनमेन्ट [प्यारामिटर खेल](assignment.md) --- **अस्वीकरण**: यो दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) प्रयोग गरेर अनुवाद गरिएको छ। हामी शुद्धताको लागि प्रयास गर्छौं, तर कृपया ध्यान दिनुहोस् कि स्वचालित अनुवादहरूमा त्रुटि वा अशुद्धता हुन सक्छ। यसको मूल भाषा मा रहेको मूल दस्तावेज़लाई आधिकारिक स्रोत मानिनुपर्छ। महत्वपूर्ण जानकारीको लागि, व्यावसायिक मानव अनुवाद सिफारिस गरिन्छ। यस अनुवादको प्रयोगबाट उत्पन्न हुने कुनै पनि गलतफहमी वा गलत व्याख्याको लागि हामी जिम्मेवार हुने छैनौं।