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/ar/4-Classification/2-Classifiers-1
localizeflow[bot] 4ab4f52666
chore(i18n): sync translations with latest source changes (chunk 1/1, 12 changes)
3 months ago
..
solution chore(i18n): sync translations with latest source changes (chunk 1/1, 300 changes) 5 months ago
README.md chore(i18n): sync translations with latest source changes (chunk 1/1, 12 changes) 3 months ago
assignment.md chore(i18n): sync translations with latest source changes (chunk 1/1, 300 changes) 5 months ago
notebook.ipynb 🌐 Update translations via Co-op Translator 10 months ago

README.md

مصنفات المطبخ 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، ويعرض النتائج بشكل مرئي:

مقارنة بين المصنفات

الرسوم المولدة في توثيق Scikit-learn

يحل AutoML هذه المشكلة بشكل أنيق من خلال إجراء هذه المقارنات في السحابة، مما يتيح لك اختيار أفضل خوارزمية لبياناتك. جربه هنا

نهج أفضل

طريقة أفضل من التخمين العشوائي، هي اتباع الأفكار في ورقة الغش القابلة للتنزيل هذه. هنا، نكتشف أنه لمشكلتنا متعددة الفئات، لدينا بعض الخيارات:

ورقة الغش لمشاكل متعددة الفئات

قسم من ورقة الغش لخوارزميات مايكروسوفت، يوضح خيارات التصنيف متعدد الفئات

قم بتحميل ورقة الغش هذه، واطبعها وعلقها على جدارك!

السبب

دعنا نحاول التفكير في الطرق المختلفة استنادًا إلى القيود التي نمتلكها:

  • الشبكات العصبية ثقيلة جدًا. نظرًا لأن بياناتنا نظيفة وقليلة، وحقيقة أننا ندرب محلياً عبر دفاتر الملاحظات، الشبكات العصبية ثقيلة جدًا لهذه المهمة.
  • لا نستخدم مصنف ثنائي الفئة. لا نستخدم مصنفًا ثنائي الفئة، لذا فإن طريقة one-vs-all مستبعدة.
  • شجرة القرار أو الانحدار اللوجستي قد تعمل. شجرة القرار قد تعمل، أو الانحدار اللوجستي للبيانات متعددة الفئات.
  • أشجار القرار المعززة متعددة الفئات تحل مشكلة مختلفة. شجرة القرار المعززة متعددة الفئات مناسبة أكثر للمهام غير المعلمية، مثل المهام المصممة لبناء التصنيفات، لذا فهي ليست مفيدة لنا.

استخدام Scikit-learn

سنستخدم Scikit-learn لتحليل بياناتنا. ومع ذلك، هناك العديد من الطرق لاستخدام الانحدار اللوجستي في Scikit-learn. ألق نظرة على المعلمات التي يمكن تمريرها.

أساسًا، هناك معلمان مهمان - multi_class و solver - يجب تحديدهما عند طلب Scikit-learn إجراء انحدار لوجستي. تطبق قيمة multi_class سلوكًا معينًا. قيمة solver هي الخوارزمية المستخدمة. ليست كل الخوارزميات متوافقة مع كل قيم multi_class.

وفقًا للتوثيق، في حالة متعدد الفئات، خوارزمية التدريب:

  • تستخدم نظام one-vs-rest (OvR) إذا تم تعيين خيار multi_class إلى ovr
  • تستخدم خسارة الإنتروبيا المتقاطعة إذا تم تعيين خيار multi_class إلى multinomial. (حاليًا خيار multinomial مدعوم فقط من المحللات lbfgs, sag, saga و newton-cg)."

🎓 "النظام" هنا يمكن أن يكون 'ovr' (واحد ضد الباقي) أو 'multinomial'. بما أن الانحدار اللوجستي مصمم بشكل أساسي لدعم التصنيف الثنائي، فإن هذه الأنظمة تسمح له بمعالجة مهام التصنيف متعددة الفئات بشكل أفضل. المصدر

🎓 "المحلل" (solver) معرف بأنه "الخوارزمية المستخدمة في مشكلة التحسين". المصدر.

يقدم Scikit-learn هذا الجدول ليشرح كيف تتعامل المحللات مع تحديات مختلفة مقدمة من أنواع هياكل البيانات المختلفة:

المحللات

تمرين - تقسيم البيانات

يمكننا التركيز على الانحدار اللوجستي كتجربة تدريب أولى لأنك تعلمت عنه مؤخرًا في درس سابق. اقسم بياناتك إلى مجموعات تدريب واختبار عن طريق استدعاء train_test_split():

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

تمرين - تطبيق الانحدار اللوجستي

بما أنك تستخدم حالة متعدد الفئات، تحتاج إلى اختيار أي نظام تستخدم وأي محلل تختار. استخدم LogisticRegression مع إعداد متعدد الفئات والمحّل liblinear للتدريب.

  1. أنشئ نموذج انحدار لوجستي مع تعيين multi_class إلى ovr والمحلل إلى 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))
    

    جرب محللًا مختلفًا مثل 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 لتصنيف البيانات. تعمق أكثر في مفهوم 'المُحلل' لفهم ما يحدث وراء الكواليس.

اختبار ما بعد المحاضرة

مراجعة ودراسة ذاتية

اغص أكثر في الرياضيات وراء الانحدار اللوجستي في هذا الدرس

المهمة

ادرس المحللات


إخلاء المسؤولية:
تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية Co-op Translator. بينما نسعى لتحقيق الدقة، يرجى العلم بأن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر المعتمد. للحصول على معلومات هامة، يُنصح بالاعتماد على ترجمة بشرية محترفة. نحن غير مسؤولين عن أي سوء فهم أو تفسير خاطئ ناتج عن استخدام هذه الترجمة.