Pretraživanje mreže uz MLflow

Pretrazivanje Mreze Uz Mlflow



Hiperparametri u modelima strojnog učenja optimizirani su pomoću pristupa pretraživanja mreže. Korisnik može brzo usporediti više postavki hiperparametara i pronaći one koje imaju najbolju izvedbu jer MLflow prati rezultate eksperimenata pretraživanja mreže. U MLflowu, eksperiment pretraživanja mreže može se brzo podijeliti s drugim članovima tima. Pomoću MLflowa može se implementirati najučinkovitiji model iz eksperimenta pretraživanja mreže.

Prednosti pretraživanja mreže

  • Automatizirano podešavanje hiperparametara: Pretraživanje mreže automatizira podešavanje hiperparametara što omogućuje sustavno istraživanje bez ručnih pokušaja i pogrešaka.
  • Ponovljivost: pretraživanje mreže osigurava valjanost testa ponovljivim dobivanjem ponovljivih rezultata što poboljšava komunikaciju i pouzdanost.
  • Iscrpna pretraga: GS učinkovito pronalazi optimalne hiperparametre za model iscrpnim pretraživanjem kombinacija.
  • Robusnost: Pretraživanje mreže robusna je tehnika koja je otporna na podatkovni šum što smanjuje prekomjerno prilagođavanje.
  • Jednostavan za korištenje: Pretraživanje mreže je jednostavno za korištenje i razumijevanje što ga čini održivom metodom za podešavanje hiperparametara.
  • Usporedbe modela: pretraživanje mreže pojednostavljuje usporedbu modela i odabir metrike procjene.

Nedostaci pretraživanja mreže

  • Računalni trošak: Pretraživanje mreže je računalno skupo za podešavanje velikog broja hiperparametara.
  • Oduzima puno vremena: Za složena podešavanja hiperparametara potrebno je puno vremena.
  • Nije uvijek potrebno: Sada se uvijek zahtijeva; nasumično pretraživanje je najbolja alternativa tome.

Primjer: Pronalaženje najboljih postavki modela za sustav upisa na sveučilište

Pogledajmo primjer pretraživanja mreže za podešavanje hiperparametara unutar okvira mrežnog sustava upisa na sveučilište. U ovom primjeru koristimo scikit-learn i izravni klasifikator Gradient Boosting Classifier (GBC) za predviđanje vjerojatnosti da će student biti primljen na sveučilište na temelju čimbenika kao što su GPA bodovi, SAT rezultati, ACT rezultati i izvannastavne aktivnosti. Dostupno je više opcija za pretraživanje mreže umjesto GBC-a, uključujući logističku regresiju (LR), SVM (Support Vector Machine) itd.

Generirajte nasumične podatke za mrežni sustav upisa koristeći MLflow za pretraživanje mreže

Pythonove Pande i nasumični paketi mogu se koristiti za stvaranje fiktivnog skupa podataka za upisni sustav. S nasumičnim vrijednostima za stupce APP_NO, GPA, SAT Score, ACT Score, Izvannastavne aktivnosti i Status upisa, ovaj kod generira sintetički skup podataka o prijemu. Varijabla num_students kontrolira koliko redaka ima u skupu podataka.







Status pristupa nasumično se postavlja na temelju stope prihvaćanja od 70%, a slučajni modul koristi se za proizvodnju nasumičnih vrijednosti za nekoliko stupaca. U svrhu demonstracije, sljedeći dio koda stvara lažni skup podataka o prijemu s nasumičnim vrijednostima i sprema se u datoteku std_admission_dataset.csv:



Isječak koda:



# Uvezite biblioteke Panda i Random
uvezi pande kao panda_obj
import random kao random_obj

# Postavite broj zapisa za generiranje skupa podataka učenika
zapisi_studenta = 1000

# Napravite popise za pohranu podataka
std_aplikacijski brojevi = [ 'APP-' + str(random_obj.randint( 1000 , 9999 )) za _ u rasponu (zapisi_studenta)]
std_gpa = [round(random_obj.uniform( 2.5 , 4.0 ), 2 ) za _ u rasponu (zapisi_studenta)]
std_sat_scores = [random_obj.randint( 900 , 1600 ) za _ u rasponu (zapisi_studenta)]
std_act_scores = [random_obj.randint( dvadeset , 36 ) za _ u rasponu (zapisi_studenta)]
std_extra_curriculars = [random_obj.choice([ 'Da' , 'Ne' ]) za _ u rasponu (zapisi_studenta)]

# Izračunajte status prijema na temelju slučajne stope prihvaćanja
std_admission_status = [ 1 if random_obj.random() < 0.7 drugo 0 za _ u rasponu (students_records)]

# Napravite rječnik za čuvanje podataka učenika
std_podaci = {

'APPLICATION_NO' : std_application_numbers,

'GPA' : std_gpa,

'SAT_rezultat' : std_sat_scores,

'ACT_Score' : std_act_scores,

'Izvannastavne aktivnosti' : std_extra_curriculars,

'Status_prijema' : std_admission_status

}

# Stvorite DataFrame DataFrame_Student iz rječnika
DataFrame_Student = panda_obj.DataFrame(std_data)

# Spremite DataFrame DataFrame_Student u CSV datoteku pod nazivom std_admission_dataset.csv
DataFrame_Student.to_csv( 'std_admission_dataset.csv' , indeks=False)
ispis( 'Podaci učenika uspješno su izvezeni u CSV datoteku!' )

Izvršenje koda:

Upotrijebite naredbu Python za kompajliranje koda, zatim koristite naredbu pip za instaliranje određenog modula ako naiđete na pogrešku modula. Upotrijebite naredbu pip3 install za instalaciju dane biblioteke ako je Python verzije 3.X ili novije.





Uspješno izvršenje:



Snimka zaslona s oglednim podacima:

Korak 1: Uvezite biblioteke

  • Knjižnica MLflow za praćenje eksperimenata strojnog učenja
  • Knjižnica Pandas za obradu i analizu podataka, kao i paket mlflow.sklearn za integraciju Scikit-Learn modela
  • Četvrti redak uvozi biblioteku 'upozorenja' za suzbijanje pogrešaka
  • Klasa ParameterGrid za pretraživanje mreže u modulu sklearn.model_selection
  • GridSearchCV i GradientBoostingClassifier iz sklearn.model_selection odnosno ensemble za pretraživanje mreže i modele klasifikatora za pojačavanje gradijenta
  • Funkcije accuracy_score i classification_report iz modula sklearn.metrics za izračunavanje točnosti modela i generiranje izvješća o klasifikaciji
  • Kod uvozi OS modul i postavlja GIT_PYTHON_REFRESH varijablu okruženja na tiho.

Isječak koda:

# Korak I Uvoz potrebnih biblioteka
uvoz mlflow
import mlflow.sklearn
uvesti upozorenja kao upozoravati
uvezi pande kao panda_obj
iz sklearn.model_selection import train_test_split kao tts, ParameterGrid kao pg, GridSearchCV kao gscv
uvezi nas
iz sklearn.ensemble import GradientBoostingClassifier kao GBC
iz sklearn.metrics import accuracy_score kao acs, classification_report kao cr
os.environ[ 'GIT_PYTHON_REFRESH' ] = 'miran'

Korak 2: Postavite URI za praćenje

URI za praćenje MLflow poslužitelja postavlja se pomoću funkcije mlflow.set_tracking_uri(), čime se osigurava lokalno računalo na priključku 5000 za eksperimente i modele.

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

Korak 3: Učitajte i pripremite skup podataka o prijemu

Uvezite biblioteku Pandas kao panda_obj za manipulaciju i analizu podataka. Funkcija read_csv() primjenjuje se za učitavanje skupa podataka o prijemu. Put do skupa podataka jedini je argument koji je potreban za funkciju read_csv(). Put do skupa podataka u ovoj instanci je std_admission_dataset.csv. Upotrebom funkcije read_csv(), skup podataka se učitava u Pandas DataFrame.

Stupac Admission_Status iz std_admissions_data DataFramea prvo se uklanja kodom. Budući da ovaj stupac sadrži ciljnu varijablu, predobrada nije potrebna.

Zatim, kod kreira dvije nove varijable: “F” i “t”. Značajke su sadržane u varijabli “F”, dok je ciljna varijabla sadržana u varijabli “t”.

Podaci se zatim distribuiraju u skupove za testiranje i obuku. To se postiže pomoću funkcije tts() iz paketa sklearn.model_selection. Značajke, ciljna varijabla, veličina testa i slučajno stanje četiri su argumenta koja su potrebna za funkciju tts(). Parametar test_size određuje dio podataka koji se koristi u svrhu testiranja. Budući da je veličina testa u ovom slučaju postavljena na 0,2, 20% podataka koristit će se za test.

Opcija random_state navodi početnu vrijednost generatora slučajnih brojeva. Ovo se radi kako bi se osiguralo da su podaci odvojeni nasumično. Skupovi za obuku i testiranje sada su pohranjeni u varijablama F_training, F_testing, t_training i t_testing. Ovi se skupovi mogu koristiti za procjenu i obuku modela strojnog učenja.

Isječak koda:

# Korak 3: Učitajte skup podataka o prijemu
std_admissions_data = panda_obj.read_csv( 'std_admission_dataset.csv' )

# Predobradite podatke i podijelite ih na značajke (F) i cilj (t)
F = std_admissions_data.drop([ 'Status_prijema' ], os= 1 )
t = std_acmissions_data[ 'Status_prijema' ]

# Pretvorite kategoričke varijable u numeričke koristeći one-hot kodiranje
F = panda_obj.get_dummies(F)
F_trening, F_testiranje, t_trening, t_testiranje = tts(F, t, test_size= 0,2 , slučajno_stanje= 42 )

Korak 4: Postavite naziv eksperimenta MLflow

adm_experiment_name = 'Upisni_eksperiment_za_sveučilište'
mlflow.set_experiment(adm_experiment_name)

Korak 5: Definirajte klasifikator za pojačavanje gradijenta

Model klasifikatora pojačanog gradijenta sada je pohranjen u varijabli gbc_obj. Skup podataka o prijemu može se koristiti za testiranje i obuku ovog modela. Vrijednost argumenta random_state je 42. Ovo jamči da je model uvježban pomoću potpuno istog izvora generatora slučajnih brojeva što čini ishode ponovljivim.

gbc_obj = GBC(random_state= 42 )

Korak 6: Definirajte mrežu hiperparametara

Kod inicijalno stvara rječnik param_grid. Hiperparametri koji se prilagođavaju pretraživanjem mreže sadržani su u ovom rječniku. Tri ključa čine rječnik param_grid: n_estimators, learning_rate i max_depth. Ovo su hiperparametri modela klasifikatora s povećanjem gradijenta. Broj stabala u modelu određen je hiperparametrom n_estimators. Stopa učenja modela navedena je preko hiperparametra learning_rate. Hiperparametar max_depth definira najveću moguću dubinu stabala modela.

Isječak koda:

param_grid = {

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

'stopa_učenja' :[ 0,01 , 0,1 , 0,2 ],

'max_depth' :[ 4 , 5 , 6 ]

}

Korak 7: Izvršite pretraživanje mreže pomoću MLflow praćenja

Kod zatim iterira preko param_grid rječnika. Za svaki skup hiperparametara u rječniku, kod čini sljedeće:

  • Pokreće novo pokretanje MLflowa
  • Pretvara hiperparametre u popis ako već nisu popis
  • Bilježi hiperparametre u MLflow
  • Obučava model pretraživanja mreže s navedenim hiperparametrima
  • Dobiva najbolji model iz pretraživanja mreže
  • Izrađuje predviđanja na temelju podataka testiranja koji rade na najboljem modelu
  • Izračunava točnost modela
  • Ispisuje izvješće o hiperparametrima, točnosti i klasifikaciji
  • Zapisuje točnost i model u MLflow

Isječak koda:

s warn.catch_warnings():
warn.filterwarnings( 'zanemariti' , kategorija=Upozorenje korisnika, modul= '.*distutil.*' )
za parametre u pg(param_grid):
s mlflow.start_run(run_name= 'Admissions_Status Run' ):
# Pretvorite pojedinačne vrijednosti u popise
params = {ključ: [vrijednost] if not isinstance(value, list) else vrijednost za ključ, vrijednost u params.items()}
mlflow.log_params(parametri)
grid_search = gscv(gbc_obj, param_grid=params, cv= 5 )
grid_search.fit(F_trening, t_training)
std_best_model = grid_search.best_estimator_
model_predictions = std_best_model.predict(F_testing)
model_accuracy_score = acs(t_testiranje, model_predictions)
ispis( 'Hiperparametri:' , parametri)
ispis( 'Točnost:' , model_accuracy_score)
# Eksplicitno zanemarite UndefinedMetricWarning
s warn.catch_warnings():
warn.filterwarnings( 'zanemariti' , kategorija=Upozorenje)
ispis( 'Izvješće o klasifikaciji:' )
print(cr(t_testiranje, model_predictions, zero_division= 1 ))
mlflow.log_metric( 'točnost' , model_accuracy_score)
mlflow.sklearn.log_model(std_best_model, 'gb_classifier_model' )

Korak 8: Izvršite program koristeći Python

Ovo je izlaz na MLflow poslužitelju:

Zaključak

MLflowov alat za pretraživanje mreže automatizira podešavanje, praćenje rezultata i modificiranje hiperparametara u modelima strojnog učenja. Pomaže u određivanju idealnih hiperparametara i osigurava pouzdane rezultate, ali može biti računalno skupo za opsežne eksperimente s hiperparametrima.