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
leestott e4050807fb
🌐 Update translations via Co-op Translator
2 weeks ago
..
solution 🌐 Update translations via Co-op Translator 3 weeks ago
README.md 🌐 Update translations via Co-op Translator 2 weeks ago
assignment.md 🌐 Update translations via Co-op Translator 3 weeks ago
notebook.ipynb 🌐 Update translations via Co-op Translator 3 weeks ago

README.md

مصنفات المأكولات 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 يحل هذه المشكلة بشكل أنيق عن طريق تشغيل هذه المقارنات في السحابة، مما يتيح لك اختيار أفضل خوارزمية لبياناتك. جربه هنا

نهج أفضل

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

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

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

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

التفكير

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

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

استخدام Scikit-learn

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

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

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

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

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

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

تقدم 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%!

  1. يمكنك رؤية هذا النموذج أثناء العمل من خلال اختبار صف واحد من البيانات (#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
    

    جرب رقم صف مختلف وتحقق من النتائج.

  2. بالتعمق أكثر، يمكنك التحقق من دقة هذا التنبؤ:

    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

    هل يمكنك تفسير لماذا النموذج متأكد إلى حد كبير أن هذا مطبخ هندي؟

  3. احصل على مزيد من التفاصيل عن طريق طباعة تقرير التصنيف، كما فعلت في دروس الانحدار:

    y_pred = model.predict(X_test)
    print(classification_report(y_test,y_pred))
    
    الدقة الاسترجاع درجة F1 الدعم
    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
    الدقة 0.80 1199
    المتوسط الكلي 0.80 0.80 0.80 1199
    المتوسط الموزون 0.80 0.80 0.80 1199

🚀التحدي

في هذا الدرس، استخدمت بياناتك المنظفة لبناء نموذج تعلم آلي يمكنه التنبؤ بالمطبخ الوطني بناءً على سلسلة من المكونات. خذ بعض الوقت لقراءة الخيارات العديدة التي يوفرها Scikit-learn لتصنيف البيانات. تعمق أكثر في مفهوم 'solver' لفهم ما يحدث خلف الكواليس.

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

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

تعمق قليلاً في الرياضيات وراء الانحدار اللوجستي في هذا الدرس

الواجب

ادرس الحلول


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