חיפוש רשת עם MLflow

Hypws Rst M Mlflow



היפרפרמטרים במודלים של למידת מכונה עוברים אופטימיזציה באמצעות גישת החיפוש ברשת. משתמש יכול להשוות במהירות מספר הגדרות היפרפרמטרים ולמצוא אילו מהם מניבים את הביצועים הטובים ביותר מכיוון ש-MLflow עוקב אחר התוצאות של ניסויי חיפוש ברשת. ב-MLflow, ניתן לשתף את ניסוי החיפוש ברשת עם חברי צוות אחרים במהירות. באמצעות MLflow, ניתן לפרוס את המודל היעיל ביותר מניסוי חיפוש ברשת.

היתרונות של חיפוש רשת

  • כוונון היפרפרמטרים אוטומטי: חיפוש רשת הופך את כוונון היפרפרמטרים לאוטומטי המאפשר חקר שיטתי ללא ניסוי וטעייה ידני.
  • יכולת שחזור: חיפוש רשת מבטיח את תקפות הבדיקה על ידי השגת התוצאות הניתנות לשחזור מה שמשפר את התקשורת והאמינות.
  • חיפוש ממצה: GS מוצא ביעילות יתר פרמטרים אופטימליים עבור מודל על ידי חיפוש ממצה של שילובים.
  • יציבות: חיפוש רשת הוא טכניקה חזקה שעמידה בפני רעשי נתונים אשר מפחיתה התאמת יתר.
  • פשוט לשימוש: חיפוש רשת הוא פשוט לשימוש והבנה, מה שהופך אותו לשיטה בר-קיימא לכוונון היפרפרמטרים.
  • השוואת מודלים: חיפוש רשת מפשט את בחירת מדדי השוואת המודלים והערכה.

החסרונות של חיפוש רשת

  • עלות חישובית: חיפוש רשת הוא יקר מבחינה חישובית עבור כוונון מספר רב של היפרפרמטרים.
  • דורש זמן רב: זה גוזל זמן עבור התאמות היפרפרמטר מורכבות.
  • לא תמיד הכרחי: עכשיו זה תמיד נדרש; חיפוש אקראי הוא האלטרנטיבה הטובה ביותר עבורו.

דוגמה: מציאת הגדרות המודל הטובות ביותר עבור מערכת הקבלה לאוניברסיטה

הבה נסתכל על דוגמה לחיפוש רשת עבור כוונון היפרפרמטרים במסגרת מערכת קבלה אוניברסיטאית מקוונת. בדוגמה זו, אנו משתמשים ב-skit-learn ובמסווג הפשוט של Gradient Boosting Classifier (GBC) כדי לחזות את הסבירות של סטודנט להתקבל לאוניברסיטה על סמך גורמים כמו נקודות GPA, ציוני SAT, ציוני ACT ופעילויות חוץ-לימודיות. אפשרויות מרובות זמינות לחיפוש רשת במקום GBC כולל רגרסיה לוגיסטית (LR), SVM (Support Vector Machine) וכו'.

צור נתונים אקראיים עבור מערכת קבלה מקוונת באמצעות MLflow לחיפוש רשת

ניתן להשתמש בפנדות ובחבילות אקראיות של Python ליצירת מערך נתונים פיקטיבי עבור מערכת הקבלה. עם ערכים אקראיים עבור העמודות APP_NO, GPA, SAT, ציון ACT, פעילויות מחוץ ללימודים וסטטוס קבלה, קוד זה יוצר מערך קבלה סינתטי. המשתנה num_students שולט בכמה שורות יש במערך הנתונים.







סטטוס הקבלה נקבע באופן אקראי על בסיס שיעור קבלה של 70%, והמודול האקראי משמש לייצור ערכים אקראיים עבור מספר עמודות. למטרות הדגמה, קטע הקוד הבא יוצר מערך קבלה מזויף עם ערכים אקראיים ונשמר בקובץ std_admission_dataset.csv:



קטע קוד:



# ייבא את הספריות Panda ו-Random
לייבא פנדות בתור panda_obj
ייבוא ​​אקראי כ-random_obj

# הגדר את מספר הרשומות ליצירת מערך הנתונים של התלמידים
רשומות_תלמידים = 1000

# צור רשימות לאחסון נתונים
std_application_numbers = [ 'APP-' + str(random_obj.randint( 1000 , 9999 )) עבור _ in range(students_records)]
std_gpa = [round(random_obj.uniform( 2.5 , 4.0 ), 2 ) עבור _ בטווח(סטודנטים_רשומות)]
std_sat_scores = [random_obj.randint( 900 , 1600 ) עבור _ בטווח(סטודנטים_רשומות)]
std_act_scores = [random_obj.randint( עשרים , 36 ) עבור _ בטווח(סטודנטים_רשומות)]
std_extra_curriculars = [random_obj.choice([ 'כן' , 'לא' ]) עבור _ בטווח(סטודנטים_רשומות)]

# חשב את סטטוס הקבלה על סמך שיעור קבלה אקראי
std_admission_status = [ 1 if random_obj.random() < 0.7 אַחֵר 0 עבור _ בטווח(תלמידים_רשומות)]

# צור מילון כדי להחזיק את נתוני התלמידים
std_data = {

'APPLICATION_NO' : 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' , index=False)
הדפס( 'נתוני סטודנט ייצאו בהצלחה לקובץ 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, בהתאמה, עבור מודלים של חיפוש רשת ושיפור שיפוע
  • הפונקציות accuracy_score ו-classification_report מהמודול sklearn.metrics לחישוב דיוק המודל ויצירת דוחות סיווג
  • הקוד מייבא את מודול מערכת ההפעלה ומגדיר את משתנה הסביבה GIT_PYTHON_REFRESH לשקט.

קטע קוד:

# שלב-I ייבוא ​​ספריות נדרשות
ייבוא ​​mlflow
ייבוא ​​mlflow.sklearn
אזהרות יבוא כמו אזהרה
לייבא פנדות בתור panda_obj
מאת sklearn.model_selection יבוא train_test_split כ-tts, ParameterGrid כ-pg, GridSearchCV כ-gscv
לייבא אותנו
מאת sklearn.ensemble יבוא GradientBoostingClassifier בתור GBC
מ-sklearn.metrics יבוא accuracy_score כ-acs, classification_report כ-CR
os.environ[ '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. ניתן להשתמש בערכות אלה כדי להעריך ולהכשיר את המודלים של למידת מכונה.

קטע קוד:

# שלב 3: טען את מערך הקבלה
std_admissions_data = panda_obj.read_csv( 'std_admission_dataset.csv' )

# עבד מראש את הנתונים ופצל לתכונות (F) ויעד (t)
F = std_admissions_data.drop([ 'סטטוס_כניסה' ], ציר= 1 )
t = std_admissions_data[ 'סטטוס_כניסה' ]

# המרת משתנים קטגוריים למספריים באמצעות קידוד חם אחד
F = panda_obj.get_dummies(F)
F_training, F_testing, t_training, t_testing = tts(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: הגדר את ה-Hyperparameter Grid

הקוד יוצר בתחילה את מילון param_grid. ההיפרפרמטרים המותאמים באמצעות חיפוש הרשת כלולים במילון זה. שלושה מפתחות מרכיבים את מילון param_grid: n_estimators, learning_rate ו-max_depth. אלו הם הפרמטרים ההיפרפרמטרים של מודל הסיווג המשפר גרדיאנט. מספר העצים במודל מצוין על ידי ההיפרפרמטר n_estimators. קצב הלמידה של המודל מוגדר באמצעות היפרפרמטר learning_rate. ההיפרפרמטר max_depth מגדיר את העומק הגבוה ביותר האפשרי של עצי המודל.

קטע קוד:

param_grid = {

'n_estimators' :[ 100 , 150 , 200 ],

'שיעור_למידה' :[ 0.01 , 0.1 , 0.2 ],

'מקסימום עומק' :[ 4 , 5 , 6 ]

}

שלב 7: בצע את חיפוש הרשת עם מעקב אחר MLflow

לאחר מכן הקוד חוזר על מילון param_grid. עבור כל קבוצה של היפרפרמטרים במילון, הקוד עושה את הפעולות הבאות:

  • מתחיל ריצת MLflow חדשה
  • ממירה את הפרמטרים ההיפר לרשימה אם הם לא כבר רשימה
  • רושם את הפרמטרים ההיפר ל-MLflow
  • מכשיר מודל חיפוש רשת עם ההיפרפרמטרים שצוינו
  • מקבל את הדגם הטוב ביותר מחיפוש הרשת
  • מבצע תחזיות על נתוני הבדיקה עובדים במודל הטוב ביותר
  • מחשב את הדיוק של המודל
  • מדפיס את דוח ההיפרפרמטרים, הדיוק והסיווג
  • רושם את הדיוק והמודל ל-MLflow

קטע קוד:

עם warn.catch_warnings():
warn.filterwarnings( 'להתעלם' , category=אזהרת משתמש, מודול= '.*distutil.*' )
עבור פרמטרים ב-pg(param_grid):
עם mlflow.start_run(run_name= 'Admissions_Status Run' ):
# המר ערכים בודדים לרשימות
params = {key: [value] if not isinstance(value, list) else value for key, value in 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)
הדפס( 'פרמטרים יתר:' , פארמים)
הדפס( 'דיוק:' , ציון_דיוק_דגם)
# התעלם במפורש מהאזהרת UndefinedMetric
עם warn.catch_warnings():
warn.filterwarnings( 'להתעלם' , קטגוריה=אזהרה)
הדפס( 'דוח סיווג:' )
print(cr(t_testing, model_predictions, zero_division= 1 ))
mlflow.log_metric( 'דיוק' , ציון_דיוק_דגם)
mlflow.sklearn.log_model(std_best_model, 'gb_classifier_model' )

שלב 8: הפעל את התוכנית באמצעות Python

הנה הפלט בשרת MLflow:

סיכום

כלי חיפוש הרשת של MLflow עושה אוטומציה של כוונון, מעקב אחר התוצאות ושינוי הפרמטרים ההיפר במודלים של למידת מכונה. זה עוזר לקבוע את הפרמטרים האידיאליים ומבטיח את התוצאות האמינות, אבל יכול להיות יקר מבחינה חישובית עבור ניסויי היפרפרמטר נרחבים.