Grid Search s MLflow

Grid Search S Mlflow



Hyperparametre v modeloch strojového učenia sú optimalizované pomocou prístupu mriežkového vyhľadávania. Používateľ môže rýchlo porovnať viacero nastavení hyperparametrov a zistiť, ktoré z nich fungujú najlepšie, pretože MLflow sleduje výsledky experimentov s vyhľadávaním v mriežke. V MLflow možno experiment s vyhľadávaním mriežky rýchlo zdieľať s ostatnými členmi tímu. Pomocou MLflow je možné nasadiť najefektívnejší model z experimentu vyhľadávania mriežky.

Výhody vyhľadávania v mriežke

  • Automatizované ladenie hyperparametrov: Grid search automatizuje ladenie hyperparametrov, čo umožňuje systematické skúmanie bez manuálnych pokusov a omylov.
  • Reprodukovateľnosť: Vyhľadávanie v mriežke zabezpečuje platnosť testu reprodukovateľným získavaním reprodukovateľných výsledkov, čo zlepšuje komunikáciu a spoľahlivosť.
  • Vyčerpávajúce vyhľadávanie: GS efektívne nájde optimálne hyperparametre pre model vyčerpávajúcim hľadaním kombinácií.
  • Robustnosť: Vyhľadávanie v mriežke je robustná technika, ktorá je odolná voči dátovému šumu, čím sa znižuje nadmerné prispôsobenie.
  • Jednoduché použitie: Vyhľadávanie v mriežke je jednoduché na používanie a pochopenie, čo z neho robí životaschopnú metódu ladenia hyperparametrov.
  • Porovnania modelov: Vyhľadávanie v mriežke zjednodušuje porovnávanie modelov a výber metrík hodnotenia.

Nevýhody vyhľadávania v mriežke

  • Výpočtové náklady: Vyhľadávanie v mriežke je výpočtovo nákladné pre ladenie veľkého počtu hyperparametrov.
  • Časovo náročné: Je to časovo náročné na zložité úpravy hyperparametrov.
  • Nie vždy potrebné: Teraz je to vždy potrebné; Najlepšou alternatívou je náhodné vyhľadávanie.

Príklad: Nájdenie najlepších nastavení modelu pre univerzitný prijímací systém

Pozrime sa na príklad vyhľadávania mriežky pre ladenie hyperparametrov v rámci online prijímacieho systému na univerzitu. V tomto príklade používame scikit-learn a jednoduchý klasifikátor Gradient Boosting Classifier (GBC) na predpovedanie pravdepodobnosti prijatia študenta na univerzitu na základe faktorov, ako sú body GPA, skóre SAT, skóre ACT a mimoškolské aktivity. Na vyhľadávanie mriežky namiesto GBC je k dispozícii viacero možností vrátane Logistic Regression (LR), SVM (Support Vector Machine) atď.

Generujte náhodné údaje pre online prijímací systém pomocou MLflow pre vyhľadávanie v sieti

Python's Pandas a náhodné balíčky možno použiť na vytvorenie fiktívneho súboru údajov pre prijímací systém. S náhodnými hodnotami pre stĺpce APP_NO, GPA, SAT Score, ACT Score, Extracurricular Activities a Admission Status tento kód generuje syntetickú množinu údajov o prijatí. Premenná num_students riadi počet riadkov v množine údajov.







Stav prijatia je náhodne nastavený na základe 70% miery prijatia a náhodný modul sa používa na vytváranie náhodných hodnôt pre niekoľko stĺpcov. Na demonštračné účely nasledujúci kus kódu vytvorí falošný súbor údajov o prijatí s náhodnými hodnotami a uloží sa do súboru std_admission_dataset.csv:



Úryvok kódu:



# Importujte knižnice Panda a Random
importovať pandy ako panda_obj
importovať náhodne ako random_obj

# Nastavte počet záznamov, ktoré sa majú vygenerovať v súbore údajov o študentovi
students_records = 1000

# Vytvorte zoznamy na ukladanie údajov
std_application_numbers = [ 'APP-' + str(random_obj.randint( 1000 , 9999 )) pre _ v rozsahu(students_records)]
std_gpa = [round(random_obj.uniform( 2.5 , 4.0 ), 2 ) pre _ v rozsahu(students_records)]
std_sat_scores = [random_obj.randint( 900 , 1600 ) pre _ v rozsahu(students_records)]
std_act_scores = [random_obj.randint( dvadsať , 36 ) pre _ v rozsahu(students_records)]
std_extra_curriculars = [random_obj.choice([ 'Áno' , 'nie' ]) pre _ v rozsahu(students_records)]

# Vypočítajte stav prijatia na základe miery náhodného prijatia
std_admission_status = [ 1 if random_obj.random() < 0,7 inak 0 for _ in range(students_records)]

# Vytvorte slovník na uchovávanie údajov študentov
std_data = {

„APPLICATION_NO“ : std_application_numbers,

'GPA' : std_gpa,

„SAT_Score“ : std_sat_scores,

'ACT_Score' : std_act_scores,

'Mimoškolské aktivity' : std_extra_curriculars,

'Admission_Status' : std_admission_status

}

# Vytvorte DataFrame DataFrame_Student zo slovníka
DataFrame_Student = panda_obj.DataFrame(std_data)

# Uložte DataFrame DataFrame_Student do súboru CSV s názvom std_admission_dataset.csv
DataFrame_Student.to_csv( 'std_admission_dataset.csv' , index=False)
vytlačiť ( 'Údaje študentov boli úspešne exportované do súboru CSV!' )

Spustenie kódu:

Pomocou príkazu Python skompilujte kód a potom pomocou príkazu pip nainštalujte konkrétny modul, ak narazíte na chybu modulu. Ak je Python verzie 3.X alebo vyššej, na inštaláciu danej knižnice použite príkaz pip3 install.





Úspešná realizácia:



Snímka obrazovky s ukážkovými údajmi:

Krok 1: Importujte knižnice

  • Knižnica MLflow na sledovanie experimentov strojového učenia
  • Knižnica Pandas na spracovanie a analýzu údajov, ako aj balík mlflow.sklearn na integráciu modelov Scikit-Learn
  • Štvrtý riadok importuje knižnicu „varovania“ na potlačenie chýb
  • Trieda ParameterGrid pre vyhľadávanie v mriežke v module sklearn.model_selection
  • GridSearchCV a GradientBoostingClassifier zo sklearn.model_selection a ensemble, v tomto poradí, pre vyhľadávanie v mriežke a modely klasifikátorov so zosilnením gradientu
  • Funkcie presnosť_skóre a klasifikácia_report z modulu sklearn.metrics na výpočet presnosti modelu a generovanie správ o klasifikácii
  • Kód importuje modul OS a nastaví premennú prostredia GIT_PYTHON_REFRESH na tichý.

Úryvok kódu:

# Krok I Import požadovaných knižníc
importovať mlflow
import mlflow.sklearn
importovať upozornenia ako varovanie
importovať pandy ako panda_obj
from sklearn.model_selection import train_test_split ako tts, ParameterGrid ako pg, GridSearchCV ako gscv
importujte nás
zo sklearn.ensemble importujte GradientBoostingClassifier ako GBC
zo sklearn.metrics importovať presnosť_skóre ako acs, klasifikačný_prehľad ako cr
os.environ[ 'GIT_PYTHON_REFRESH' ] = 'tichý'

Krok 2: Nastavte identifikátor URI sledovania

Identifikátor URI sledovania servera MLflow sa nastavuje pomocou funkcie mlflow.set_tracking_uri(), ktorá zabezpečuje lokálny počítač na porte 5000 pre experimenty a modely.

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

Krok 3: Načítajte a pripravte súbor údajov o prijatí

Importujte knižnicu Pandas ako panda_obj na manipuláciu a analýzu údajov. Funkcia read_csv() sa použije na načítanie množiny údajov o prijatí. Cesta k množine údajov je jediným argumentom, ktorý funkcia read_csv() vyžaduje. Cesta k množine údajov v tomto prípade je std_admission_dataset.csv. Použitím funkcie read_csv() sa súbor údajov načíta do Pandas DataFrame.

Kód najskôr odstráni stĺpec Admission_Status z dátového rámca std_admissions_data DataFrame. Keďže tento stĺpec obsahuje cieľovú premennú, predbežné spracovanie nie je potrebné.

Potom kód vytvorí dve nové premenné: „F“ a „t“. Vlastnosti sú obsiahnuté v premennej „F“, zatiaľ čo cieľová premenná je obsiahnutá v premennej „t“.

Údaje sa potom distribuujú do testovacích a tréningových súborov. To sa dosiahne pomocou funkcie tts() z balíka sklearn.model_selection. Vlastnosti, cieľová premenná, veľkosť testu a náhodný stav sú štyri argumenty, ktoré funkcia tts() vyžaduje. Parameter test_size určuje časť údajov, ktorá sa používa na testovacie účely. Keďže veľkosť testu je v tomto prípade nastavená na 0,2, na test sa použije 20 % údajov.

Voľba random_state určuje základ generátora náhodných čísel. To sa robí, aby sa zabezpečilo, že údaje sú oddelené náhodne. Tréningové a testovacie sady sú teraz uložené v premenných F_training, F_testing, t_training a t_testing. Tieto sady možno použiť na vyhodnotenie a trénovanie modelov strojového učenia.

Úryvok kódu:

# Krok 3: Načítajte súbor údajov o prijatí
std_admissions_data = panda_obj.read_csv( 'std_admission_dataset.csv' )

# Predspracujte údaje a rozdeľte ich na funkcie (F) a cieľ (t)
F = std_admissions_data.drop([ 'Admission_Status' ], os= 1 )
t = std_admissions_data[ 'Admission_Status' ]

# Preveďte kategorické premenné na číselné pomocou jednorazového kódovania
F = panda_obj.get_dummies(F)
F_training, F_testing, t_training, t_testing = tts(F, t, test_size= 0,2 , náhodný_stav= 42 )

Krok 4: Nastavte názov experimentu MLflow

adm_experiment_name = 'Univerzitný_prijímací_experiment'
mlflow.set_experiment(názov_experimentu adm)

Krok 5: Definujte klasifikátor zosilnenia gradientu

Model klasifikátora zosilňovania gradientu je teraz uložený v premennej gbc_obj. Vstupný súbor údajov možno použiť na testovanie a trénovanie tohto modelu. Hodnota argumentu random_state je 42. To zaručuje, že model je trénovaný pomocou presne rovnakého zdroja generátora náhodných čísel, vďaka ktorému sú výsledky opakovateľné.

gbc_obj = GBC(náhodný_stav= 42 )

Krok 6: Definujte mriežku hyperparametrov

Kód na začiatku vytvorí slovník param_grid. Tento slovník obsahuje hyperparametre, ktoré sa upravujú pomocou vyhľadávania v mriežke. Tri kľúče tvoria slovník param_grid: n_estimators, learning_rate a max_depth. Toto sú hyperparametre modelu klasifikátora zvyšujúceho gradient. Počet stromov v modeli je určený hyperparametrom n_estimators. Rýchlosť učenia modelu je špecifikovaná pomocou hyperparametra learning_rate. Hyperparameter max_depth definuje najvyššiu možnú hĺbku stromov modelu.

Úryvok kódu:

param_grid = {

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

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

'max_depth' :[ 4 , 5 , 6 ]

}

Krok 7: Vykonajte vyhľadávanie v mriežke pomocou sledovania MLflow

Kód potom iteruje cez slovník param_grid. Pre každú sadu hyperparametrov v slovníku kód robí nasledovné:

  • Spustí nový chod MLflow
  • Skonvertuje hyperparametre na zoznam, ak ešte nie sú zoznamom
  • Zaznamená hyperparametre do MLflow
  • Trénuje model vyhľadávania mriežky so špecifikovanými hyperparametrami
  • Získa najlepší model z vyhľadávania v mriežke
  • Vytvára predpovede na testovacích údajoch, ktoré fungujú ako najlepší model
  • Vypočíta presnosť modelu
  • Vytlačí správu o hyperparametroch, presnosti a klasifikácii
  • Zaznamená presnosť a model do MLflow

Úryvok kódu:

s alert.catch_warnings():
alert.filterwarnings( 'ignorovať' , category=UserWarning, module= '.*distutil.*' )
pre parametre v pg(param_grid):
s mlflow.start_run(názov_behu= 'Admissions_Status Run' ):
# Previesť jednotlivé hodnoty na zoznamy
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)
vytlačiť ( 'Hyperparametre:' , parametre)
vytlačiť ( 'Presnosť:' , model_accuracy_score)
# Explicitne ignorujte UndefinedMetricWarning
s alert.catch_warnings():
alert.filterwarnings( 'ignorovať' , kategória=Upozornenie)
vytlačiť ( 'Správa o klasifikácii:' )
print(cr(t_testovanie, predpovede_modelu, nula_rozdelenie= 1 ))
mlflow.log_metric( 'presnosť' , model_accuracy_score)
mlflow.sklearn.log_model(std_best_model, 'gb_classifier_model' )

Krok 8: Spustite program pomocou Pythonu

Tu je výstup na serveri MLflow:

Záver

Nástroj na vyhľadávanie mriežky MLflow automatizuje ladenie, sledovanie výsledkov a úpravu hyperparametrov v modeloch strojového učenia. Pomáha určiť ideálne hyperparametre a zaisťuje spoľahlivé výsledky, ale pri rozsiahlych experimentoch s hyperparametrami môže byť výpočtovo nákladná.