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.
242 lines
13 KiB
242 lines
13 KiB
# مصنّفات المطبخ 2
|
|
|
|
في درس التصنيف الثاني هذا، ستستكشف المزيد من الطرق لتصنيف البيانات الرقمية. ستتعرف أيضًا على التداعيات لاختيار مصنّف واحد على حساب الآخر.
|
|
|
|
## [اختبار ما قبل المحاضرة](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
### المتطلبات السابقة
|
|
|
|
نفترض أنك أنهيت الدروس السابقة ولديك مجموعة بيانات مُنظَّفة في مجلد `data` باسم _cleaned_cuisines.csv_ في جذر مجلد الدروس الأربعة هذا.
|
|
|
|
### التحضير
|
|
|
|
لقد حمّلنا ملف _notebook.ipynb_ الخاص بك مع مجموعة البيانات المُنظّفة وقسمناها إلى أطر بيانات X و y، جاهزة لعملية بناء النموذج.
|
|
|
|
## خريطة التصنيف
|
|
|
|
في السابق، تعلّمت عن الخيارات المختلفة التي تملكها عند تصنيف البيانات باستخدام ورقة غش لمايكروسوفت. يقدم Scikit-learn ورقة غش مماثلة، لكنها أكثر تفصيلاً تساعدك على تضييق خيارات مقدّري النموذج (مصطلح آخر للمصنّفات):
|
|
|
|

|
|
> تلميح: [زر هذه الخريطة على الإنترنت](https://scikit-learn.org/stable/tutorial/machine_learning_map/) وانقر على المسار لقراءة التوثيق.
|
|
|
|
### الخطة
|
|
|
|
هذه الخريطة مفيدة جدًا بمجرد أن يكون لديك فهم واضح لبياناتك، حيث يمكنك 'المشي' على مساراتها نحو اتخاذ القرار:
|
|
|
|
- لدينا أكثر من 50 عينة
|
|
- نريد التنبؤ بفئة
|
|
- لدينا بيانات معنونة
|
|
- لدينا أقل من 100 ألف عينة
|
|
- ✨ يمكننا اختيار Linear SVC
|
|
- إذا لم ينجح ذلك، ولأن لدينا بيانات رقمية
|
|
- يمكننا تجربة ✨ KNeighbors Classifier
|
|
- إذا لم ينجح، جرب ✨ SVC و ✨ Ensemble Classifiers
|
|
|
|
هذا مسار مفيد جدًا للاتباع.
|
|
|
|
## التمرين - تقسيم البيانات
|
|
|
|
باتباع هذا المسار، يجب أن نبدأ باستيراد بعض المكتبات للاستخدام.
|
|
|
|
1. استورد المكتبات المطلوبة:
|
|
|
|
```python
|
|
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
|
|
```
|
|
|
|
1. قم بتقسيم بيانات التدريب والاختبار:
|
|
|
|
```python
|
|
X_train, X_test, y_train, y_test = train_test_split(cuisines_features_df, cuisines_label_df, test_size=0.3)
|
|
```
|
|
|
|
## مصنّف Linear SVC
|
|
|
|
التجميع بواسطة آلة المتجهات الداعمة (SVC) هو فرع من عائلة تقنيات آلات المتجهات الداعمة في تعلم الآلة (تعرف على المزيد عن هذه أدناه). في هذه الطريقة، يمكنك اختيار 'نواة' لتحديد كيفية تجميع الفئات. يشير معامل 'C' إلى 'التنظيم' الذي ينظّم التأثير المحتمل للمعاملات. يمكن أن تكون النواة واحدة من [عدة](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC)؛ هنا نحددها على 'linear' لضمان الاستفادة من Linear SVC. الافتراضي للاحتمالية هو 'false'؛ هنا نحددها على 'true' لجمع تقديرات الاحتمالية. نحدد الحالة العشوائية على '0' لخلط البيانات للحصول على الاحتمالات.
|
|
|
|
### تمرين - تطبيق Linear SVC
|
|
|
|
ابدأ بإنشاء مصفوفة من المصنّفات. ستضيف تدريجيًا إلى هذه المصفوفة أثناء الاختبار.
|
|
|
|
1. ابدأ بـ Linear SVC:
|
|
|
|
```python
|
|
C = 10
|
|
# إنشاء مصنفات مختلفة.
|
|
classifiers = {
|
|
'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0)
|
|
}
|
|
```
|
|
|
|
2. قم بتدريب نموذجك باستخدام Linear SVC واطبع تقريرًا:
|
|
|
|
```python
|
|
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))
|
|
```
|
|
|
|
النتيجة جيدة جدًا:
|
|
|
|
```output
|
|
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
|
|
|
|
K-Neighbors هو جزء من عائلة "الجيران" في طرق تعلم الآلة، والتي يمكن استخدامها في التعلم المُوجَّه وغير المُوجَّه. في هذه الطريقة، يتم إنشاء عدد محدد مسبقًا من النقاط ويتم تجميع البيانات حول هذه النقاط بحيث يمكن التنبؤ بتسميات معممة للبيانات.
|
|
|
|
### تمرين - تطبيق مصنّف K-Neighbors
|
|
|
|
كان المصنّف السابق جيدًا، وعمل بشكل جيد مع البيانات، لكن ربما يمكننا الحصول على دقة أفضل. جرب مصنّف K-Neighbors.
|
|
|
|
1. أضف سطرًا إلى مصفوفة المصنّفات الخاصة بك (أضف فاصلة بعد عنصر Linear SVC):
|
|
|
|
```python
|
|
'KNN classifier': KNeighborsClassifier(C),
|
|
```
|
|
|
|
النتيجة أسوأ قليلًا:
|
|
|
|
```output
|
|
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](https://scikit-learn.org/stable/modules/neighbors.html#neighbors)
|
|
|
|
## مصنّف Support Vector
|
|
|
|
مصنّفات المتجهات الداعمة هي جزء من عائلة [آلات المتجهات الداعمة](https://wikipedia.org/wiki/Support-vector_machine) في طرق تعلم الآلة التي تُستخدم لمهام التصنيف والانحدار. تقوم آلات الدعم "بتمثيل أمثلة التدريب كنقاط في الفضاء" لزيادة المسافة بين فئتين. تُرسم البيانات اللاحقة في هذا الفضاء ليتم التنبؤ بفئتها.
|
|
|
|
### تمرين - تطبيق مصنّف Support Vector
|
|
|
|
دعونا نحاول تحسين الدقة باستخدام مصنّف Support Vector.
|
|
|
|
1. أضف فاصلة بعد عنصر K-Neighbors، ثم أضف هذا السطر:
|
|
|
|
```python
|
|
'SVC': SVC(),
|
|
```
|
|
|
|
النتيجة جيدة جدًا!
|
|
|
|
```output
|
|
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](https://scikit-learn.org/stable/modules/svm.html#svm)
|
|
|
|
## مصنّفات التجميع (Ensemble)
|
|
|
|
لننتقل في المسار حتى النهاية، بالرغم من أن الاختبار السابق كان جيدًا جدًا. دعونا نجرب بعض "مصنّفات التجميع"، تحديدًا Random Forest و AdaBoost:
|
|
|
|
```python
|
|
'RFST': RandomForestClassifier(n_estimators=100),
|
|
'ADA': AdaBoostClassifier(n_estimators=100)
|
|
```
|
|
|
|
النتيجة جيدة جدًا، خصوصًا مع Random Forest:
|
|
|
|
```output
|
|
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
|
|
```
|
|
|
|
✅ تعرف على [مصنّفات التجميع](https://scikit-learn.org/stable/modules/ensemble.html)
|
|
|
|
تجمع هذه الطريقة في تعلم الآلة "تنبؤات عدة مقدّرين أساسيين" لتحسين جودة النموذج. في مثالنا، استخدمنا أشجار عشوائية و AdaBoost.
|
|
|
|
- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest)، طريقة التجميع، تبني 'غابة' من 'أشجار القرار' محقونة بالعشوائية لتجنب الإفراط في التكيّف. يتم ضبط معامل n_estimators على عدد الأشجار.
|
|
|
|
- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) يركب مصنّفًا على مجموعة بيانات ثم يركب نسخًا من ذلك المصنّف على ذات البيانات. يركز على أوزان العناصر التي تم تصنيفها بشكل خاطئ ويضبط التركيب للمصنّف التالي لتصحيحها.
|
|
|
|
---
|
|
|
|
## 🚀التحدي
|
|
|
|
كل من هذه التقنيات لديها عدد كبير من المعاملات التي يمكنك تعديلها. ابحث عن المعاملات الافتراضية لكل منها وفكر فيما يعنيه تعديل هذه المعاملات لجودة النموذج.
|
|
|
|
## [اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
## مراجعة ودراسة ذاتية
|
|
|
|
هناك الكثير من المصطلحات المتخصصة في هذه الدروس، فخذ دقيقة لمراجعة [هذه القائمة](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) للمصطلحات المفيدة!
|
|
|
|
## الواجب
|
|
|
|
[لعب بالمعاملات](assignment.md)
|
|
|
|
---
|
|
|
|
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
|
**إخلاء المسؤولية**:
|
|
تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يُرجى العلم بأن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. ينبغي اعتبار الوثيقة الأصلية بلغتها الأصلية المصدر الموثوق والمرجعي. للمعلومات الحيوية، يُنصح باستخدام الترجمة المهنية من قبل مترجمين بشريين. نحن غير مسؤولين عن أي سوء فهم أو تفسير ناتج عن استخدام هذه الترجمة.
|
|
<!-- CO-OP TRANSLATOR DISCLAIMER END --> |