Skip to content

Latest commit

 

History

History
242 lines (163 loc) · 18.5 KB

File metadata and controls

242 lines (163 loc) · 18.5 KB

রান্নার শ্রেণীবিভাগকারী ২

এই দ্বিতীয় শ্রেণীবিভাগের পাঠে, আপনি সংখ্যাসূচক ডেটা শ্রেণীবদ্ধ করার আরও উপায় আবিষ্কার করবেন। এছাড়াও আপনি শিখবেন একটি শ্রেণীবিভাগকারী অন্যটির তুলনায় বেছে নেওয়ার পরিণতি সম্পর্কে।

পূর্বপ্রয়োজনীয়তা

আমরা ধরে নিচ্ছি যে আপনি পূর্ববর্তী পাঠগুলি সম্পন্ন করেছেন এবং আপনার data ফোল্ডারে একটি পরিস্কৃত ডেটাসেট রয়েছে যার নাম cleaned_cuisines.csv এই ৪-পাঠের মূল ফোল্ডারের রুটে।

প্রস্তুতি

আমরা আপনার notebook.ipynb ফাইলে পরিস্কৃত ডেটাসেট লোড করে ফেলেছি এবং এটিকে X এবং y ডেটাফ্রেমে ভাগ করেছি, মডেল নির্মাণ প্রক্রিয়ার জন্য প্রস্তুত।

একটি শ্রেণীবিভাগ মানচিত্র

আগে, আপনি Microsoft-এর চিট শীট ব্যবহার করে ডেটা শ্রেণীবদ্ধ করার বিভিন্ন বিকল্প সম্পর্কে জানেন। Scikit-learn একটি অনুরূপ, কিন্তু আরও সূক্ষ্ম চিট শীট অফার করে যা আপনার এস্টিমেটর (অন্য একটি শব্দ শ্রেণীবিভাগকারীদের জন্য) নির্বাচন আরও সংকুচিত করতে সাহায্য করতে পারে:

ML Map from Scikit-learn

টিপ: এই মানচিত্রটি অনলাইনে দেখুন এবং ডকুমেন্টেশন পড়তে পথে ক্লিক করুন।

পরিকল্পনা

এই মানচিত্রটি খুবই উপকারী যখন আপনি আপনার ডেটা সম্পর্কে স্পষ্ট ধারণা পান, কারণ আপনি এর পথ ধরে হাঁটতে পারেন একটি সিদ্ধান্তে পৌঁছাতে:

  • আমাদের কাছে >৫০ নমুনা আছে
  • আমরা একটি শ্রেণী পূর্বাভাস দিতে চাই
  • আমাদের কাছে লেবেল করা ডেটা আছে
  • আমাদের কাছে ১০০ হাজারের কম নমুনা আছে
  • ✨ আমরা একটি লিনিয়ার 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)

লিনিয়ার SVC শ্রেণীবিভাগকারী

সাপোর্ট-ভেক্টর ক্লাস্টারিং (SVC) হচ্ছে সাপোর্ট-ভেক্টর মেশিন পরিবারের একটি সদস্য (নিচে এগুলো সম্পর্কে আরও জানুন)। এই পদ্ধতিতে, আপনি একটি 'কর্নেল' বেছে নিতে পারেন যেটা লেবেলগুলো কিভাবে ক্লাস্টার করবে তা নির্ধারণ করে। 'C' প্যারামিটারটি 'রেগুলারাইজেশন' নির্দেশ করে যা প্যারামিটারগুলোর প্রভাব নিয়ন্ত্রণ করে। কর্নেল হতে পারে বিভিন্ন; এখানে আমরা 'linear' সেট করেছি যাতে আমরা লিনিয়ার SVC ব্যবহার করতে পারি। সম্ভাবনা (Probability) ডিফল্ট 'false'; আমরা এটিকে 'true' সেট করেছি সম্ভাবনা অনুমান সংগ্রহ করার জন্য। আমরা ডেটা শাফল করার জন্য র‍্যান্ডম স্টেট '0' সেট করেছি যাতে সম্ভাবনা পাওয়া যায়।

ব্যায়াম - একটি লিনিয়ার SVC প্রয়োগ করুন

শ্রেণীবিভাগকারীরা ধারণার জন্য একটি অ্যারে তৈরি করা শুরু করুন। আমরা পরীক্ষার সাথে এই অ্যারেতে ক্রমাগত যোগ করব।

  1. একটি লিনিয়ার SVC দিয়ে শুরু করুন:

    C = 10
    # বিভিন্ন শ্রেণীবিন্যাসকারী তৈরি করুন।
    classifiers = {
        'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0)
    }
  2. লিনিয়ার 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 সম্পর্কে জানুন

সাপোর্ট ভেক্টর শ্রেণীবিভাগকারী

সাপোর্ট-ভেক্টর শ্রেণীবিভাগকারীরা সাপোর্ট-ভেক্টর মেশিন পরিবারের সদস্য, যেগুলো শ্রেণীবিভাগ এবং রিগ্রেশন কাজের জন্য ব্যবহৃত হয়। SVM "প্রশিক্ষণ উদাহরণগুলোকে স্থানীয় বিন্দুতে ম্যাপ করে" দুটি শ্রেণীর মধ্যে দূরত্ব সর্বাধিক করার জন্য। পরবর্তী ডেটাও এই স্থানে ম্যাপ করা হয় যাতে তার শ্রেণী পূর্বাভাস দেওয়া যায়।

ব্যায়াম - একটি সাপোর্ট ভেক্টর শ্রেণীবিভাগকারী প্রয়োগ করুন

আসুন সাপোর্ট ভেক্টর শ্রেণীবিভাগকারী দিয়ে একটু উন্নত সঠিকতার চেষ্টা করি।

  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 শ্রেণীবিভাগকারী

চলুন পথটি শেষ পর্যন্ত অনুসরণ করি, যদিও পূর্ববর্তী পরীক্ষা বেশ ভালো ছিল। আসুন কিছু 'Ensemble শ্রেণীবিভাগকারী' চেষ্টা করি, বিশেষ করে 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 শ্রেণীবিভাগকারী সম্পর্কে জানুন

মেশিন লার্নিংয়ের এই পদ্ধতিটি "একাধিক বেস এস্টিমেটরের পূর্বাভাসকে একত্রিত করে" মডেলের গুণমান উন্নত করে। আমাদের উদাহরণে, আমরা Random Trees এবং AdaBoost ব্যবহার করেছি।

  • Random Forest, একটি গড়করণ পদ্ধতি, 'decision trees' এর একটি 'বন' তৈরি করে যেটি র‍্যান্ডোমনেস সহ অতিপ্রশিক্ষণ এড়ায়। n_estimators প্যারামিটার গাছের সংখ্যা নির্ধারণ করে।

  • AdaBoost একটি শ্রেণীবিভাগকারী ডেটাসেটে ফিট করে এবং তারপর সেই শ্রেণীবিভাগকারীর কপি একই ডেটাসেটে ফিট করে। এটি ভুল শ্রেণীবদ্ধ আইটেমের ওজনের প্রতি মনোযোগ দেয় এবং পরবর্তী শ্রেণীবিভাগকারীর জন্য ফিট সামঞ্জস্য করে।


🚀চ্যালেঞ্জ

প্রত্যেকটি পদ্ধতির অনেক প্যারামিটার রয়েছে যেগুলো আপনি টুইক করতে পারেন। প্রতিটির ডিফল্ট প্যারামিটারগুলো গবেষণা করুন এবং ভাবুন এসব প্যারামিটার পরিবর্তন করলে মডেলের গুণমানের উপরে কি প্রভাব পড়বে।

পর্যালোচনা ও স্বতঃশিক্ষণ

এই পাঠগুলিতে অনেক টার্মিনোলজি আছে, তাই এই তালিকাটি একবার দেখে নিন যা কাজে আসবে!

অ্যাসাইনমেন্ট

প্যারামিটার খেলা


অস্বীকৃতি: এই নথিটি AI অনুবাদ সেবা Co-op Translator ব্যবহার করে অনূদিত হয়েছে। আমরা যথাসাধ্য সঠিকতার চেষ্টা করি, তবে স্বয়ংক্রিয় অনুবাদে ভুল বা অসঙ্গতি থাকতে পারে তা দয়া করে বিবেচনা করুন। মূল নথিটি তার স্বদেশী ভাষায়ই কর্তৃত্বপূর্ণ উৎস হিসেবে গণ্য করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য পেশাদার মানব অনুবাদ সরবরাহ করা উত্তম। এই অনুবাদের ব্যবহারে যে কোনও ভুল বোঝাবুঝি বা ভুল অর্থ গ্রহণের জন্য আমরা দায়ী হব না।