এই দ্বিতীয় শ্রেণীবিভাগের পাঠে, আপনি সংখ্যাসূচক ডেটা শ্রেণীবদ্ধ করার আরও উপায় আবিষ্কার করবেন। এছাড়াও আপনি শিখবেন একটি শ্রেণীবিভাগকারী অন্যটির তুলনায় বেছে নেওয়ার পরিণতি সম্পর্কে।
আমরা ধরে নিচ্ছি যে আপনি পূর্ববর্তী পাঠগুলি সম্পন্ন করেছেন এবং আপনার data ফোল্ডারে একটি পরিস্কৃত ডেটাসেট রয়েছে যার নাম cleaned_cuisines.csv এই ৪-পাঠের মূল ফোল্ডারের রুটে।
আমরা আপনার notebook.ipynb ফাইলে পরিস্কৃত ডেটাসেট লোড করে ফেলেছি এবং এটিকে X এবং y ডেটাফ্রেমে ভাগ করেছি, মডেল নির্মাণ প্রক্রিয়ার জন্য প্রস্তুত।
আগে, আপনি Microsoft-এর চিট শীট ব্যবহার করে ডেটা শ্রেণীবদ্ধ করার বিভিন্ন বিকল্প সম্পর্কে জানেন। Scikit-learn একটি অনুরূপ, কিন্তু আরও সূক্ষ্ম চিট শীট অফার করে যা আপনার এস্টিমেটর (অন্য একটি শব্দ শ্রেণীবিভাগকারীদের জন্য) নির্বাচন আরও সংকুচিত করতে সাহায্য করতে পারে:
টিপ: এই মানচিত্রটি অনলাইনে দেখুন এবং ডকুমেন্টেশন পড়তে পথে ক্লিক করুন।
এই মানচিত্রটি খুবই উপকারী যখন আপনি আপনার ডেটা সম্পর্কে স্পষ্ট ধারণা পান, কারণ আপনি এর পথ ধরে হাঁটতে পারেন একটি সিদ্ধান্তে পৌঁছাতে:
- আমাদের কাছে >৫০ নমুনা আছে
- আমরা একটি শ্রেণী পূর্বাভাস দিতে চাই
- আমাদের কাছে লেবেল করা ডেটা আছে
- আমাদের কাছে ১০০ হাজারের কম নমুনা আছে
- ✨ আমরা একটি লিনিয়ার SVC নির্বাচন করতে পারি
- যদি তা কাজ না করে, যেহেতু আমাদের সংখ্যাসূচক ডেটা আছে
- আমরা চেষ্টা করতে পারি ✨ KNeighbors Classifier
- যদি তা কাজ না করে, চেষ্টা করুন ✨ SVC এবং ✨ Ensemble Classifiers
- আমরা চেষ্টা করতে পারি ✨ KNeighbors Classifier
এটি অনুসরণ করার জন্য একটি খুব সহায়ক পথ।
এই পথ অনুসরণ করে, আমরা কিছু লাইব্রেরি আমদানি করার মাধ্যমে শুরু করা উচিত।
-
প্রয়োজনীয় লাইব্রেরি আমদানি করুন:
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
-
আপনার প্রশিক্ষণ এবং পরীক্ষা ডেটা ভাগ করুন:
X_train, X_test, y_train, y_test = train_test_split(cuisines_features_df, cuisines_label_df, test_size=0.3)
সাপোর্ট-ভেক্টর ক্লাস্টারিং (SVC) হচ্ছে সাপোর্ট-ভেক্টর মেশিন পরিবারের একটি সদস্য (নিচে এগুলো সম্পর্কে আরও জানুন)। এই পদ্ধতিতে, আপনি একটি 'কর্নেল' বেছে নিতে পারেন যেটা লেবেলগুলো কিভাবে ক্লাস্টার করবে তা নির্ধারণ করে। 'C' প্যারামিটারটি 'রেগুলারাইজেশন' নির্দেশ করে যা প্যারামিটারগুলোর প্রভাব নিয়ন্ত্রণ করে। কর্নেল হতে পারে বিভিন্ন; এখানে আমরা 'linear' সেট করেছি যাতে আমরা লিনিয়ার SVC ব্যবহার করতে পারি। সম্ভাবনা (Probability) ডিফল্ট 'false'; আমরা এটিকে 'true' সেট করেছি সম্ভাবনা অনুমান সংগ্রহ করার জন্য। আমরা ডেটা শাফল করার জন্য র্যান্ডম স্টেট '0' সেট করেছি যাতে সম্ভাবনা পাওয়া যায়।
শ্রেণীবিভাগকারীরা ধারণার জন্য একটি অ্যারে তৈরি করা শুরু করুন। আমরা পরীক্ষার সাথে এই অ্যারেতে ক্রমাগত যোগ করব।
-
একটি লিনিয়ার SVC দিয়ে শুরু করুন:
C = 10 # বিভিন্ন শ্রেণীবিন্যাসকারী তৈরি করুন। classifiers = { 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) }
-
লিনিয়ার 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 "neighbors" পরিবারভুক্ত ML পদ্ধতির অংশ, যা সুপারভাইজড এবং আনসুপারভাইজড উভয় লার্নিং এর জন্য ব্যবহার করা যেতে পারে। এই পদ্ধতিতে, পূর্বনির্ধারিত সংখ্যক পয়েন্ট তৈরি করা হয় এবং ডেটা এই পয়েন্টগুলোর চারপাশে সংগৃহীত হয় যাতে ডেটার জন্য সাধারণীকৃত লেবেল পূর্বাভাস দেওয়া যায়।
আগের শ্রেণীবিভাগকারী ভালো ছিল, এবং ডেটার সাথে ভালো কাজ করেছে, তবে হয়ত আমরা আরও ভালো সঠিকতা পেতে পারি। একটি K-Neighbors শ্রেণীবিভাগকারী চেষ্টা করুন।
-
আপনার শ্রেণীবিভাগকারী অ্যারেতে একটি লাইন যোগ করুন (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 "প্রশিক্ষণ উদাহরণগুলোকে স্থানীয় বিন্দুতে ম্যাপ করে" দুটি শ্রেণীর মধ্যে দূরত্ব সর্বাধিক করার জন্য। পরবর্তী ডেটাও এই স্থানে ম্যাপ করা হয় যাতে তার শ্রেণী পূর্বাভাস দেওয়া যায়।
আসুন সাপোর্ট ভেক্টর শ্রেণীবিভাগকারী দিয়ে একটু উন্নত সঠিকতার চেষ্টা করি।
-
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 শ্রেণীবিভাগকারী' চেষ্টা করি, বিশেষ করে 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 ব্যবহার করে অনূদিত হয়েছে। আমরা যথাসাধ্য সঠিকতার চেষ্টা করি, তবে স্বয়ংক্রিয় অনুবাদে ভুল বা অসঙ্গতি থাকতে পারে তা দয়া করে বিবেচনা করুন। মূল নথিটি তার স্বদেশী ভাষায়ই কর্তৃত্বপূর্ণ উৎস হিসেবে গণ্য করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য পেশাদার মানব অনুবাদ সরবরাহ করা উত্তম। এই অনুবাদের ব্যবহারে যে কোনও ভুল বোঝাবুঝি বা ভুল অর্থ গ্রহণের জন্য আমরা দায়ী হব না।
