



السمعة:
- إنضم7 فبراير 2024
- المشاركات 52
- مستوى التفاعل 108
- النقاط 33
بسم الله الرحمن الرحيم والصلاة والسلام على أشرف المرسلين
السلام عليكم ورحمة الله
تحية طيبة
اليوم إن شاء الله سنبدأ في سلسلة شرح المفاهيم المتقدمة في تعلم الآلة حيث أننا سننطلق بأول مفهوم ألا وهو ضبط المعاملات الفائقة (Hyperparameter Tuning) والذي يعتبر أحد أهم المفاهيم التي لها دور كبير جدًا في زيادة دقة النموذج, سنحاول فهم ما هذا المفهوم ولماذا نحتاجه وما الأساليب المستعملة . فلنبدأ على بركة الله ..
ضبط المعاملات الفائقة (Hyperparameter Tuning) :
يعرف نموذج التعلم الآلي بأنه نموذج رياضي يتضمن عدة معلمات يجب تعلمها من البيانات من خلال التدريب ومع ذلك هنا نوع آخر من المعلمات وهو ما يسمى بالمعلمات الفائقة والتي لا يمكن تعلمها مباشرة من عملية التدريب عادة ماتضبط قبل عملية التدريب الفعلية حيث أنها تؤثر على كل من أداء وتعقيد وسرعة النموذج إذًا السلام عليكم ورحمة الله
تحية طيبة
اليوم إن شاء الله سنبدأ في سلسلة شرح المفاهيم المتقدمة في تعلم الآلة حيث أننا سننطلق بأول مفهوم ألا وهو ضبط المعاملات الفائقة (Hyperparameter Tuning) والذي يعتبر أحد أهم المفاهيم التي لها دور كبير جدًا في زيادة دقة النموذج, سنحاول فهم ما هذا المفهوم ولماذا نحتاجه وما الأساليب المستعملة . فلنبدأ على بركة الله ..

ماهي المعاملات الفائقة؟
تعريف : هو عملية اختيار القيم المثلى لنموذج التعلم الآلي فعلى سبيل المثال خورازمية knn التي رأيناها في الدرس السابق قمنا بتحديد عدد الجيران الذي يساعدنا في تصنيف البيانات هذا الاختيار قد يكون عشوائيًا وغير مستند إلى منهجية دقيقة لذا هذا قد يؤثر سلبًا على نموذجنا بالإضافة إلى أن هذه الخوارزمية لاتقتصر فقط على عدد الجيران فهي تمتلك العديد من المدخلات مثل طريقة حساب المسافة (Euclidean, Manhatta ) , وطريقة التصويت (Uniform vs. Distance-based) هذه المعاملات يصعب تحديد القيم المثلى لها يدويا ولهذا نستعمل ضبط المعلمات الفائقة .لماذا نحتاج لضبط المعلمات الفائقة؟
كما ذكرنا مسبقًا اختيار القيم المثلى للنموذج تؤثر على العديد من الأشياء منها:
1- سرعة النموذج فهي تجعل النموذج يتعلم بسرعة دون فقدان الدقة
2- أداء النموذج فهي تحسن الدقة وتقلل نسبة الخطأ إضافةً إلى أنها تتجنب أحد أهم المشاكل في تعلم الآلة ألا وهي underfiting و overfiting والتي سنتعمق فيها بشكل أكبر في الدروس القادمة.
طرق ضبط المعلمات الفائقة (Hyperparameter Tuning) :
في هذه الجزئية سنرى الطرق المشهورة المستخدمة في ضبط المعلمات الفائقة ,يوجد العديد والعديد من الطرق أشهرهما RandomSearch وGridSearch واللذان سنشرحهما الآن:
1- طريقة البحث الشبكي GridSearch : كما ذكرنا مسبقًا اختيار القيم المثلى للنموذج تؤثر على العديد من الأشياء منها:
1- سرعة النموذج فهي تجعل النموذج يتعلم بسرعة دون فقدان الدقة
2- أداء النموذج فهي تحسن الدقة وتقلل نسبة الخطأ إضافةً إلى أنها تتجنب أحد أهم المشاكل في تعلم الآلة ألا وهي underfiting و overfiting والتي سنتعمق فيها بشكل أكبر في الدروس القادمة.

في هذه الجزئية سنرى الطرق المشهورة المستخدمة في ضبط المعلمات الفائقة ,يوجد العديد والعديد من الطرق أشهرهما RandomSearch وGridSearch واللذان سنشرحهما الآن:
تعتمد هذه الطريقة على ملائمة النموذج باستخدام جميع التراكيب الممكنة لقيم المعاملات الفائقة المحددة مسبقًا حيث يٌنشىء شبكة من القيم المنفصلة المحتملة لكل معامل فائق ويدرب النموذج على كل تركيبة ممكنة وتختار التركيبة التي تعطي أفضل النتائج ,تعتبر هذه الطريقة فعالة جدًا في إيجاد القيم المثلى إلا أن لها العديد من العيوب أكبرها جعل النموذج بطئ جدًا كما أنه مكلف حسابيًا
2.1 : تطبيق الطريقة على خوارزمية knn باستعمال python :
ستلاحظون أنني لم أقارن النتائج وهذا لكون البيانات الخاصة بنا كبيرة جدًا وتستغرق وقت طويل جدًا لقد قمت بتجربتها إلا أنه لم ينتهي من المعالجة
كود:
from sklearn.model_selection import GridSearchCV #هنا نقوم باستيراد الخوارزمية
from sklearn.metrics import classification_report
from sklearn.neighbors import KNeighborsClassifier
# تحديد القيم المراد تجربتها
بما اننا في knn فنقوم بتحديد القيم التي نريد تجربتها على سبيل مثال عدد الجيران هو من 1 الى 21 ونفس الشيئ الى باقي مدخلات knn
param_grid = {
'n_neighbors': range(1, 21), # تجربة القيم من 1 إلى 20
'weights': ['uniform', 'distance'], # مقارنة طريقتي التصويت
'metric': ['euclidean', 'manhattan', 'minkowski'] # أنواع المسافة
}
# إنشاء النموذج و البحث الشبكي
knn = KNeighborsClassifier()
grid_search = GridSearchCV(knn, param_grid, cv=5, scoring='accuracy')# انشاء خوارزمية البحث الشبكي وادخال الكائن الدي انشئناه
grid_search.fit(X_train, y_train) # تدريب النموذج
# عرض أفضل القيم
print("أفضل المعاملات:", grid_search.best_params_) هنا سيمنحنا افضل قيم تم اختيارها من قبل الخوارزمية
# اختبار النموذج الأمثل
y_pred = grid_search.best_estimator_.predict(X_test)
print(classification_report(y_test, y_pred)) اما هنا سنتحصل على تقرير دقة النموذج وغيره
2- طريقة البحث العشوائي Random Search :
Randomized Search هو طريقة لتحسين أداء نموذج تعلم الآلة عن طريق البحث العشوائي عن القيم المثلى للمعاملات الفائقة (Hyperparameters) بدلًا من تجربة كل القيم الممكنة كما يحدث في Grid Search،يقوم Randomized Search باختيار مجموعة عشوائية من القيم من النطاق المحدد مما يجعله أسرع وأكثر كفاءة خاصة مع مجموعات البيانات الكبيرة
1.2 : تطبيق الطريقة على خوارزمية knn باستعمال python :
كود:
from sklearn.model_selection import RandomizedSearchCV
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import classification_report
from scipy.stats import randint
# تحديد القيم الممكنة للمعاملات الفائقة
param_dist = {
'n_neighbors': randint(1, 21), # اختيار عدد الجيران من 1 إلى 20 بشكل عشوائي
'weights': ['uniform', 'distance'], # تجربة نوعين من الأوزان
'metric': ['euclidean', 'manhattan', 'minkowski'] # تجربة أنواع مختلفة من المسافة
}
# إنشاء نموذج KNN
knn = KNeighborsClassifier()
# إنشاء البحث العشوائي مع عدد محدد من التكرارات
random_search = RandomizedSearchCV(
knn, param_distributions=param_dist,
n_iter=10, # عدد القيم العشوائية التي سيتم تجربتها
cv=5, # عدد الطيات في التحقق المتقاطع
scoring='accuracy', # مقياس التقييم
random_state=42 # لضمان تكرار نفس النتائج
)
# تدريب البحث العشوائي
random_search.fit(X_train, y_train)
# عرض أفضل القيم المختارة
print("أفضل المعاملات:", random_search.best_params_)
# اختبار النموذج الأفضل على بيانات الاختبار
y_pred = random_search.best_estimator_.predict(X_test)
print(classification_report(y_test, y_pred))
لنقارن نتائج الاختيار اليدوي مع استعمال طريقة البحث العشوائي
النتيجة السابقة : النتيجة الحالية :
كما تلاحظون الفرق عند استعمال خورازمية البحث العشوائي نلاحظ أولًا أنه قام بطباعة النتائج المثلى لنا كما هو مبين إضافةً إلى أننا نلاحظ ارتفاع في بعض النتائج كدقة الفئة 1 أصبحت نوعًا ما معادلة للفئة 0
الفرق بين الطريقتين :
الطريقة | المبدأ | المزايا | العيوب |
---|---|---|---|
البحث الشبكي Grid Search | تجربة جميع التراكيب الممكنة للمعلمات الفائقة | يعطي أفضل نتيجة ممكنة | مكلف حسابياً وبطئ |
البحث العشوائي Random Search | اختيار قيم عشوائية | أسرع وأقل تكلفة حسابياً | قد لايجد أفضل القيم |
الخلاصة :
ضبط المعاملات الفائقة خطوة مهمة في تحسين أداء النماذج كما أن استخدام الطريقة المناسبة يعتمد على الموارد والوقت المتاح وهذا هو التحدي الذي ستواجهه
شكرًا على حسن الاستماع أراكم إن شاء الله في الدروس القادمة والسلام عليكم
بالتوفيق للجميع
التعديل الأخير بواسطة المشرف: