بحث الشبكة مع MLflow

Bhth Alshbkt M Mlflow



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

فوائد البحث عن الشبكة

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

عيوب البحث في الشبكة

  • التكلفة الحسابية: يعد البحث عن الشبكة مكلفًا من الناحية الحسابية لضبط عدد كبير من المعلمات الفائقة.
  • استهلاك الوقت: يستغرق الأمر وقتًا طويلاً لإجراء تعديلات معقدة على المعلمات الفائقة.
  • ليس من الضروري دائما: إنه الآن مطلوب دائمًا؛ البحث العشوائي هو البديل الأفضل له.

مثال: العثور على أفضل إعدادات النموذج لنظام القبول الجامعي

دعونا نلقي نظرة على مثال بحث شبكي لضبط المعلمات الفائقة داخل إطار نظام القبول الجامعي عبر الإنترنت. في هذا المثال، نستخدم scikit-learn ومصنف Gradient Boosting Classifier (GBC) المباشر للتنبؤ باحتمالية قبول الطالب في إحدى الجامعات بناءً على عوامل مثل نقاط GPA ودرجات SAT ودرجات ACT والأنشطة خارج المنهج. تتوفر خيارات متعددة للبحث في الشبكة بدلاً من GBC بما في ذلك الانحدار اللوجستي (LR)، وSVM (جهاز ناقل الدعم)، وما إلى ذلك.

قم بإنشاء بيانات عشوائية لنظام القبول عبر الإنترنت باستخدام MLflow للبحث في الشبكة

يمكن استخدام Python's Pandas والحزم العشوائية لإنشاء مجموعة بيانات وهمية لنظام القبول. من خلال القيم العشوائية لأعمدة APP_NO، وGPA، وSAT، وACT، والأنشطة اللامنهجية، وحالة القبول، يقوم هذا الرمز بإنشاء مجموعة بيانات قبول تركيبية. يتحكم المتغير num_students في عدد الصفوف الموجودة في مجموعة البيانات.







يتم تحديد حالة القبول بشكل عشوائي بناءً على معدل قبول 70%، ويتم استخدام الوحدة العشوائية لإنتاج قيم عشوائية لعدة أعمدة. لأغراض العرض التوضيحي، يقوم جزء التعليمات البرمجية التالي بإنشاء مجموعة بيانات قبول زائفة بقيم عشوائية ويتم حفظها في ملف std_admission_dataset.csv:



مقتطف الكود:



# استيراد مكتبات الباندا والعشوائية
استيراد الباندا كـ panda_obj
استيراد عشوائي كـ Random_obj

# قم بتعيين عدد السجلات التي سيتم إنشاء مجموعة بيانات الطالب بها
Student_records = 1000

# إنشاء قوائم لتخزين البيانات
std_application_numbers = [ 'برنامج-' + str(random_obj.randint( 1000 , 9999 )) لـ _ في النطاق (students_records)]
std_gpa = [جولة(random_obj.uniform( 2.5 , 4.0 2 ) لـ _ في النطاق (students_records)]
std_sat_scores = [random_obj.randint( 900 , 1600 ) لـ _ في النطاق (students_records)]
std_act_scores = [random_obj.randint( عشرين , 36 ) لـ _ في النطاق (students_records)]
std_extra_currculars = [random_obj.choice([ 'نعم' , 'لا' ]) لـ _ في النطاق (students_records)]

# حساب حالة القبول على أساس معدل القبول العشوائي
std_admission_status = [ 1 إذا Random_obj.random() < 0.7 آخر 0 لـ _ في النطاق (students_records)]

# إنشاء قاموس للاحتفاظ ببيانات الطالب
البيانات القياسية = {

'رقم التطبيق' : std_application_numbers،

'المعدل التراكمي' : std_gpa،

'SAT_Score' : std_sat_scores،

'ACT_Score' : std_act_scores،

'نشاطات خارجية' : std_extra_curriculars،

'حالة_القبول' : std_admission_status

}

# قم بإنشاء DataFrame DataFrame_Student من القاموس
DataFrame_Student = panda_obj.DataFrame(std_data)

# احفظ DataFrame DataFrame_Student في ملف CSV باسم std_admission_dataset.csv
DataFrame_Student.to_csv( 'std_admission_dataset.csv' الفهرس = خطأ)
مطبعة( 'تم تصدير بيانات الطالب بنجاح إلى ملف CSV!' )

تنفيذ التعليمات البرمجية:

استخدم أمر Python لتجميع التعليمات البرمجية، ثم استخدم الأمر pip لتثبيت وحدة نمطية معينة إذا واجهت خطأ في الوحدة. استخدم الأمر pip3 install لتثبيت المكتبة المحددة إذا كان إصدار Python 3.X أو أعلى.





التنفيذ الناجح:



لقطة شاشة لنموذج البيانات:

الخطوة 1: استيراد المكتبات

  • مكتبة MLflow لتتبع تجربة التعلم الآلي
  • مكتبة Pandas للتعامل مع معالجة البيانات وتحليلها، بالإضافة إلى حزمة mlflow.sklearn لدمج نماذج Scikit-Learn
  • يستورد السطر الرابع مكتبة 'التحذيرات' لمنع الأخطاء
  • فئة ParameterGrid للبحث عن الشبكة في وحدة sklearn.model_selection
  • GridSearchCV وGradientBoostingClassifier من sklearn.model_selection وensemble، على التوالي، للبحث في الشبكة ونماذج مصنفات تعزيز التدرج
  • وظيفتا Precision_score وclassification_report من وحدة sklearn.metrics لحساب دقة النموذج وإنشاء تقارير التصنيف
  • يستورد الكود وحدة نظام التشغيل ويضبط متغير البيئة GIT_PYTHON_REFRESH على الوضع الهادئ.

مقتطف الكود:

# الخطوة الأولى: استيراد المكتبات المطلوبة
استيراد mlflow
استيراد mlflow.sklearn
تحذيرات الاستيراد كتحذير
استيراد الباندا كـ panda_obj
من sklearn.model_selection، قم باستيراد Train_test_split كـ tts، وParameterGrid كـ pg، وGridSearchCV كـ gscv
استيراد لنا
من sklearn.ensemble قم باستيراد GradientBoostingClassifier كـ GBC
من sklearn.metrics، قم باستيراد دقة_النتيجة كـ acs، وتصنيف_التقرير كـ cr
نظام التشغيل. البيئة[ 'GIT_PYTHON_REFRESH' ] = 'هادئ'

الخطوة 2: قم بتعيين URI للتتبع

يتم تعيين URI لتتبع خادم MLflow باستخدام وظيفة mlflow.set_tracking_uri()، مما يضمن وجود جهاز محلي على المنفذ 5000 للتجارب والنماذج.

mlflow.set_tracking_uri( 'http://localhost:5000' )

الخطوة 3: تحميل وإعداد مجموعة بيانات القبول

قم باستيراد مكتبة Pandas كـ panda_obj لمعالجة البيانات وتحليلها. يتم تطبيق وظيفة read_csv () لتحميل مجموعة بيانات القبول. المسار إلى مجموعة البيانات هو الوسيطة الوحيدة المطلوبة بواسطة الدالة read_csv(). المسار إلى مجموعة البيانات في هذا المثيل هو std_admission_dataset.csv. من خلال استخدام الدالة read_csv()، يتم تحميل مجموعة البيانات في Pandas DataFrame.

تتم إزالة عمود Admission_Status من std_admissions_data DataFrame أولاً بواسطة الكود. وبما أن هذا العمود يحتوي على المتغير المستهدف، فإن المعالجة المسبقة ليست ضرورية.

بعد ذلك، يقوم الكود بإنشاء متغيرين جديدين: 'F' و't'. الميزات موجودة في المتغير 'F'، بينما المتغير المستهدف موجود في المتغير 't'.

ثم يتم توزيع البيانات إلى مجموعات الاختبار والتدريب. ويتم تحقيق ذلك باستخدام الدالة tts() من الحزمة sklearn.model_selection. الميزات والمتغير الهدف وحجم الاختبار والحالة العشوائية هي الوسائط الأربع المطلوبة بواسطة الدالة tts (). تنص المعلمة test_size على جزء البيانات الذي يتم استخدامه لأغراض الاختبار. نظرًا لأنه تم ضبط حجم الاختبار في هذه الحالة على 0.2، فسيتم استخدام 20% من البيانات للاختبار.

يحدد خيار Random_state بذرة مولد الأرقام العشوائية. يتم ذلك للتأكد من فصل البيانات بشكل عشوائي. يتم الآن تخزين مجموعات التدريب والاختبار في متغيرات F_training وF_testing وt_training وt_testing. يمكن استخدام هذه المجموعات لتقييم وتدريب نماذج التعلم الآلي.

مقتطف الكود:

# الخطوة الثالثة: تحميل مجموعة بيانات القبول
std_admissions_data = panda_obj.read_csv( 'std_admission_dataset.csv' )

# المعالجة المسبقة للبيانات وتقسيمها إلى ميزات (F) وهدف (t)
F = std_admissions_data.drop([ 'حالة_القبول' ]، المحور= 1 )
ر = std_admissions_data[ 'حالة_القبول' ]

# تحويل المتغيرات الفئوية إلى رقمية باستخدام التشفير الساخن
F = panda_obj.get_dummies(F)
F_training، F_testing، t_training، t_testing = تحويل النص إلى كلام (F، t، test_size= 0.2 ، Random_state= 42 )

الخطوة 4: قم بتعيين اسم تجربة MLflow

adm_experiment_name = 'تجربة_القبول_الجامعي'
mlflow.set_experiment(adm_experiment_name)

الخطوة 5: تحديد مصنف تعزيز التدرج

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

gbc_obj = GBC(random_state= 42 )

الخطوة 6: تحديد شبكة المعلمات الفائقة

يقوم الكود في البداية بإنشاء قاموس param_grid. المعلمات الفائقة التي يتم ضبطها عبر بحث الشبكة موجودة في هذا القاموس. هناك ثلاثة مفاتيح تشكل قاموس param_grid: n_estimators وlearning_rate وmax_deepth. هذه هي المعلمات الفائقة لنموذج المصنف المعزز للتدرج. يتم تحديد عدد الأشجار في النموذج بواسطة المعلمة الفائقة n_estimators. يتم تحديد معدل تعلم النموذج من خلال المعلمة الفائقة لـ Learning_rate. تحدد المعلمة الفائقة max_Deep أعلى عمق ممكن لأشجار النموذج.

مقتطف الكود:

بارام_غريد = {

'n_estimators' :[ 100 , 150 , 200

'معدل التعليم' :[ 0.01 , 0.1 , 0.2

'أقصى عمق' :[ 4 , 5 , 6 ]

}

الخطوة 7: قم بإجراء بحث الشبكة باستخدام تتبع MLflow

ثم يتكرر الكود عبر القاموس param_grid. لكل مجموعة من المعلمات الفائقة في القاموس، يقوم الكود بما يلي:

  • يبدأ تشغيل MLflow جديد
  • يحول المعلمات الفائقة إلى قائمة إذا لم تكن قائمة بالفعل
  • يسجل المعلمات الفائقة في MLflow
  • تدريب نموذج بحث شبكي باستخدام المعلمات الفائقة المحددة
  • يحصل على أفضل نموذج من بحث الشبكة
  • يجعل التنبؤات على بيانات الاختبار تعمل بأفضل نموذج
  • يحسب دقة النموذج
  • طباعة تقرير المعلمات الفائقة والدقة والتصنيف
  • يسجل الدقة والنموذج في MLflow

مقتطف الكود:

مع تحذير.catch_warnings():
تحذير. مرشح التحذيرات ( 'يتجاهل' ، الفئة = تحذير المستخدم، الوحدة = '.*ديستوتيل.*' )
للمعلمات في صفحة (param_grid):
مع mlflow.start_run(run_name= 'تشغيل حالة_القبول' ):
# تحويل القيم الفردية إلى القوائم
المعلمات = {مفتاح: [قيمة] إذا لم تكن قيمة مثيل (قيمة، قائمة) قيمة أخرى للمفتاح، القيمة في params.items ()}
mlflow.log_params(params)
Grid_search = gscv(gbc_obj, param_grid=params, cv= 5 )
Grid_search.fit(F_training، t_training)
std_best_model =grid_search.best_estimator_
model_predictions = std_best_model.predict(F_testing)
model_accuracy_score = acs(t_testing, model_predictions)
مطبعة( 'المعلمات الفائقة:' ، المعلمات)
مطبعة( 'دقة:' ، نموذج_دقة_النتيجة)
# تجاهل UndefenseMetricWarning بشكل صريح
مع تحذير.catch_warnings():
تحذير. مرشح التحذيرات ( 'يتجاهل' ، الفئة=تحذير)
مطبعة( 'تقرير التصنيف:' )
طباعة (cr(t_testing, model_predictions, Zero_division= 1 ))
mlflow.log_metric( 'دقة' ، نموذج_دقة_النتيجة)
mlflow.sklearn.log_model(std_best_model, 'gb_classifier_model' )

الخطوة 8: تنفيذ البرنامج باستخدام بايثون

هنا هو الإخراج على خادم MLflow:

خاتمة

تعمل أداة البحث الشبكي الخاصة بـ MLflow على أتمتة عملية التغيير والتبديل وتتبع النتائج وتعديل المعلمات الفائقة في نماذج التعلم الآلي. فهو يساعد على تحديد المعلمات الفائقة المثالية ويضمن الحصول على نتائج موثوقة ولكنه قد يكون مكلفًا من الناحية الحسابية لتجارب المعلمات الفائقة الشاملة.