You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ML-For-Beginners/translations/ne/4-Classification/2-Classifiers-1/README.md

25 KiB

पकवान वर्गीकरणकर्ता 1

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

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

पूर्व-व्याख्यान प्रश्नोत्तरी

तयारी

मानौं तपाईंले पाठ 1 पूरा गर्नुभयो भने, पक्का गर्नुहोस् कि cleaned_cuisines.csv फाइल मूल /data फोल्डरमा यी चार पाठका लागि अवस्थित छ।

अभ्यास - राष्ट्रिय पकवान अनुमान गर्न

  1. यस पाठको 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
  1. अब, धेरै लाइब्रेरीहरू आयात गर्नुहोस्:

    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
    
  2. 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
    
  3. 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)
  • समूह विधिहरू (voting Classifier)
  • बहुवर्गीय र बहु-आउटपुट एल्गोरिदमहरू (multiclass and multilabel classification, multiclass-multioutput classification)

तपाईं न्यूरल नेटवर्कहरू पनि डाटालाई वर्गीकरण गर्न प्रयोग गर्न सक्नुहुन्छ, तर त्यो यस पाठको दायरामा पर्दैन।

कुन वर्गीकरणकर्ता छनौट गर्ने?

त्यसैले, कुन वर्गीकरणकर्ता चयन गर्ने? प्रायः, थुप्रै विकल्पहरूको प्रयोग गरेर राम्रो नतिजा खोज्न एउटा तरिका हो परीक्षण गर्न। Scikit-learn ले पारस्परिक तुलना प्रदान गर्दछ जुन सिर्जना गरिएको डाटासेटमा KNeighbors, SVC दुई तरिकाले, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB र QuadraticDiscrinationAnalysis लाई तुलना गरी नतिजा दृश्यहरु देखाउँछ:

classification को तुलना

Scikit-learn को डकुमेन्टेसनमा बनेका प्लटहरू

AutoML ले यो समस्या कुशलतापूर्वक समाधान गर्दछ जसले यी तुलना बादलमा चलाएर तपाईंको डाटाका लागि सबैभन्दा उपयुक्त एल्गोरिदम छनौट गर्न अनुमति दिन्छ। यसलाई यहाँ प्रयास गर्नुहोस्।

राम्रो तरिका

तरिकाहरूको अनुमान गर्नुभन्दा राम्रो तरिका, यो डाउनलोड गर्न मिल्ने ML Cheat sheet मा भएका सुझावहरू पालना गर्नु हो। यहाँ हामी पाउँछौं कि हाम्रो बहुवर्गीय समस्याको लागि हामीसँग केहि विकल्पहरू छन्:

बहुवर्ग समस्याहरूको लागि cheatsheet

Microsoft को Algorithm Cheat Sheet को एक भाग, बहुवर्ग वर्गीकरण विकल्पहरू विवरण गर्दै

यो cheat sheet डाउनलोड गरेर प्रिन्ट गर्नुहोस् र आफ्नो पर्खालमा झुण्ड्याउनुहोस्!

तार्किक सोच

हेरौं कि हामीले विभिन्न दृष्टिकोणहरूलाई हाम्रा सिमितताहरूलाई मध्यनजर गर्दै कसरी सोच्न सक्छौं:

  • न्यूरल नेटवर्कहरू धेरै भारी हुन्छन्। हाम्रो सफा तर न्यूनतम डाटासेट र स्थानीय नोटबुक मार्फत तालिम चलाउने तथ्यलाई ध्यानमा राख्दा, न्यूरल नेटवर्कहरू यस कार्यका लागि धेरै भारी हुन्छन्।
  • दुई-वर्गीय वर्गीकरणकर्ता छैन। हामी दुई-वर्गीय वर्गीकरणकर्ता प्रयोग गर्दैनौं, यसले one-vs-all विकल्पलाई बाहिर गर्छ।
  • निर्णय वृक्ष वा Logistic Regression काम हुन सक्छ। निर्णय वृक्ष काम गर्न सक्छ, वा बहुवर्गीय डाटाको लागि Logistic Regression।
  • बहुवर्ग बूस्टेड निर्णय वृक्ष फरक समस्या समाधान गर्छ। बहुवर्ग बूस्टेड निर्णय वृक्ष गैर-प्यारामेट्रिक कार्यहरूमा उपयुक्त हुन्छ, जस्तै र्‍याङ्किङ निर्माण गर्न डिजाईन गरिएको कार्यहरूमा, त्यसैले हाम्रो लागि उपयोगी हुँदैन।

Scikit-learn को प्रयोग

हामी हाम्रो डाटा विश्लेषण गर्न Scikit-learn प्रयोग गर्नेछौं। यद्यपि, Scikit-learn मा Logistic Regression प्रयोग गर्ने धेरै तरिकाहरू छन्। पास गर्नुपर्ने प्यारामिटरहरू हेर्नुस्।

मूल रूपमा दुई महत्वपूर्ण प्यारामिटरहरू छन् - multi_classsolver - जुन हामीले Logistic Regression प्रदर्शन गर्न Scikit-learn लाई सोध्दा निर्दिष्ट गर्नुपर्छ। multi_class मानले एउटा व्यवहार लागू गर्छ। solver को मान कुन एल्गोरिदम प्रयोग गर्ने हो भनेर जनाउँछ। सबै solver हरू सबै प्रकारका multi_class मानहरूसँग जोडी हुँदैनन्।

डकुमेन्टेसन अनुसार, बहुवर्ग अवस्थामा, तालिम एल्गोरिदम:

  • one-vs-rest (OvR) योजना प्रयोग गर्छ, जब multi_class विकल्प ovr मा सेट गरिएको छ
  • cross-entropy हानि प्रयोग गर्छ, जब multi_class विकल्प multinomial मा सेट गरिएको छ। (हाल multinomial विकल्पले lbfgs, sag, saganewton-cg solver हरूलाई मात्र समर्थन गर्दछ।)"

🎓 यहाँ 'योजना' हुन सक्छ 'ovr' (one-vs-rest) वा 'multinomial'। Logistic regression वास्तवमा द्विक वर्गीकरणलाई समर्थन गर्न बनाइएकोले यी योजनाहरूले बहुवर्ग वर्गीकरण कार्यहरूलाई राम्रोसँग सम्हाल्न अनुमति दिन्छ। स्रोत

🎓 'solver' लाई "अप्टिमाइजेशन समस्यामा प्रयोग गरिने एल्गोरिदम" भनिएको छ। स्रोत

Scikit-learn ले यस तालिकाले विभिन्न डाटा संरचनाहरूले प्रस्तुत गरेको विभिन्न चुनौतीहरूलाई कसरी solver हरूले सम्हाल्छन् भन्ने बुझाउँछ:

solvers

अभ्यास - डाटा विभाजन गर्ने

हामी पहिलो प्रशिक्षण प्रयासको लागि Logistic Regression मा केन्द्रित हुन सक्छौं किनभने तपाईंले यो अघिल्लो पाठमा सिक्नुभएको छ। तपाईंको डाटालाई प्रशिक्षण र परीक्षण समूहमा train_test_split() कल गरेर विभाजन गर्नुहोस्:

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

अभ्यास - Logistic Regression लागू गर्ने

तपाईंले बहुवर्ग अवस्था प्रयोग गर्दै हुनुहुन्छ, त्यसैले तपाईंले कुन योजना प्रयोग गर्ने र कुन solver सेट गर्ने छनौट गर्नुपर्छ। LogisticRegression लाई बहुवर्ग सेटिङ र liblinear solver सहित तालिम दिन प्रयोग गर्नुहोस्।

  1. multi_classलाई ovr र solver लाई liblinear मा सेट गर्दै logistic regression बनाउनुहोस्:

    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 जस्ता अर्को solver प्रयास गर्नुहोस्।

    ध्यान दिनुहोस्, जब आवश्यक पर्छ तपाईँले डाटालाई फ्ल्याटन गर्न Pandas को ravel फंक्सन प्रयोग गर्न सक्नुहुन्छ।

    शुद्धता ८०% भन्दा माथि राम्रो छ!

  2. तपाईं एक डाटाको एउटा पंक्ति (#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
    

    अर्को पंक्ति संख्या प्रयास गर्नुहोस् र नतिजा जाँच गर्नुहोस्।

  3. अझ गहिराईमा हेर्दा, तपाईंले यस भविष्यवाणीको सटीकता जाँच गर्न सक्नुहुन्छ:

    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

    के तपाईं व्याख्या गर्न सक्नुहुन्छ किन मोडेललाई यो भारतीय भोजन भएकोमा धेरै पक्का छ?

  4. तपाईंले प्रतिबिम्ब पाठहरूमा गरेको जस्तै वर्गीकरण प्रतिवेदन मुद्रण गरेर थप विवरण प्राप्त गर्नुहोस्:

    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

🚀Challenge

यस पाठमा, तपाईंले क्रमबद्ध सामग्रीहरूको श्रृंखलाको आधारमा राष्ट्रिय भोजन पूर्वानुमान गर्न सक्ने मेसिन लर्निङ मोडेल निर्माण गर्न आफ्नो सफा गरेको डाटा प्रयोग गर्नुभयो। स्कikit-learn ले डेटा वर्गीकृत गर्न प्रदान गर्ने धेरै विकल्पहरूलाई पढ्न केही समय निकाल्नुहोस्। 'solvers' को अवधारणा मा अझ गहिराईमा जानुहोस् ताकि तपाईंलाई पछाडि भइरहेको बुझ्न सकियोस्।

पोस्ट-लेक्चर क्विज

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

यस पाठमा logistic regression को गणितमा अझ गहिरो रूपमा पुग्नुहोस्।

असाइनमेन्ट

solvers अध्ययन गर्नुहोस्


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