Grid Search s MLflow

Grid Search S Mlflow



Hyperparametry v modelech strojového učení jsou optimalizovány pomocí přístupu grid search. Uživatel může rychle porovnat více nastavení hyperparametrů a zjistit, které z nich funguje nejlépe, protože MLflow sleduje výsledky experimentů s vyhledáváním v mřížce. V MLflow lze experiment s vyhledáváním v mřížce rychle sdílet s ostatními členy týmu. Pomocí MLflow lze nasadit nejúčinnější model z experimentu s vyhledáváním v mřížce.

Výhody vyhledávání v mřížce

  • Automatické ladění hyperparametrů: Vyhledávání v mřížce automatizuje ladění hyperparametrů, což umožňuje systematické prozkoumávání bez ručních pokusů a omylů.
  • Reprodukovatelnost: Vyhledávání v mřížce zajišťuje platnost testu reprodukovatelným získáváním reprodukovatelných výsledků, což zlepšuje komunikaci a spolehlivost.
  • Vyčerpávající vyhledávání: GS efektivně najde optimální hyperparametry pro model vyčerpávajícím hledáním kombinací.
  • Robustnost: Vyhledávání v mřížce je robustní technika, která je odolná vůči datovému šumu, což snižuje nadměrné přizpůsobení.
  • Jednoduché použití: Vyhledávání v mřížce se snadno používá a je srozumitelné, což z něj činí životaschopnou metodu pro ladění hyperparametrů.
  • Porovnání modelů: Vyhledávání v mřížce zjednodušuje porovnávání modelů a výběr metrik hodnocení.

Nevýhody vyhledávání v mřížce

  • Výpočetní náklady: Vyhledávání v mřížce je výpočetně nákladné pro ladění velkého počtu hyperparametrů.
  • Časově náročné: Je to časově náročné pro složité úpravy hyperparametrů.
  • Ne vždy nutné: Nyní je vždy vyžadován; náhodné vyhledávání je nejlepší alternativou.

Příklad: Nalezení nejlepšího nastavení modelu pro univerzitní přijímací systém

Podívejme se na příklad vyhledávání v mřížce pro ladění hyperparametrů v rámci online univerzitního přijímacího systému. V tomto příkladu používáme scikit-learn a přímočarý klasifikátor Gradient Boosting Classifier (GBC) k předpovědi pravděpodobnosti, že student bude přijat na univerzitu na základě faktorů, jako jsou body GPA, skóre SAT, skóre ACT a mimoškolní aktivity. Pro vyhledávání v mřížce místo GBC je k dispozici několik možností, včetně Logistic Regression (LR), SVM (Support Vector Machine) atd.

Vygenerujte náhodná data pro online přijímací systém pomocí MLflow pro vyhledávání v mřížce

Python's Pandas a náhodné balíčky lze použít k vytvoření fiktivní datové sady pro přijímací systém. S náhodnými hodnotami pro sloupce APP_NO, GPA, SAT Score, ACT Score, Extracurricular Activities a Admission Status tento kód generuje syntetickou datovou sadu pro přijetí. Proměnná num_students řídí počet řádků v datové sadě.







Stav přijetí je náhodně nastaven na základě 70% míry přijetí a náhodný modul se používá k vytváření náhodných hodnot pro několik sloupců. Pro demonstrační účely vytvoří následující část kódu falešnou vstupní datovou sadu s náhodnými hodnotami a uloží se do souboru std_admission_dataset.csv:



Úryvek kódu:



# Importujte knihovny Panda a Random
importovat pandy jako panda_obj
import random jako random_obj

# Nastavte počet záznamů pro generování datové sady studentů
students_records = 1000

# Vytvářejte seznamy pro ukládání dat
std_application_numbers = [ 'APLIKACE-' + str(random_obj.randint( 1000 , 9999 )) pro _ v rozsahu(students_records)]
std_gpa = [round(random_obj.uniform( 2.5 , 4,0 ), 2 ) pro _ v rozsahu(students_records)]
std_sat_scores = [random_obj.randint( 900 , 1600 ) pro _ v rozsahu(students_records)]
std_act_scores = [random_obj.randint( dvacet , 36 ) pro _ v rozsahu(students_records)]
std_extra_curriculars = [random_obj.choice([ 'Ano' , 'Ne' ]) pro _ v rozsahu (students_records)]

# Vypočítejte stav přijetí na základě míry náhodného přijetí
std_admission_status = [ 1 if random_obj.random() < 0,7 jiný 0 for _ in range(students_records)]

# Vytvořte slovník pro uchování dat studentů
std_data = {

'APPLICATION_NO' : std_application_numbers,

'GPA' : std_gpa,

'SAT_Score' : std_sat_scores,

'ACT_Score' : std_act_scores,

'Mimoškolní aktivity' : std_extra_curriculars,

'Admission_Status' : std_admission_status

}

# Vytvořte DataFrame DataFrame_Student ze slovníku
DataFrame_Student = panda_obj.DataFrame(std_data)

# Uložte DataFrame DataFrame_Student do souboru CSV s názvem std_admission_dataset.csv
DataFrame_Student.to_csv( 'std_admission_dataset.csv' , index=False)
tisk( 'Data studentů úspěšně exportována do souboru CSV!' )

Spuštění kódu:

Pomocí příkazu Python zkompilujte kód a poté pomocí příkazu pip nainstalujte konkrétní modul, pokud narazíte na chybu modulu. Pokud je Python verze 3.X nebo vyšší, použijte k instalaci dané knihovny příkaz pip3 install.





Úspěšné provedení:



Ukázkový snímek obrazovky dat:

Krok 1: Importujte knihovny

  • Knihovna MLflow pro sledování experimentů se strojovým učením
  • Knihovna Pandas pro zpracování a analýzu dat, stejně jako balíček mlflow.sklearn pro integraci modelů Scikit-Learn
  • Čtvrtý řádek importuje knihovnu „varování“ pro potlačení chyb
  • Třída ParameterGrid pro vyhledávání mřížky v modulu sklearn.model_selection
  • GridSearchCV a GradientBoostingClassifier ze sklearn.model_selection a ensemble pro vyhledávání mřížky a modely klasifikátorů se zesílením gradientu
  • Funkce přesnosti_skóre a klasifikace_reportu z modulu sklearn.metrics pro výpočet přesnosti modelu a generování klasifikačních zpráv
  • Kód importuje modul OS a nastaví proměnnou prostředí GIT_PYTHON_REFRESH na tichý.

Úryvek kódu:

# Krok-I Import požadovaných knihoven
import mlflow
import mlflow.sklearn
importovat varování jako varování
importovat pandy jako panda_obj
from sklearn.model_selection import train_test_split jako tts, ParameterGrid jako pg, GridSearchCV jako gscv
importujte nás
ze sklearn.ensemble importujte GradientBoostingClassifier jako GBC
ze sklearn.metrics import přesnost_skóre jako acs, klasifikace_report jako cr
os.environ[ 'GIT_PYTHON_REFRESH' ] = 'klid'

Krok 2: Nastavte sledovací URI

Sledovací URI serveru MLflow se nastavuje pomocí funkce mlflow.set_tracking_uri(), která zajišťuje lokální počítač na portu 5000 pro experimenty a modely.

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

Krok 3: Načtěte a připravte datovou sadu pro přijetí

Importujte knihovnu Pandas jako panda_obj pro manipulaci a analýzu dat. Funkce read_csv() se použije k načtení datové sady pro přijetí. Cesta k datové množině je jediným argumentem, který funkce read_csv() vyžaduje. Cesta k datové sadě v této instanci je std_admission_dataset.csv. Použitím funkce read_csv() je datová sada načtena do Pandas DataFrame.

Sloupec Admission_Status z datového rámce std_admissions_data DataFrame je nejprve odstraněn kódem. Protože tento sloupec obsahuje cílovou proměnnou, předběžné zpracování není nutné.

Poté kód vytvoří dvě nové proměnné: „F“ a „t“. Vlastnosti jsou obsaženy v proměnné „F“, zatímco cílová proměnná je obsažena v proměnné „t“.

Data jsou poté distribuována do testovacích a tréninkových sad. Toho lze dosáhnout pomocí funkce tts() z balíčku sklearn.model_selection. Funkce, cílová proměnná, velikost testu a náhodný stav jsou čtyři argumenty, které funkce tts() vyžaduje. Parametr test_size určuje část dat, která se používá pro testovací účely. Protože je velikost testu v tomto případě nastavena na 0,2, bude pro test použito 20 % dat.

Volba random_state určuje zdroj generátoru náhodných čísel. To se provádí, aby bylo zajištěno, že data jsou oddělena náhodně. Tréninkové a testovací sady jsou nyní uloženy v proměnných F_training, F_testing, t_training a t_testing. Tyto sady lze použít k vyhodnocení a trénování modelů strojového učení.

Úryvek kódu:

# Krok 3: Načtěte soubor údajů o přijetí
std_admissions_data = panda_obj.read_csv( 'std_admission_dataset.csv' )

# Předzpracování dat a rozdělení na funkce (F) a cíl (t)
F = std_admissions_data.drop([ 'Admission_Status' ], osa= 1 )
t = std_admissions_data[ 'Admission_Status' ]

# Převod kategorických proměnných na číselné pomocí jednorázového kódování
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ázev experimentu MLflow

adm_experiment_name = 'Univerzitní_přijímací_experiment'
mlflow.set_experiment(název_experimentu_adm)

Krok 5: Definujte klasifikátor zesílení přechodu

Model klasifikátoru zesílení gradientu je nyní uložen v proměnné gbc_obj. Přijímací datový soubor lze použít k testování a trénování tohoto modelu. Hodnota argumentu random_state je 42. To zaručuje, že model je trénován pomocí přesně stejného zdroje generátoru náhodných čísel, díky kterému jsou výsledky opakovatelné.

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

Krok 6: Definujte mřížku hyperparametrů

Kód zpočátku vytvoří slovník param_grid. Hyperparametry, které se upravují pomocí vyhledávání v mřížce, jsou obsaženy v tomto slovníku. Slovník param_grid tvoří tři klíče: n_estimators, learning_rate a max_depth. Toto jsou hyperparametry modelu klasifikátoru zvyšujícího gradient. Počet stromů v modelu je určen hyperparametrem n_estimators. Rychlost učení modelu je specifikována pomocí hyperparametru learning_rate. Hyperparametr max_depth definuje nejvyšší možnou hloubku stromů modelu.

Úryvek kódu:

param_grid = {

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

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

'max_depth' :[ 4 , 5 , 6 ]

}

Krok 7: Proveďte vyhledávání v mřížce pomocí sledování MLflow

Kód pak iteruje přes slovník param_grid. Pro každou sadu hyperparametrů ve slovníku kód dělá následující:

  • Spustí nový běh MLflow
  • Převede hyperparametry na seznam, pokud ještě seznamem nejsou
  • Zaznamená hyperparametry do MLflow
  • Trénuje model vyhledávání v mřížce se zadanými hyperparametry
  • Získá nejlepší model z vyhledávání v mřížce
  • Vytváří předpovědi na testovacích datech fungujících jako nejlepší model
  • Vypočítá přesnost modelu
  • Vytiskne zprávu o hyperparametrech, přesnosti a klasifikaci
  • Zaznamená přesnost a model do MLflow

Úryvek kódu:

s warning.catch_warnings():
alert.filterwarnings( 'ignorovat' , category=UserWarning, module= '.*distutil.*' )
pro parametry v pg(param_grid):
s mlflow.start_run(run_name= 'Přihlášky_Spustit stav' ):
# Převod jednotlivých hodnot na seznamy
params = {klíč: [hodnota] 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)
tisk( 'Hyperparametry:' , parametry)
tisk( 'Přesnost:' , model_accuracy_score)
# Explicitně ignorujte UndefinedMetricWarning
s warning.catch_warnings():
alert.filterwarnings( 'ignorovat' , kategorie=Upozornění)
tisk( 'Hlášení o klasifikaci:' )
print(cr(t_testing, model_predictions, zero_division= 1 ))
mlflow.log_metric( 'přesnost' , model_accuracy_score)
mlflow.sklearn.log_model(std_best_model, 'gb_classifier_model' )

Krok 8: Spusťte program pomocí Pythonu

Zde je výstup na serveru MLflow:

Závěr

Nástroj pro vyhledávání mřížky MLflow automatizuje ladění, sledování výsledků a úpravu hyperparametrů v modelech strojového učení. Pomáhá určit ideální hyperparametry a zajišťuje spolehlivé výsledky, ale může být výpočetně nákladný pro rozsáhlé experimenty s hyperparametry.