اس سبق میں، آپ پچھلے سبق سے محفوظ کردہ متوازن، صاف ڈیٹا پر مشتمل غذائی اقسام کے بارے میں ڈیٹا سیٹ استعمال کریں گے۔
آپ اس ڈیٹا سیٹ کو مختلف قسم بندی کرنے والے الگورتھمز کے ساتھ استعمال کریں گے تاکہ اجزاء کے ایک گروپ کی بنیاد پر دی گئی قومی غذا کی پیش گوئی کی جائے. ایسا کرتے ہوئے، آپ الگورتھمز کے ذریعے قسم بندی کے کاموں کے لیے مختلف طریقوں کے بارے میں مزید جانیں گے۔
فرض کریں کہ آپ نے سبق 1 مکمل کر لیا ہے، تو اس بات کو یقینی بنائیں کہ ایک cleaned_cuisines.csv فائل جڑ /data فولڈر میں ان چار اسباق کے لیے موجود ہو۔
-
اس سبق کے 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 |
-
اب، مزید چند لائبریریاں امپورٹ کریں:
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
-
ٹریننگ کے لیے 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 -
وہ
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 قسم بندی کو سپروائزڈ لرننگ کے تحت رکھتا ہے، اور اس زمرے میں آپ کو قسم بندی کرنے کے کئی طریقے ملیں گے۔ مختلف طریقے دیکھنے میں پہلے پہل کافی پیچیدہ لگ سکتے ہیں۔ درج ذیل طریقے سب قسم بندی کی تکنیکیں شامل کرتے ہیں:
- لینیئر ماڈلز
- سپورٹ ویکٹر مشینز
- اسٹوکاسٹک گریڈینٹ ڈی سینٹ
- قریب ترین پڑوسی
- گوسیئن پراسیسز
- فیصلہ ساز درخت
- ایسینبل طریقے (ووٹنگ کلاسفیئر)
- ملٹی کلاس اور ملٹی آؤٹ پٹ الگورتھمز (ملٹی کلاس اور ملٹی لیبل قسم بندی، ملٹی کلاس-ملٹی آؤٹ پٹ قسم بندی)
آپ نیورل نیٹ ورکس بھی استعمال کر سکتے ہیں لیکن وہ اس سبق کے دائرہ کار سے باہر ہیں۔
تو، آپ کون سا کلاسفیئر منتخب کریں؟ اکثر، کئی کلاسفیئرز کو آزمانا اور اچھا نتیجہ تلاش کرنا آزمائشی طریقہ ہوتا ہے۔ Scikit-learn ایک موازنہ پیش کرتا ہے جو مختلف الگورتھمز جیسے KNeighbors، SVC کے دو طریقے، GaussianProcessClassifier، DecisionTreeClassifier، RandomForestClassifier، MLPClassifier، AdaBoostClassifier، GaussianNB اور QuadraticDiscrinationAnalysis کا موازنہ کرتا ہے اور نتائج کو بصری طور پر دکھاتا ہے:
یہ گراف Scikit-learn کی دستاویزات میں بنائے گئے ہیں
AutoML اس مسئلے کو آسانی سے حل کرتا ہے کلاؤڈ میں یہ کمپیریزنز چلا کر، تاکہ آپ اپنے ڈیٹا کے لیے سب سے بہتر الگورتھم منتخب کر سکیں۔ اسے یہاں آزمائیں
اندازے لگانے کے بجائے بہتر ہے کہ اس ML Cheat sheet کو ڈاؤنلوڈ کر کے اس میں بتائی گئی تجاویز پر عمل کریں۔ یہاں، ہم دیکھتے ہیں کہ ہمارے ملٹی کلاس مسئلے کے لیے ہمارے پاس کچھ آپشنز ہیں:
مائیکروسافٹ کے الگورتھم چیٹ شیٹ کا ایک حصہ، جو ملٹی کلاس قسم بندی کے آپشنز کی تفصیل بتاتا ہے
✅ اس چیٹ شیٹ کو ڈاؤنلوڈ کریں، پرنٹ نکالیں، اور اپنی دیوار پر لگائیں!
آئیے دیکھیں کہ موجودہ پابندیوں کے پیش نظر مختلف طریقوں پر کیسے غور کیا جا سکتا ہے:
- نیورل نیٹ ورکس بہت بھاری ہیں۔ ہمارے صاف لیکن کم حجم ڈیٹا سیٹ اور لوکل نوٹ بکس میں ٹریننگ چلانے کی وجہ سے، نیورل نیٹ ورکس اس کام کے لیے زیادہ بھاری ہیں۔
- کوئی دو-کلاس کلاسفیئر نہیں۔ ہم دو-کلاس کلاسفیئر استعمال نہیں کرتے، اس لیے ون-ورسس-آل آؤٹ ہو جاتا ہے۔
- فیصلہ ساز درخت یا لاجسٹک ریگریشن کام کر سکتا ہے۔ فیصلہ ساز درخت یا ملٹی کلاس ڈیٹا کے لیے لاجسٹک ریگریشن مفید ہو سکتا ہے۔
- ملٹی کلاس بوسٹڈ فیصلہ ساز درخت مختلف مسئلے کے لیے ہیں۔ ملٹی کلاس بوسٹڈ فیصلہ ساز درخت غیر پیرا میٹرک کاموں کے لیے بہتر ہیں، جیسے رینکنگ بنانا، اس لیے ہمارے لیے یہ مفید نہیں۔
ہم اپنے ڈیٹا کا تجزیہ کرنے کے لیے Scikit-learn استعمال کریں گے۔ تاہم، Scikit-learn میں لاجسٹک ریگریشن کے کئی استعمالات ہیں۔ اس دستاویز کو دیکھیں کہ کون سے پیرامیٹرز پاس کیے جا سکتے ہیں۔
بنیادی طور پر دو اہم پیرامیٹرز ہیں - multi_class اور solver - جو آپ کو لاجسٹک ریگریشن انجام دیتے ہوئے بتانے ہوں گے۔ multi_class ویلیو ایک خاص رویہ اپناتی ہے۔ solver ویلیو وہ الگورتھم بتاتی ہے جو استعمال ہوگا۔ ہر solver تمام multi_class ویلیوز کے ساتھ مطابقت نہیں رکھتا۔
دستاویزات کے مطابق، ملٹی کلاس صورت میں، تربیتی الگورتھم:
- اگر
multi_classآپشنovrپر سیٹ ہو تو ون-ورسس-ریسٹ (OvR) اسکیم استعمال کرتا ہے - اگر
multi_classآپشنmultinomialہو تو کراس انٹروپی لاس استعمال کرتا ہے (اس وقت یہ آپشن صرف ‘lbfgs’, ‘sag’, ‘saga’ اور ‘newton-cg’ solvers کے ساتھ سپورٹڈ ہے)"
🎓 'اسکیم' یہاں 'ovr' (ون-ورسس-ریسٹ) یا 'multinomial' ہو سکتی ہے۔ چونکہ لاجسٹک ریگریشن بنیادی طور پر بائنری قسم بندی کے لیے ہے، یہ اسکیمز اسے بہتر طریقے سے ملٹی کلاس کاموں میں مدد دیتی ہیں۔ ذرائع
🎓 'solver' کا مطلب ہے "آپٹیمائزیشن مسئلہ میں استعمال ہونے والا الگورتھم"۔ ذرائع
Scikit-learn یہ جدول فراہم کرتا ہے کہ کیسے solvers مختلف قسم کے ڈیٹا ڈھانچوں کے چیلنجز کو ہینڈل کرتے ہیں:
چونکہ آپ نے حال ہی میں لاجسٹک ریگریشن کے بارے میں سیکھا ہے، تو اپنے پہلے ٹریننگ ٹرائل کے لیے ہم لاجسٹک ریگریشن پر توجہ دیں گے۔ اپنے ڈیٹا کو train_test_split() کال کر کے تربیتی اور ٹیسٹنگ گروپس میں تقسیم کریں:
X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3)چونکہ آپ ملٹی کلاس کیس استعمال کر رہے ہیں، آپ کو فیصلہ کرنا ہوگا کہ کون سا اسکیم اور کون سا solver استعمال کرنا ہے۔ لاجسٹک ریگریشن بنائیں جس میں multi_class ovr پر اور solver liblinear پر مقرر ہو۔
-
ایک لاجسٹک ریگریشن بنائیں جس میں multi_class
ovrہو اور solverliblinearہو: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))
✅ مختلف solver جیسے
lbfgsبھی آزمائیں، جو اکثر ڈیفالٹ ہوتا ہےنوٹ کریں، جب ضرورت ہو تو آپ اپنے ڈیٹا کو فلٹین کرنے کے لیے Pandas کا
ravelفنکشن استعمال کریں۔درستگی 80٪ سے زیادہ اچھی ہے!
-
آپ اس ماڈل کو فعال دیکھنے کے لیے کسی بھی ایک قطار (#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✅ مختلف قطار نمبر آزمائیں اور نتائج چیک کریں
-
مزید گہرائی میں جا کر، آپ اس پیشگوئی کی درستگی چیک کر سکتے ہیں:
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 ✅ کیا آپ وضاحت کر سکتے ہیں کہ ماڈل کیوں کافی حد تک یقینی ہے کہ یہ انڈین کھانا ہے؟
-
مزید تفصیل حاصل کرنے کے لیے ایک درجہ بندی رپورٹ پرنٹ کریں، جیسا کہ آپ نے رجریشن کے اسباق میں کیا تھا:
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
اس سبق میں، آپ نے اپنی صاف شدہ ڈیٹا کا استعمال کرتے ہوئے ایک مشین لرننگ ماڈل بنایا ہے جو اجزاء کی ایک سیریز کی بنیاد پر ایک قومی کھانے کی پیشگوئی کر سکتا ہے۔ مختلف اختیارات کو پڑھنے کے لیے کچھ وقت نکالیں جو Scikit-learn فراہم کرتا ہے تاکہ ڈیٹا کو درجہ بند کیا جا سکے۔ 'solver' کے تصور میں مزید گہرائی میں جائیں تاکہ سمجھ سکیں کہ پس منظر میں کیا ہو رہا ہے۔
لاجسٹک رجریشن کے پیچھے ریاضی میں تھوڑا مزید غوطہ لگائیں اس سبق میں
ڈس کلیمر:
یہ دستاویز AI ترجمہ سروس Co-op Translator کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ اگرچہ ہم درستگی کے لیے کوشاں ہیں، براہ کرم اس بات سے آگاہ رہیں کہ خودکار تراجم میں غلطیاں یا نا درستیاں ہو سکتی ہیں۔ اصل دستاویز اپنی مادری زبان میں ہی معتبر ذریعہ سمجھی جانی چاہیے۔ اہم معلومات کے لیے پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کی ذمہ داری ہم پر عائد نہیں ہوتی۔


