Ruudukkohaku MLflow:lla

Ruudukkohaku Mlflow Lla



Koneoppimismallien hyperparametrit optimoidaan käyttämällä ruudukkohakulähestymistapaa. Käyttäjä voi nopeasti verrata useita hyperparametriasetuksia ja löytää tehokkaimmat niistä, koska MLflow pitää kirjaa ruudukkohakukokeilujen tuloksista. MLflow:ssa ruudukkohakukokeilu voidaan jakaa nopeasti muiden tiimin jäsenten kanssa. MLflow:n avulla voidaan ottaa käyttöön tehokkain malli ruudukkohakukokeesta.

Grid Searchin edut

  • Automaattinen hyperparametrien viritys: Grid-haku automatisoi hyperparametrien virityksen, mikä mahdollistaa systemaattisen tutkimisen ilman manuaalista yritystä ja virhettä.
  • Toistettavuus: Grid-haku varmistaa testin validiteetin saamalla toistettavasti toistettavat tulokset, mikä parantaa viestintää ja luotettavuutta.
  • Kattava haku: GS löytää tehokkaasti optimaaliset hyperparametrit mallille etsimällä tyhjentävästi yhdistelmiä.
  • Kestävyys: Grid-haku on vankka tekniikka, joka kestää datakohinaa, mikä vähentää ylisovitusta.
  • Yksinkertainen käyttää: Grid-haku on helppokäyttöinen ja ymmärrettävä, mikä tekee siitä käyttökelpoisen menetelmän hyperparametrien virittämiseen.
  • Mallivertailut: Ruudukkohaku yksinkertaistaa mallien vertailua ja arviointimittojen valintaa.

Grid Searchin haitat

  • Laskennallinen hinta: Grid-haku on laskennallisesti kallista suuren määrän hyperparametrien virittämiseen.
  • Aikaavievä: Se vie aikaa monimutkaisiin hyperparametrien säätöihin.
  • Ei aina tarpeen: Nyt sitä vaaditaan aina; satunnainen haku on paras vaihtoehto sille.

Esimerkki: Parhaiden malliasetusten löytäminen yliopiston pääsyjärjestelmään

Katsotaanpa ruudukkohakuesimerkkiä hyperparametrien virittämisestä yliopiston online-hakujärjestelmän puitteissa. Tässä esimerkissä käytämme scikit-learn- ja suoraviivaista Gradient Boosting Classifier (GBC) -luokitinta ennustaaksemme opiskelijan todennäköisyyttä tulla hyväksytyksi yliopistoon perustuen tekijöihin, kuten GPA-pisteisiin, SAT-pisteisiin, ACT-pisteisiin ja opetuksen ulkopuolisiin aktiviteetteihin. GBC-hakuun on saatavilla useita vaihtoehtoja, mukaan lukien Logistic Regression (LR), SVM (Support Vector Machine) jne.

Luo satunnaisia ​​tietoja online-pääsyjärjestelmää varten käyttämällä MLflow:ta ruudukkohakuun

Pythonin Pandoilla ja satunnaisilla paketeilla voidaan luoda kuvitteellinen tietojoukko pääsyjärjestelmään. Tämä koodi luo synteettisen pääsytietojoukon satunnaisilla arvoilla APP_NO-, GPA-, SAT Score-, ACT Score-, Extracurricular Activity- ja Admission Status -sarakkeille. Num_students-muuttuja määrittää, kuinka monta riviä tietojoukossa on.







Pääsytila ​​asetetaan satunnaisesti 70 %:n hyväksymisasteen perusteella, ja satunnaismoduulia käytetään tuottamaan satunnaisia ​​arvoja useille sarakkeille. Esittelyä varten seuraava koodikappale luo väärennetyn pääsytietojoukon satunnaisilla arvoilla ja tallennetaan std_admission_dataset.csv-tiedostoon:



Koodikatkelma:



# Tuo Panda- ja Random-kirjastot
tuo pandat nimellä panda_obj
tuo satunnainen nimellä random_obj

# Aseta tietueiden määrä luotavalle opiskelijatietojoukolle
opiskelijat_tietueet = 1000

# Luo luettelot tietojen tallentamiseksi
std_application_numbers = [ 'SOVELLUS-' + str(random_obj.randint( 1000 , 9999 )) for _ alueella(oppilaat_tietueet)]
std_gpa = [round(random_obj.uniform( 2.5 , 4.0 ), 2 ) for _ alueella(oppilaat_tietueet)]
std_sat_scores = [random_obj.randint( 900 , 1600 ) for _ alueella(oppilaat_tietueet)]
std_act_scores = [random_obj.randint( kaksikymmentä , 36 ) for _ alueella(oppilaat_tietueet)]
std_extra_curriculars = [random_obj.choice([ 'Joo' , 'Ei' ]) for _ alueella(oppilaat_tietueet)]

# Laske pääsyn tila satunnaisen hyväksymisasteen perusteella
std_admission_status = [ 1 if random_obj.random() < 0.7 muu 0 for _ in range(students_records)]

# Luo sanakirja oppilaiden tietojen säilyttämiseksi
std_data = {

'APPLICATION_NO' : std_application_numbers,

'GPA' : std_gpa,

'SAT_Score' : std_sat_scores,

'ACT_Score' : std_act_scores,

'Extracurricular_Activities' : std_extra_curriculars,

'Admission_Status' : std_admission_status

}

# Luo sanakirjasta DataFrame DataFrame_Student
DataFrame_Student = panda_obj.DataFrame(std_data)

# Tallenna DataFrame DataFrame_Student CSV-tiedostoon nimeltä std_admission_dataset.csv
DataFrame_Student.to_csv( 'std_admission_dataset.csv' , index=False)
Tulosta( 'Opiskelijatietojen vienti CSV-tiedostoon onnistui!' )

Koodin suoritus:

Käytä Python-komentoa koodin kääntämiseen ja käytä sitten pip-komentoa tietyn moduulin asentamiseen, jos kohtaat moduulivirheen. Käytä pip3 install -komentoa tietyn kirjaston asentamiseen, jos Python on versio 3.X tai uudempi.





Onnistunut suoritus:



Esimerkki datan kuvakaappaus:

Vaihe 1: Tuo kirjastot

  • MLflow-kirjasto koneoppimiskokeiden seurantaan
  • Pandas-kirjasto tietojen käsittelyyn ja analysointiin sekä mlflow.sklearn-paketti Scikit-Learn-mallien integrointiin
  • Neljäs rivi tuo 'varoitukset' -kirjaston estääkseen virheet
  • ParameterGrid-luokka ruudukkohakuun sklearn.model_selection-moduulissa
  • GridSearchCV ja GradientBoostingClassifier osoitteesta sklearn.model_selection ja ensemble, vastaavasti ruudukkohakuun ja gradienttia tehostaviin luokitinmalleihin
  • Accuracy_score- ja classification_report-funktiot sklearn.metrics-moduulista laskevat mallin tarkkuuden ja luovat luokitusraportteja
  • Koodi tuo käyttöjärjestelmämoduulin ja asettaa GIT_PYTHON_REFRESH-ympäristömuuttujan hiljaiseksi.

Koodikatkelma:

# Vaihe I Tuo vaaditut kirjastot
tuonti mlflow
tuonti mlflow.sklearn
tuoda varoitukset varoituksen mukaisesti
tuo pandat nimellä panda_obj
kohteesta sklearn.model_selection tuonti train_test_split tts-muodossa, ParameterGrid pg-muodossa, GridSearchCV gscv-muodossa
tuo meille
osoitteesta sklearn.ensemble tuo GradientBoostingClassifier nimellä GBC
osoitteesta sklearn.metrics tuonti accuracy_score muodossa acs, classification_report muodossa cr
os.environ[ 'GIT_PYTHON_REFRESH' ] = 'hiljainen'

Vaihe 2: Aseta seuranta-URI

MLflow-palvelimen seuranta-URI asetetaan mlflow.set_tracking_uri()-funktiolla, mikä varmistaa paikallisen koneen portissa 5000 kokeita ja malleja varten.

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

Vaihe 3: Lataa ja valmistele pääsytietojoukko

Tuo Pandas-kirjasto muodossa panda_obj tietojen käsittelyä ja analysointia varten. Read_csv()-funktiota käytetään pääsytietojoukon lataamiseen. Polku tietojoukkoon on ainoa argumentti, jonka read_csv()-funktio vaatii. Polku tietojoukkoon tässä tapauksessa on std_admission_dataset.csv. Käyttämällä read_csv()-funktiota tietojoukko ladataan Pandas DataFrameen.

Koodi poistaa ensin Admission_Status-sarakkeen std_admissions_data DataFramesta. Koska tämä sarake sisältää kohdemuuttujan, esikäsittelyä ei tarvita.

Sitten koodi luo kaksi uutta muuttujaa: 'F' ja 't'. Ominaisuudet sisältyvät 'F'-muuttujaan, kun taas kohdemuuttuja sisältyy 't'-muuttujaan.

Tiedot jaetaan sitten testaus- ja koulutussarjoihin. Tämä tehdään sklearn.model_selection-paketin tts()-funktiolla. Ominaisuudet, kohdemuuttuja, testin koko ja satunnainen tila ovat neljä argumenttia, jotka tts()-funktio tarvitsee. Test_size-parametri määrittää sen osan tiedoista, joita käytetään testaustarkoituksiin. Koska testin koko on tässä tapauksessa asetettu arvoon 0,2, 20 % tiedoista käytetään testiin.

Satunnaistila-vaihtoehto määrittää satunnaislukugeneraattorin siemenen. Tämä tehdään sen varmistamiseksi, että tiedot erotetaan satunnaisesti. Harjoittelu- ja testaussarjat on nyt tallennettu muuttujiin F_training, F_testing, t_training ja t_testing. Näitä sarjoja voidaan käyttää koneoppimismallien arvioimiseen ja kouluttamiseen.

Koodikatkelma:

# Vaihe 3: Lataa pääsytietojoukko
std_admissions_data = panda_obj.read_csv( 'std_admission_dataset.csv' )

# Esikäsittele tiedot ja jaa ominaisuuksiin (F) ja kohteeseen (t)
F = std_admissions_data.drop([ 'Admission_Status' ], akseli= 1 )
t = std_pääsytiedot[ 'Admission_Status' ]

# Muunna kategoriset muuttujat numeerisiksi käyttämällä one-hot-koodausta
F = panda_obj.get_dummies(F)
F_training, F_testing, t_training, t_testing = tts(F, t, test_size= 0.2 , satunnainen_tila= 42 )

Vaihe 4: Aseta MLflow-kokeen nimi

adm_experiment_name = 'Yliopiston_pääsykokeilu'
mlflow.set_experiment(adm_experiment_name)

Vaihe 5: Määritä gradientin tehostamisen luokitin

Gradienttia tehostava luokittelumalli on nyt tallennettu gbc_obj-muuttujaan. Pääsytietojoukkoa voidaan käyttää tämän mallin testaamiseen ja kouluttamiseen. Random_state-argumentin arvo on 42. Tämä takaa, että mallia harjoitellaan käyttämällä täsmälleen samaa satunnaislukugeneraattorin siementä, mikä tekee tuloksista toistettavissa.

gbc_obj = GBC(random_state= 42 )

Vaihe 6: Määritä hyperparametriruudukko

Koodi luo aluksi param_grid-sanakirjan. Hyperparametrit, joita säädetään ruudukkohaulla, sisältyvät tähän sanakirjaan. Kolme avainta muodostaa param_grid-sanakirjan: n_estimators, learning_rate ja max_depth. Nämä ovat gradienttia tehostavan luokitinmallin hyperparametrejä. Mallin puiden lukumäärä määritellään hyperparametrilla n_estimators. Mallin oppimisnopeus määritetään oppimisnopeus-hyperparametrin kautta. Hyperparametri max_depth määrittää mallin puiden suurimman mahdollisen syvyyden.

Koodikatkelma:

param_grid = {

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

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

'max_depth' :[ 4 , 5 , 6 ]

}

Vaihe 7: Suorita ruudukkohaku MLflow-seurannalla

Koodi toistuu sitten param_grid-sanakirjan yli. Jokaiselle sanakirjan hyperparametrijoukolle koodi toimii seuraavasti:

  • Aloittaa uuden MLflow-ajon
  • Muuntaa hyperparametrit luetteloksi, jos ne eivät ole jo luetteloa
  • Kirjaa hyperparametrit MLflow:hon
  • Kouluttaa ruudukon hakumallin määritetyillä hyperparametreilla
  • Hakee parhaan mallin ruudukkohausta
  • Tekee ennusteita testaustiedoista, jotka toimivat parhaan mallin mukaisesti
  • Laskee mallin tarkkuuden
  • Tulostaa hyperparametrit, tarkkuus- ja luokitusraportin
  • Kirjaa tarkkuuden ja mallin MLflow:hon

Koodikatkelma:

komennolla warn.catch_warnings():
warn.filterwarnings( 'jättää huomiotta' , category=UserWarning, module= '.*distutil.*' )
parametreille pg(param_grid):
komennolla mlflow.start_run(run_name= 'Admissions_Status Run' ):
# Muunna yksittäiset arvot luetteloiksi
params = {avain: [arvo] jos ei isinstance(arvo, lista) else arvo avaimelle, arvo 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 = vakio_paras_malli.ennustus(F_testing)
model_accuracy_score = acs(t_testing, model_predictions)
Tulosta( 'Hyperparametrit:' , parametrit)
Tulosta( 'Tarkkuus:' , model_accuracy_score)
# Ohita UndefinedMetricWarning nimenomaisesti
komennolla warn.catch_warnings():
warn.filterwarnings( 'jättää huomiotta' , kategoria = Varoitus)
Tulosta( 'Luokitteluraportti:' )
print(cr(t_testing, model_predictions, zero_division= 1 ))
mlflow.log_metric( 'tarkkuus' , model_accuracy_score)
mlflow.sklearn.log_model(std_best_model, 'gb_classifier_model' )

Vaihe 8: Suorita ohjelma Pythonilla

Tässä on tulos MLflow-palvelimella:

Johtopäätös

MLflow:n ruudukkohakutyökalu automatisoi säätämisen, tulosten seurannan ja hyperparametrien muokkaamisen koneoppimismalleissa. Se auttaa määrittämään ihanteelliset hyperparametrit ja takaa luotettavat tulokset, mutta voi olla laskennallisesti kallista laajoissa hyperparametrikokeissa.