Iskanje po mreži z MLflow

Iskanje Po Mrezi Z Mlflow



Hiperparametri v modelih strojnega učenja so optimizirani s pristopom iskanja po mreži. Uporabnik lahko hitro primerja več nastavitev hiperparametrov in ugotovi, katere so najboljše, ker MLflow spremlja rezultate poskusov iskanja v mreži. V MLflow lahko poskus iskanja po mreži hitro delite z drugimi člani ekipe. Z uporabo MLflow je mogoče uporabiti najučinkovitejši model iz poskusa iskanja v mreži.

Prednosti iskanja po mreži

  • Samodejna nastavitev hiperparametrov: Iskanje po mreži avtomatizira nastavitev hiperparametrov, ki omogoča sistematično raziskovanje brez ročnega poskusa in napak.
  • Ponovljivost: iskanje po mreži zagotavlja veljavnost testa s ponovljivim pridobivanjem ponovljivih rezultatov, kar izboljša komunikacijo in zanesljivost.
  • Izčrpno iskanje: GS z izčrpnim iskanjem kombinacij učinkovito najde optimalne hiperparametre za model.
  • Robustnost: Iskanje po mreži je robustna tehnika, ki je odporna na podatkovni šum, kar zmanjšuje prekomerno prilagajanje.
  • Enostaven za uporabo: Iskanje po mreži je preprosto za uporabo in razumevanje, zaradi česar je izvedljiva metoda za uravnavanje hiperparametrov.
  • Primerjave modelov: Iskanje po mreži poenostavi primerjavo modelov in izbiro meritev vrednotenja.

Slabosti iskanja po mreži

  • Računski stroški: Iskanje po mreži je računsko drago za prilagajanje velikega števila hiperparametrov.
  • Zamudno: Za kompleksne prilagoditve hiperparametrov je zamudno.
  • Ni vedno potrebno: Zdaj je vedno zahtevano; naključno iskanje je najboljša alternativa temu.

Primer: Iskanje najboljših nastavitev modela za sistem vpisa na univerzo

Oglejmo si primer iskanja po mreži za uravnavanje hiperparametrov znotraj okvira spletnega sistema za sprejem na univerzo. V tem primeru uporabljamo scikit-learn in preprost klasifikator Gradient Boosting Classifier (GBC) za napovedovanje študentove verjetnosti, da bo sprejet na univerzo na podlagi dejavnikov, kot so GPA točke, rezultati SAT, rezultati ACT in izvenšolske dejavnosti. Na voljo je več možnosti za iskanje po omrežju namesto GBC, vključno z logistično regresijo (LR), SVM (Support Vector Machine) itd.

Ustvarite naključne podatke za spletni sprejemni sistem z uporabo MLflow za iskanje po mreži

Pythonove Pande in naključne pakete je mogoče uporabiti za ustvarjanje fiktivnega nabora podatkov za sprejemni sistem. Z naključnimi vrednostmi za stolpce APP_NO, GPA, SAT Score, ACT Score, Extracricular Activities in Status statusa, ta koda ustvari sintetični nabor podatkov o sprejemu. Spremenljivka num_students nadzira, koliko vrstic je v naboru podatkov.







Status sprejema je naključno nastavljen na podlagi 70-odstotne stopnje sprejemljivosti, naključni modul pa se uporablja za izdelavo naključnih vrednosti za več stolpcev. Za namene predstavitve naslednji del kode ustvari lažni sprejemni nabor podatkov z naključnimi vrednostmi in se shrani v datoteko std_admission_dataset.csv:



Delček kode:



# Uvozite knjižnici Panda in Random
uvozite pande kot panda_obj
uvozi naključno kot random_obj

# Nastavite število zapisov za ustvarjanje nabora podatkov študentov
zapisi_učencev = 1000

# Ustvarite sezname za shranjevanje podatkov
std_application_numbers = [ 'APP-' + str(naključni_obj.randint( 1000 , 9999 )) za _ v obsegu (zapisi_študentov)]
std_gpa = [okroglo(random_obj.uniform( 2.5 , 4.0 ), 2 ) za _ v obsegu (zapisi_študentov)]
std_sat_scores = [naključni_obj.randint( 900 , 1600 ) za _ v obsegu (zapisi_študentov)]
std_act_scores = [random_obj.randint( dvajset , 36 ) za _ v obsegu (zapisi_študentov)]
std_extra_curriculars = [random_obj.choice([ 'Da' , 'ne' ]) za _ v obsegu (zapisi_študentov)]

# Izračunajte status sprejema na podlagi naključne stopnje sprejema
std_admission_status = [ 1 če je random_obj.random() < 0,7 drugače 0 za _ v obsegu (zapisi_študentov)]

# Ustvarite slovar za shranjevanje podatkov študentov
std_data = {

'APPLICATION_NO' : std_application_numbers,

'GPA' : std_gpa,

'SAT_Score' : std_sat_scores,

'ACT_Score' : std_act_scores,

'Izvenšolske dejavnosti' : std_extra_curriculars,

'Status_sprejema' : std_admission_status

}

# Ustvarite DataFrame DataFrame_Student iz slovarja
DataFrame_Student = panda_obj.DataFrame(std_data)

# Shranite DataFrame DataFrame_Student v datoteko CSV z imenom std_admission_dataset.csv
DataFrame_Student.to_csv( 'std_admission_dataset.csv' , indeks=False)
natisni( 'Podatki študentov so bili uspešno izvoženi v datoteko CSV!' )

Izvedba kode:

Uporabite ukaz Python za prevajanje kode, nato pa z ukazom pip namestite določen modul, če naletite na napako modula. Uporabite ukaz pip3 install za namestitev dane knjižnice, če je Python različice 3.X ali novejše.





Uspešna izvedba:



Posnetek zaslona vzorčnih podatkov:

1. korak: uvozite knjižnice

  • Knjižnica MLflow za sledenje poskusom strojnega učenja
  • Knjižnica Pandas za obdelavo in analizo podatkov ter paket mlflow.sklearn za integracijo modelov Scikit-Learn
  • Četrta vrstica uvozi knjižnico »opozoril« za zatiranje napak
  • Razred ParameterGrid za iskanje po mreži v modulu sklearn.model_selection
  • GridSearchCV in GradientBoostingClassifier iz sklearn.model_selection oziroma ensemble za modele klasifikatorjev iskanja po mreži in stopnjevanja gradienta
  • Funkciji accuracy_score in classification_report iz modula sklearn.metrics za izračun točnosti modela in ustvarjanje poročil o klasifikaciji
  • Koda uvozi modul OS in nastavi spremenljivko okolja GIT_PYTHON_REFRESH na tiho.

Delček kode:

# I. korak Uvoz zahtevanih knjižnic
uvoz mlflow
uvoz mlflow.sklearn
uvozi opozorila kot opozorila
uvozite pande kot panda_obj
iz sklearn.model_selection import train_test_split kot tts, ParameterGrid kot pg, GridSearchCV kot gscv
uvažajte nas
iz sklearn.ensemble uvozite GradientBoostingClassifier kot GBC
iz sklearn.metrics uvozite accuracy_score kot acs, classification_report kot cr
os.environ[ 'GIT_PYTHON_REFRESH' ] = 'tih'

2. korak: Nastavite URI za sledenje

Sledilni URI strežnika MLflow je nastavljen s funkcijo mlflow.set_tracking_uri(), kar zagotavlja lokalni stroj na vratih 5000 za poskuse in modele.

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

3. korak: Naložite in pripravite nabor podatkov o sprejemu

Uvozite knjižnico Pandas kot panda_obj za obdelavo in analizo podatkov. Funkcija read_csv() se uporablja za nalaganje nabora podatkov o sprejemu. Pot do nabora podatkov je edini argument, ki ga zahteva funkcija read_csv(). Pot do nabora podatkov v tem primeru je std_admission_dataset.csv. Z uporabo funkcije read_csv() se nabor podatkov naloži v Pandas DataFrame.

Koda najprej odstrani stolpec Admission_Status iz std_admissions_data DataFrame. Ker ta stolpec vsebuje ciljno spremenljivko, predhodna obdelava ni potrebna.

Nato koda ustvari dve novi spremenljivki: “F” in “t”. Lastnosti so vsebovane v spremenljivki »F«, medtem ko je ciljna spremenljivka vsebovana v spremenljivki »t«.

Podatki se nato porazdelijo v nize za testiranje in usposabljanje. To se doseže s funkcijo tts() iz paketa sklearn.model_selection. Funkcije, ciljna spremenljivka, testna velikost in naključno stanje so štirje argumenti, ki jih zahteva funkcija tts(). Parameter test_size določa del podatkov, ki se uporabi za namene testiranja. Ker je velikost testa v tem primeru nastavljena na 0,2, bo za test uporabljenih 20 % podatkov.

Možnost random_state podaja seme generatorja naključnih števil. To se naredi za zagotovitev, da so podatki ločeni naključno. Nizi za usposabljanje in testiranje so zdaj shranjeni v spremenljivkah F_training, F_testing, t_training in t_testing. Te nize je mogoče uporabiti za ocenjevanje in usposabljanje modelov strojnega učenja.

Delček kode:

# 3. korak: naložite nabor podatkov o sprejemu
std_admissions_data = panda_obj.read_csv( 'std_admission_dataset.csv' )

# Predobdelajte podatke in jih razdelite na funkcije (F) in cilj (t)
F = std_admissions_data.drop([ 'Status_sprejema' ], os= 1 )
t = std_admissions_data[ 'Status_sprejema' ]

# Pretvorite kategorične spremenljivke v številske z uporabo enkratnega kodiranja
F = panda_obj.get_dummies(F)
F_trening, F_testiranje, t_trening, t_testiranje = tts(F, t, test_size= 0,2 , naključno_stanje= 42 )

4. korak: Nastavite ime poskusa MLflow

adm_experiment_name = 'Univerzitetni_vpisni_eksperiment'
mlflow.set_experiment(adm_experiment_name)

5. korak: Definirajte klasifikator za povečanje gradienta

Model klasifikatorja za povečanje gradienta je zdaj shranjen v spremenljivki gbc_obj. Nabor podatkov o sprejemu se lahko uporabi za testiranje in usposabljanje tega modela. Vrednost argumenta random_state je 42. To zagotavlja, da je model učen z uporabo popolnoma enakega semena generatorja naključnih števil, zaradi česar so rezultati ponovljivi.

gbc_obj = GBC(naključno_stanje= 42 )

6. korak: Definirajte mrežo hiperparametrov

Koda na začetku ustvari slovar param_grid. Hiperparametri, ki se prilagodijo z iskanjem po mreži, so v tem slovarju. Trije ključi sestavljajo slovar param_grid: n_estimators, learning_rate in max_depth. To so hiperparametri modela klasifikatorja, ki povečuje gradient. Število dreves v modelu je podano s hiperparametrom n_estimators. Stopnja učenja modela je določena s hiperparametrom learning_rate. Hiperparameter max_depth določa največjo možno globino dreves modela.

Delček kode:

param_grid = {

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

'learning_rate' :[ 0,01 , 0,1 , 0,2 ],

'max_depth' :[ 4 , 5 , 6 ]

}

7. korak: Izvedite iskanje po mreži s sledenjem MLflow

Koda nato ponovi slovar param_grid. Za vsak nabor hiperparametrov v slovarju koda naredi naslednje:

  • Začne nov zagon MLflow
  • Pretvori hiperparametre v seznam, če še niso seznam
  • Zabeleži hiperparametre v MLflow
  • Usposablja iskalni model mreže s podanimi hiperparametri
  • Pridobi najboljši model iz iskanja v mreži
  • Napoveduje podatke o testiranju, ki delujejo kot najboljši model
  • Izračuna natančnost modela
  • Natisne poročilo o hiperparametrih, natančnosti in klasifikaciji
  • Beleži natančnost in model v MLflow

Delček kode:

z warn.catch_warnings():
warn.filterwarnings( 'ignoriraj' , kategorija=Uporabniško opozorilo, modul= '.*distutil.*' )
za parametre v pg(param_grid):
z mlflow.start_run(run_name= 'Prijem_Status Run' ):
# Pretvorite posamezne vrednosti v sezname
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_testiranje)
model_accuracy_score = acs(t_testiranje, model_predictions)
natisni( 'Hiperparametri:' , parametri)
natisni( 'Natančnost:' , model_accuracy_score)
# Eksplicitno prezrite UndefinedMetricWarning
z warn.catch_warnings():
warn.filterwarnings( 'ignoriraj' , kategorija=opozorilo)
natisni( 'Razvrstitveno poročilo:' )
print(cr(t_testiranje, model_predictions, zero_division= 1 ))
mlflow.log_metric( 'natančnost' , model_accuracy_score)
mlflow.sklearn.log_model(std_best_model, 'gb_classifier_model' )

8. korak: Izvedite program z uporabo Pythona

Tukaj je rezultat na strežniku MLflow:

Zaključek

Orodje za iskanje po mreži MLflow avtomatizira prilagajanje, sledenje rezultatom in spreminjanje hiperparametrov v modelih strojnega učenja. Pomaga določiti idealne hiperparametre in zagotavlja zanesljive rezultate, vendar je lahko računsko drago za obsežne eksperimente hiperparametrov.