Αναζήτηση πλέγματος με MLflow

Anazetese Plegmatos Me Mlflow



Οι υπερπαράμετροι στα μοντέλα μηχανικής μάθησης βελτιστοποιούνται χρησιμοποιώντας την προσέγγιση αναζήτησης πλέγματος. Ένας χρήστης μπορεί να συγκρίνει γρήγορα πολλές ρυθμίσεις υπερπαραμέτρων και να βρει ποιες αποδίδουν καλύτερα, επειδή το MLflow παρακολουθεί τα αποτελέσματα των πειραμάτων αναζήτησης πλέγματος. Στο MLflow, το πείραμα αναζήτησης πλέγματος μπορεί να κοινοποιηθεί γρήγορα με άλλα μέλη της ομάδας. Χρησιμοποιώντας το MLflow, μπορεί να αναπτυχθεί το πιο αποτελεσματικό μοντέλο από ένα πείραμα αναζήτησης πλέγματος.

Πλεονεκτήματα της Αναζήτησης Πλέγματος

  • Αυτόματος συντονισμός υπερπαραμέτρων: Η αναζήτηση πλέγματος αυτοματοποιεί τον συντονισμό υπερπαραμέτρων που επιτρέπει τη συστηματική εξερεύνηση χωρίς χειροκίνητη δοκιμή και σφάλμα.
  • Αναπαραγωγιμότητα: Η αναζήτηση πλέγματος διασφαλίζει την εγκυρότητα της δοκιμής με την αναπαραγώγιμη λήψη των αναπαραγώγιμων αποτελεσμάτων που ενισχύουν την επικοινωνία και την αξιοπιστία.
  • Εξαντλητική αναζήτηση: Η GS βρίσκει αποτελεσματικά τις βέλτιστες υπερπαραμέτρους για ένα μοντέλο αναζητώντας εξαντλητικά συνδυασμούς.
  • Ευρωστία: Η αναζήτηση πλέγματος είναι μια ισχυρή τεχνική που είναι ανθεκτική στο θόρυβο δεδομένων που μειώνει την υπερπροσαρμογή.
  • Απλό στη χρήση: Η αναζήτηση πλέγματος είναι απλή στη χρήση και στην κατανόηση, γεγονός που την καθιστά βιώσιμη μέθοδο για συντονισμό υπερπαραμέτρων.
  • Συγκρίσεις μοντέλων: Η αναζήτηση πλέγματος απλοποιεί την επιλογή μετρήσεων σύγκρισης και αξιολόγησης μοντέλων.

Μειονεκτήματα της Αναζήτησης Πλέγματος

  • Υπολογιστικό κόστος: Η αναζήτηση πλέγματος είναι υπολογιστικά ακριβή για τον συντονισμό μεγάλου αριθμού υπερπαραμέτρων.
  • Χρονοβόρος: Είναι χρονοβόρο για πολύπλοκες ρυθμίσεις υπερπαραμέτρων.
  • Όχι πάντα απαραίτητο: Τώρα απαιτείται πάντα. Η τυχαία αναζήτηση είναι η καλύτερη εναλλακτική λύση.

Παράδειγμα: Εύρεση των καλύτερων ρυθμίσεων μοντέλου για το σύστημα εισαγωγής στο Πανεπιστήμιο

Ας δούμε ένα παράδειγμα αναζήτησης πλέγματος για συντονισμό υπερπαραμέτρων μέσα στο πλαίσιο ενός διαδικτυακού συστήματος εισαγωγής πανεπιστημίων. Σε αυτό το παράδειγμα, χρησιμοποιούμε τον ταξινομητή scikit-learn και έναν απλό ταξινομητή Gradient Boosting Classifier (GBC) για να προβλέψουμε την πιθανότητα ενός μαθητή να γίνει δεκτός σε ένα πανεπιστήμιο με βάση παράγοντες όπως οι βαθμοί GPA, οι βαθμολογίες SAT, οι βαθμολογίες ACT και οι εξωσχολικές δραστηριότητες. Διατίθενται πολλές επιλογές για αναζήτηση πλέγματος αντί για GBC, συμπεριλαμβανομένων των Logistic Regression (LR), SVM (Support Vector Machine) κ.λπ.

Δημιουργήστε τυχαία δεδομένα για το ηλεκτρονικό σύστημα εισαγωγής χρησιμοποιώντας το MLflow για την αναζήτηση πλέγματος

Τα Panda της Python και τα τυχαία πακέτα μπορούν να χρησιμοποιηθούν για τη δημιουργία ενός πλασματικού συνόλου δεδομένων για το σύστημα αποδοχής. Με τυχαίες τιμές για τις στήλες APP_NO, GPA, SAT Score, ACT Score, Extracurricular Activities και Admission Status, αυτός ο κώδικας δημιουργεί ένα συνθετικό σύνολο δεδομένων αποδοχής. Η μεταβλητή num_students ελέγχει πόσες σειρές υπάρχουν στο σύνολο δεδομένων.







Η κατάσταση αποδοχής ορίζεται τυχαία με βάση ένα ποσοστό αποδοχής 70% και η τυχαία ενότητα χρησιμοποιείται για την παραγωγή τυχαίων τιμών για πολλές στήλες. Για λόγους επίδειξης, το ακόλουθο κομμάτι κώδικα δημιουργεί ένα ψεύτικο σύνολο δεδομένων αποδοχής με τυχαίες τιμές και αποθηκεύεται στο αρχείο std_admission_dataset.csv:



Απόσπασμα κώδικα:



# Εισαγάγετε τις βιβλιοθήκες Panda και Random
εισαγωγή panda ως panda_obj
εισαγωγή τυχαίας ως random_obj

# Ορίστε τον αριθμό των εγγραφών για τη δημιουργία του συνόλου δεδομένων μαθητή
μαθητές_εγγραφές = 1000

# Δημιουργήστε λίστες για αποθήκευση δεδομένων
std_application_numbers = [ 'APP-' + str(random_obj.randint( 1000 , 9999 )) για _ στο εύρος (εγγραφές_μαθητών)]
std_gpa = [round(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_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,

'Admission_Status' : 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 για να εγκαταστήσετε τη δεδομένη βιβλιοθήκη εάν η 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 σε αθόρυβη.

Απόσπασμα κώδικα:

# Step-I Εισαγωγή απαιτούμενων βιβλιοθηκών
εισαγωγή mlflow
εισαγωγή mlflow.sklearn
εισαγωγή προειδοποιήσεων ως προειδοποίηση
εισαγωγή panda ως 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([ 'Admission_Status' ], άξονας= 1 )
t = std_admissions_data[ 'Admission_Status' ]

# Μετατρέψτε τις κατηγορικές μεταβλητές σε αριθμητικές χρησιμοποιώντας κωδικοποίηση one-hot
F = panda_obj.get_dummies(F)
F_training, F_testing, t_training, t_testing = tts(F, t, test_size= 0.2 , τυχαία_κατάσταση= 42 )

Βήμα 4: Ορίστε το όνομα πειράματος MLflow

adm_experiment_name = 'University_Admission_Experiment'
mlflow.set_experiment(adm_experiment_name)

Βήμα 5: Ορίστε τον ταξινομητή ενίσχυσης κλίσης

Το μοντέλο ταξινομητή ενίσχυσης κλίσης είναι τώρα αποθηκευμένο στη μεταβλητή gbc_obj. Το σύνολο δεδομένων αποδοχής μπορεί να χρησιμοποιηθεί για τη δοκιμή και την εκπαίδευση αυτού του μοντέλου. Η τιμή του ορίσματος random_state είναι 42. Αυτό εγγυάται ότι το μοντέλο εκπαιδεύεται χρησιμοποιώντας τον ίδιο ακριβώς σπόρο δημιουργίας τυχαίων αριθμών που κάνει τα αποτελέσματα επαναλήψιμα.

gbc_obj = GBC(τυχαία_κατάσταση= 42 )

Βήμα 6: Ορίστε το πλέγμα υπερπαραμέτρων

Ο κώδικας δημιουργεί αρχικά το λεξικό param_grid. Οι υπερπαράμετροι που προσαρμόζονται μέσω της αναζήτησης πλέγματος περιέχονται σε αυτό το λεξικό. Τρία κλειδιά αποτελούν το λεξικό param_grid: n_estimators, learning_rate και max_depth. Αυτές είναι οι υπερπαράμετροι του μοντέλου ταξινομητή που ενισχύει την κλίση. Ο αριθμός των δέντρων στο μοντέλο καθορίζεται από την υπερπαράμετρο n_estimators. Ο ρυθμός εκμάθησης του μοντέλου καθορίζεται μέσω της υπερπαράμετρου Learning_rate. Η υπερπαράμετρος max_depth ορίζει το υψηλότερο δυνατό βάθος των δέντρων του μοντέλου.

Απόσπασμα κώδικα:

param_grid = {

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

'learning_rate' :[ 0,01 , 0.1 , 0.2 ],

'max_depth' :[ 4 , 5 , 6 ]

}

Βήμα 7: Εκτελέστε την Αναζήτηση Πλέγματος με Παρακολούθηση ροής ML

Στη συνέχεια, ο κώδικας επαναλαμβάνεται πάνω από το λεξικό param_grid. Για κάθε σύνολο υπερπαραμέτρων στο λεξικό, ο κώδικας κάνει τα εξής:

  • Ξεκινά μια νέα εκτέλεση MLflow
  • Μετατρέπει τις υπερπαραμέτρους σε λίστα εάν δεν είναι ήδη λίστα
  • Καταγράφει τις υπερπαράμετρους σε MLflow
  • Εκπαιδεύει ένα μοντέλο αναζήτησης πλέγματος με τις καθορισμένες υπερπαραμέτρους
  • Αποκτά το καλύτερο μοντέλο από την αναζήτηση πλέγματος
  • Κάνει προβλέψεις για τα δεδομένα δοκιμών λειτουργώντας το καλύτερο μοντέλο
  • Υπολογίζει την ακρίβεια του μοντέλου
  • Εκτυπώνει την αναφορά υπερπαραμέτρων, ακρίβειας και ταξινόμησης
  • Καταγράφει την ακρίβεια και το μοντέλο σε MLflow

Απόσπασμα κώδικα:

με warn.catch_warnings():
warn.filterwarnings( 'αγνοώ' , κατηγορία=UserWarning, module= '.*distutil.*' )
για παραμέτρους στο pg(param_grid):
με mlflow.start_run(run_name= 'Admissions_Status Run' ):
# Μετατροπή μεμονωμένων τιμών σε λίστες
params = {key: [value] αν όχι isinstance(value, list) other 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)
Τυπώνω( 'Υπερπαράμετροι:' , παραμέτρους)
Τυπώνω( 'Ακρίβεια:' , model_accuracy_score)
# Αγνοήστε ρητά την UndefinedMetricWarning
με warn.catch_warnings():
warn.filterwarnings( 'αγνοώ' , κατηγορία=Προειδοποίηση)
Τυπώνω( 'Αναφορά ταξινόμησης:' )
print(cr(t_testing, model_predictions, zero_division= 1 ))
mlflow.log_metric( 'ακρίβεια' , model_accuracy_score)
mlflow.sklearn.log_model(std_best_model, 'gb_classifier_model' )

Βήμα 8: Εκτελέστε το πρόγραμμα χρησιμοποιώντας Python

Ακολουθεί η έξοδος στον διακομιστή MLflow:

συμπέρασμα

Το εργαλείο αναζήτησης πλέγματος του MLflow αυτοματοποιεί την προσαρμογή, την παρακολούθηση των αποτελεσμάτων και την τροποποίηση των υπερπαραμέτρων στα μοντέλα μηχανικής εκμάθησης. Βοηθά στον προσδιορισμό των ιδανικών υπερπαραμέτρων και διασφαλίζει τα αξιόπιστα αποτελέσματα, αλλά μπορεί να είναι υπολογιστικά ακριβό για εκτεταμένα πειράματα υπερπαραμέτρων.