Skip to content

Latest commit

 

History

History
242 lines (163 loc) · 18.1 KB

File metadata and controls

242 lines (163 loc) · 18.1 KB

खाना वर्गीकरण २

यस दोस्रो वर्गीकरण पाठमा, तपाईंले संख्यात्मक डाटालाई वर्गीकृत गर्ने थप तरिकाहरू अन्वेषण गर्नुहुनेछ। तपाईंले अर्को वर्गीकर्तालाई छनौट गर्दा के कस्तो प्रभाव पर्नेछ भनेर पनि सिक्नु हुनेछ।

पूर्वसर्त

हामी मान्छौं कि तपाईंले पहिलेका पाठहरू पूरा गरिसक्नु भएको छ र तपाईंको data फोल्डरमा एउटा सफा गरिएको डेटासेट cleaned_cuisines.csv छ जुन ४-पाठको फोल्डरको मूल भागमा रहेको छ।

तयारी

हामीले तपाईंको notebook.ipynb फाइलमा सफा गरिएको डेटासेट लोड गरेका छौं र यसलाई X र y डाटाफ्रेमहरूमा विभाजित गरेर मोडल निर्माण प्रक्रियाका लागि तयार पारिएको छ।

एक वर्गीकरण नक्सा

पहिले, तपाईंले Microsoft को चिट शीट प्रयोग गरेर डाटा वर्गीकरण गर्दा उपलब्ध विभिन्न विकल्पहरू सिक्नु भएको थियो। Scikit-learn ले पनि यस्तै, तर थप सटिक चिट शीट प्रदान गर्छ जुन तपाईंलाई तपाईंका ईस्टिमेटरहरू (अरू शब्दमा वर्गीकर्ता) निर्धारण गर्न थप सहयोग गर्दछ:

ML Map from Scikit-learn

संकेत: यो नक्सामा अनलाइन जानुहोस् र बाटामा क्लिक गरेर दस्तावेज पढ्नुहोस्।

योजना

यो नक्सा तपाईंको डाटा स्पष्ट भएपछि धेरै मद्दत गर्नेछ, किनकि तपाईं यसको बाटामा 'हिँडेर' निर्णयमा पुग्न सक्नुहुन्छ:

  • हामीसँग >50 नमूना छ
  • हामी एउटा वर्ग पूर्वानुमान गर्न चाहन्छौं
  • हामीसँग लेबल गरिएको डाटा छ
  • हामीसँग 100K नमुनाभन्दा कम छ
  • ✨ हामी Linear SVC छनौट गर्न सक्दछौं
  • यदि त्यो काम गर्दैन, किनकि हामीसँग संख्यात्मक डाटा छ
    • हामी ✨ KNeighbors Classifier प्रयास गर्न सक्छौं
      • यदि त्यो काम गर्दैन भने, ✨ SVC र ✨ Ensemble Classifiers प्रयास गर्नुहोस्

यो अध्ययन मार्ग अनुसरण गर्न धेरै उपयोगी छ।

अभ्यास - डाटा विभाजन गर्नुहोस्

यो बाटो अनुसरण गर्दै, हामीले केही पुस्तकालयहरू आयात गर्न सुरु गर्नुपर्छ।

  1. आवश्यक पुस्तकालयहरू आयात गर्नुहोस्:

    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
  2. तपाईंको प्रशिक्षण र परीक्षण डाटा विभाजन गर्नुहोस्:

    X_train, X_test, y_train, y_test = train_test_split(cuisines_features_df, cuisines_label_df, test_size=0.3)

Linear SVC वर्गीकर्ता

Support-Vector clustering (SVC) Support-Vector मेशिन परिवारको एक सदस्य हो (यीका बारेमा तल थप जान्नुहोस्)। यस विधिमा तपाईंले 'kernel' छनौट गर्न सक्नुहुन्छ जसले लेबलहरूलाई कसरी क्लस्टर गर्ने निर्णय गर्छ। 'C' प्यारामीटर 'regularization' सँग सम्बद्ध हुन्छ जसले प्यारामीटरहरूको प्रभावलाई नियन्त्रित गर्छ। kernel विभिन्न प्रकारहरू को हुन सक्छ; यहाँ हामी 'linear' लाई सेट गर्दछौं ताकि linear SVC को फाइदा लिन सकियोस्। Probability को डिफल्ट 'false' हुन्छ; यहाँ हामीलाई probability अनुमानहरू सङ्कलन गर्न 'true' मा सेट गरेका छौं। डेटा शफल गर्न र सम्भाव्यता सुनिश्चित गर्न र्यान्डम स्टेटलाई '0' मा सेट गरेका छौं।

अभ्यास - linear SVC लागू गर्नुहोस्

वर्गीकर्ताहरूको एउटा एरे बनाएर सुरु गर्नुहोस्। परीक्षण गर्दै जाँदा तपाईं यसलाई क्रमिक रूपमा थप्नु हुनेछ।

  1. Linear SVC बाट सुरु गर्नुहोस्:

    C = 10
    # विभिन्न वर्गीकरणकर्ता निर्माण गर्नुहोस्।
    classifiers = {
        'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0)
    }
  2. Linear SVC प्रयोग गरेर तपाईंको मोडललाई प्रशिक्षण दिनुहोस् र रिपोर्ट प्रिन्ट गर्नुहोस्:

    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))

    नतिजा साँच्चै राम्रो छ:

    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 "neighbors" परिवारको ML विधि हो, जसलाई सुपरभाइज़्ड र अनसुपरभाइज़्ड दुबै शिक्षाका लागि प्रयोग गर्न सकिन्छ। यस विधिमा, पूर्वनिर्धारित संख्यामा पोइन्टहरू बनाइन्छ र डाटा ती पोइन्टहरू वरिपरि समेटिन्छ जसले डेटा को सामान्यीकृत लेबलहरू भविष्यवाणी गर्न मद्दत गर्दछ।

अभ्यास - K-Neighbors वर्गीकर्ता लागू गर्नुहोस्

पहिलो वर्गीकर्ता राम्रो थियो, र डाटासँग राम्रोसँग काम गर्‍यो, तर शायद हामी अझ राम्रो सटीकता प्राप्त गर्न सक्छौं। K-Neighbors वर्गीकर्ता प्रयास गर्नुहोस्।

  1. तपाईंको वर्गीकर्ता एरेमा एउटा लाइन थप्नुहोस् (Linear SVC आइटम पछि कमामा थिच्नुहोस्):

    'KNN classifier': KNeighborsClassifier(C),

    परिणाम अलि खराब छ:

    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 बारे जान्नुहोस्

Support Vector Classifier

Support-Vector वर्गीकर्ताहरू Support-Vector Machine परिवारका हुन् जसले वर्गीकरण र रिग्रेसन कार्यहरूका लागि प्रयोग गरिन्छ। SVM ले "प्रशिक्षण उदाहरणहरूलाई अन्तरिक्षका पोइन्टहरूमा नक्साङ्कन" गर्छ र दुई वर्गबीचको दूरी अधिकतम पार्दछ। पछि आउने डेटा यस अन्तरिक्षमा नक्साङ्कन गरिन्छ ताकि तिनीहरूको वर्ग भविष्यवाणी गर्न सकियोस्।

अभ्यास - Support Vector Classifier लागू गर्नुहोस्

Support Vector Classifier सँग अलिक राम्रो सटीकता प्रयास गरौं।

  1. K-Neighbors आइटम पछि कमामा थिचेर यो लाइन थप्नुहोस्:

    'SVC': SVC(),

    नतिजा निकै राम्रो छ!

    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 बारे थाहा पाउनुहोस्

Ensemble Classifiers

हामी बाटोको अन्त्यसम्म जाने प्रयास गरौं, यद्यपि पहिलेको परीक्षण राम्रो थियो। अब 'Ensemble Classifiers', विशेष रूपमा Random Forest र AdaBoost प्रयास गरौं:

  'RFST': RandomForestClassifier(n_estimators=100),
  'ADA': AdaBoostClassifier(n_estimators=100)

यो नतिजा धेरै राम्रो छ, विशेष गरेर Random Forest को लागि:

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 बारे जान्नुहोस्

यो मेसिन लर्निंग विधिले "धेरै आधारभूत ईस्टिमेटरहरूको पूर्वानुमानहरूलाई मिलाएर" मोडलको गुणस्तर सुधार गर्छ। हाम्रो उदाहरणमा, हामीले Random Trees र AdaBoost प्रयोग गरेका छौं।

  • Random Forest, एक औसत गर्ने विधि, 'निर्णय वृक्षहरू' को 'जंगल' बनाउँछ जसमा अनियमितता मिसाइएको हुन्छ ताकि ओभरफिटिङ नहोस्। n_estimators प्यारामीटरले रूखहरूको संख्या सेट गर्दछ।

  • AdaBoost एउटा वर्गीकर्तालाई डेटासेटमा फिट गर्छ र त्यसको प्रतिलिपिहरू त्यहि डेटासेटमा फिट गर्छ। यसले गलत वर्गीकृत वस्तुहरूको तौलमा ध्यान दिन्छ र अर्को वर्गीकर्ताको फिटलाई सुधार्न मिलाउँछ।


🚀चुनौती

यी प्रत्येक प्रविधिहरूमा धेरै प्यारामीटरहरू छन् जसलाई तपाईंले अनुसार ट्युन गर्न सक्नुहुन्छ। प्रत्येकको डिफल्ट प्यारामीटरहरू अनुसंधान गर्नुहोस् र ती प्यारामीटरहरू ट्विक गर्दा मोडलको गुणस्तरमा के फरक पर्नेछ भनेर सोच्नुहोस्।

समीक्षा र आत्म-अध्ययन

यी पाठहरूमा धेरै पर्यायवाची शब्दहरू छन्, त्यसैले एक मिनेट लिएर यो सूची समीक्षा गर्नुहोस् जसले उपयोगी शब्दावली समेट्छ!

असाइनमेन्ट

प्यारामीटर खेल


अस्वीकरण: यो कागजात AI अनुवाद सेवा Co-op Translator प्रयोग गरी अनुवाद गरिएको हो। हामी शुद्धताको प्रयास गर्छौं भने पनि, कृपया जानकार हुनुहोस् कि स्वचालित अनुवादमा त्रुटि वा असत्यता हुन सक्छ। मूल कागजात यसको मूल भाषामा आधिकारिक स्रोत मानिनु पर्छ। महत्वपूर्ण जानकारीको लागि व्यावसायिक मानवीय अनुवाद सिफारिस गरिन्छ। यस अनुवादको प्रयोगबाट उत्पन्न कुनै पनि गलतफहमी वा गलत व्याख्याको लागि हामी जिम्मेवार छैनौं।