Skip to content

Latest commit

 

History

History
246 lines (168 loc) · 18.9 KB

File metadata and controls

246 lines (168 loc) · 18.9 KB

باورچی خانے کی قسم بندی کرنے والے 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 قسم بندی کو سپروائزڈ لرننگ کے تحت رکھتا ہے، اور اس زمرے میں آپ کو قسم بندی کرنے کے کئی طریقے ملیں گے۔ مختلف طریقے دیکھنے میں پہلے پہل کافی پیچیدہ لگ سکتے ہیں۔ درج ذیل طریقے سب قسم بندی کی تکنیکیں شامل کرتے ہیں:

  • لینیئر ماڈلز
  • سپورٹ ویکٹر مشینز
  • اسٹوکاسٹک گریڈینٹ ڈی سینٹ
  • قریب ترین پڑوسی
  • گوسیئن پراسیسز
  • فیصلہ ساز درخت
  • ایسینبل طریقے (ووٹنگ کلاسفیئر)
  • ملٹی کلاس اور ملٹی آؤٹ پٹ الگورتھمز (ملٹی کلاس اور ملٹی لیبل قسم بندی، ملٹی کلاس-ملٹی آؤٹ پٹ قسم بندی)

آپ نیورل نیٹ ورکس بھی استعمال کر سکتے ہیں لیکن وہ اس سبق کے دائرہ کار سے باہر ہیں۔

کون سا کلاسفیئر منتخب کیا جائے؟

تو، آپ کون سا کلاسفیئر منتخب کریں؟ اکثر، کئی کلاسفیئرز کو آزمانا اور اچھا نتیجہ تلاش کرنا آزمائشی طریقہ ہوتا ہے۔ Scikit-learn ایک موازنہ پیش کرتا ہے جو مختلف الگورتھمز جیسے KNeighbors، SVC کے دو طریقے، GaussianProcessClassifier، DecisionTreeClassifier، RandomForestClassifier، MLPClassifier، AdaBoostClassifier، GaussianNB اور QuadraticDiscrinationAnalysis کا موازنہ کرتا ہے اور نتائج کو بصری طور پر دکھاتا ہے:

comparison of classifiers

یہ گراف Scikit-learn کی دستاویزات میں بنائے گئے ہیں

AutoML اس مسئلے کو آسانی سے حل کرتا ہے کلاؤڈ میں یہ کمپیریزنز چلا کر، تاکہ آپ اپنے ڈیٹا کے لیے سب سے بہتر الگورتھم منتخب کر سکیں۔ اسے یہاں آزمائیں

ایک بہتر طریقہ

اندازے لگانے کے بجائے بہتر ہے کہ اس ML Cheat sheet کو ڈاؤنلوڈ کر کے اس میں بتائی گئی تجاویز پر عمل کریں۔ یہاں، ہم دیکھتے ہیں کہ ہمارے ملٹی کلاس مسئلے کے لیے ہمارے پاس کچھ آپشنز ہیں:

cheatsheet for multiclass problems

مائیکروسافٹ کے الگورتھم چیٹ شیٹ کا ایک حصہ، جو ملٹی کلاس قسم بندی کے آپشنز کی تفصیل بتاتا ہے

✅ اس چیٹ شیٹ کو ڈاؤنلوڈ کریں، پرنٹ نکالیں، اور اپنی دیوار پر لگائیں!

منطق

آئیے دیکھیں کہ موجودہ پابندیوں کے پیش نظر مختلف طریقوں پر کیسے غور کیا جا سکتا ہے:

  • نیورل نیٹ ورکس بہت بھاری ہیں۔ ہمارے صاف لیکن کم حجم ڈیٹا سیٹ اور لوکل نوٹ بکس میں ٹریننگ چلانے کی وجہ سے، نیورل نیٹ ورکس اس کام کے لیے زیادہ بھاری ہیں۔
  • کوئی دو-کلاس کلاسفیئر نہیں۔ ہم دو-کلاس کلاسفیئر استعمال نہیں کرتے، اس لیے ون-ورسس-آل آؤٹ ہو جاتا ہے۔
  • فیصلہ ساز درخت یا لاجسٹک ریگریشن کام کر سکتا ہے۔ فیصلہ ساز درخت یا ملٹی کلاس ڈیٹا کے لیے لاجسٹک ریگریشن مفید ہو سکتا ہے۔
  • ملٹی کلاس بوسٹڈ فیصلہ ساز درخت مختلف مسئلے کے لیے ہیں۔ ملٹی کلاس بوسٹڈ فیصلہ ساز درخت غیر پیرا میٹرک کاموں کے لیے بہتر ہیں، جیسے رینکنگ بنانا، اس لیے ہمارے لیے یہ مفید نہیں۔

Scikit-learn کا استعمال

ہم اپنے ڈیٹا کا تجزیہ کرنے کے لیے 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 مختلف قسم کے ڈیٹا ڈھانچوں کے چیلنجز کو ہینڈل کرتے ہیں:

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 پر مقرر ہو۔

  1. ایک لاجسٹک ریگریشن بنائیں جس میں multi_class ovr ہو اور solver liblinear ہو:

    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٪ سے زیادہ اچھی ہے!

  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

🚀چیلنج

اس سبق میں، آپ نے اپنی صاف شدہ ڈیٹا کا استعمال کرتے ہوئے ایک مشین لرننگ ماڈل بنایا ہے جو اجزاء کی ایک سیریز کی بنیاد پر ایک قومی کھانے کی پیشگوئی کر سکتا ہے۔ مختلف اختیارات کو پڑھنے کے لیے کچھ وقت نکالیں جو Scikit-learn فراہم کرتا ہے تاکہ ڈیٹا کو درجہ بند کیا جا سکے۔ 'solver' کے تصور میں مزید گہرائی میں جائیں تاکہ سمجھ سکیں کہ پس منظر میں کیا ہو رہا ہے۔

جائزہ اور خود مطالعہ

لاجسٹک رجریشن کے پیچھے ریاضی میں تھوڑا مزید غوطہ لگائیں اس سبق میں

اسائنمنٹ

solvers کا مطالعہ کریں


ڈس کلیمر:
یہ دستاویز AI ترجمہ سروس Co-op Translator کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ اگرچہ ہم درستگی کے لیے کوشاں ہیں، براہ کرم اس بات سے آگاہ رہیں کہ خودکار تراجم میں غلطیاں یا نا درستیاں ہو سکتی ہیں۔ اصل دستاویز اپنی مادری زبان میں ہی معتبر ذریعہ سمجھی جانی چاہیے۔ اہم معلومات کے لیے پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کی ذمہ داری ہم پر عائد نہیں ہوتی۔