Tinklelio paieška naudojant MLflow

Tinklelio Paieska Naudojant Mlflow



Mašininio mokymosi modelių hiperparametrai optimizuojami naudojant tinklelio paieškos metodą. Vartotojas gali greitai palyginti kelis hiperparametrų nustatymus ir rasti, kurie iš jų veikia geriausiai, nes MLflow seka tinklelio paieškos eksperimentų rezultatus. Naudojant MLflow tinklelio paieškos eksperimentą galima greitai bendrinti su kitais komandos nariais. Naudojant MLflow, galima įdiegti efektyviausią tinklelio paieškos eksperimento modelį.

Tinklelio paieškos pranašumai

  • Automatinis hiperparametrų derinimas: Tinklelio paieška automatizuoja hiperparametrų derinimą, kuris leidžia sistemingai tyrinėti be rankinių bandymų ir klaidų.
  • Atkuriamumas: tinklelio paieška užtikrina testo pagrįstumą, nes atkuriami atkuriami rezultatai, kurie pagerina ryšį ir patikimumą.
  • Išsami paieška: GS efektyviai randa optimalius modelio hiperparametrus, išsamiai ieškodama derinių.
  • Tvirtumas: Tinklelio paieška yra patikima technika, atspari duomenų triukšmui, o tai sumažina perteklinį pritaikymą.
  • Paprasta naudoti: Tinklelio paieška yra paprasta naudoti ir suprasti, todėl tai yra perspektyvus hiperparametrų derinimo metodas.
  • Modelių palyginimai: tinklelio paieška supaprastina modelių palyginimą ir vertinimo metrikos pasirinkimą.

Tinklelio paieškos trūkumai

  • Skaičiavimo kaina: Tinklelio paieška yra skaičiavimo požiūriu brangi, norint suderinti daug hiperparametrų.
  • Atima daug laiko: Sudėtingi hiperparametrų koregavimai užima daug laiko.
  • Ne visada būtina: Dabar tai visada reikalinga; atsitiktinė paieška yra geriausia alternatyva.

Pavyzdys: geriausių universitetų priėmimo sistemos modelio nustatymų paieška

Pažiūrėkime į tinklelio paieškos pavyzdį, skirtą hiperparametrų derinimui internetinėje universitetų priėmimo sistemoje. Šiame pavyzdyje naudojame scikit-learn ir paprastą Gradient Boosting Classifier (GBC) klasifikatorių, kad prognozuotume studento tikimybę būti priimtam į universitetą pagal tokius veiksnius kaip GPA taškai, SAT balai, ACT balai ir popamokinė veikla. Galimos kelios tinklelio paieškos parinktys, o ne GBC, įskaitant logistinę regresiją (LR), SVM (palaikymo vektorių mašiną) ir kt.

Sugeneruokite atsitiktinius internetinės priėmimo sistemos duomenis naudodami MLflow tinklelio paieškai

Python Pandas ir atsitiktiniai paketai gali būti naudojami kuriant fiktyvų priėmimo sistemos duomenų rinkinį. Naudojant atsitiktines APP_NO, GPA, SAT balo, ACT balo, Užklasinės veiklos ir Priėmimo būsenos stulpelių vertes, šis kodas generuoja sintetinį priėmimo duomenų rinkinį. Kintamasis skaičius_studentai valdo, kiek eilučių yra duomenų rinkinyje.







Priėmimo būsena nustatoma atsitiktinai, remiantis 70 % priėmimo rodikliu, o atsitiktinis modulis naudojamas kelių stulpelių atsitiktinėms reikšmėms generuoti. Demonstravimo tikslais ši kodo dalis sukuria netikrą priėmimo duomenų rinkinį su atsitiktinėmis reikšmėmis ir išsaugoma faile std_admission_dataset.csv:



Kodo fragmentas:



# Importuokite Panda ir Random bibliotekas
importuoti pandas kaip panda_obj
importuoti atsitiktinai kaip random_obj

# Nustatykite įrašų skaičių, kurį reikia generuoti mokinio duomenų rinkiniui
studentų_įrašai = 1000

# Sukurkite sąrašus duomenims saugoti
std_application_numbers = [ „APP-“ + str(random_obj.randint( 1000 , 9999 )) _ diapazone(studentų_rekordai)]
std_gpa = [round(random_obj.uniform( 2.5 , 4.0 ), 2 ) _ diapazone(studentų_rekordai)]
std_sat_scores = [atsitiktinis_obj.randint( 900 , 1600 ) _ diapazone(studentų_rekordai)]
std_act_scores = [atsitiktinis_obj.randint( dvidešimt , 36 ) _ diapazone(studentų_rekordai)]
std_extra_curriculars = [atsitiktinis_obj.choice([ 'taip' , 'ne' ]) _ diapazone(studentų_rekordai)]

# Apskaičiuokite priėmimo būseną pagal atsitiktinį priėmimo rodiklį
std_admission_status = [ 1 if random_obj.random() < 0.7 Kitas 0 _ diapazone(studentų_rekordai)]

# Sukurkite žodyną mokinio duomenims laikyti
std_data = {

„APPLICATION_NO“ : std_application_numbers,

'GPA' : std_gpa,

„SAT_Score“ : std_sat_scores,

„ACT_Score“ : std_act_scores,

'Papildoma veikla' : std_extra_curricuculars,

„Priėmimo_statusas“ : std_admission_status

}

# Sukurkite DataFrame DataFrame_Student iš žodyno
DataFrame_Student = panda_obj.DataFrame(std_data)

# Išsaugokite DataFrame DataFrame_Student į CSV failą pavadinimu std_admission_dataset.csv
DataFrame_Student.to_csv( „std_admission_dataset.csv“ , indeksas = false)
spausdinti ( 'Studentų duomenys sėkmingai eksportuoti į CSV failą!' )

Kodo vykdymas:

Naudokite Python komandą, kad sukurtumėte kodą, tada naudokite komandą pip, kad įdiegtumėte konkretų modulį, jei susiduriate su modulio klaida. Jei Python yra 3.X ar naujesnė versija, naudokite pip3 diegimo komandą, kad įdiegtumėte nurodytą biblioteką.





Sėkmingas vykdymas:



Pavyzdinių duomenų ekrano kopija:

1 veiksmas: importuokite bibliotekas

  • MLflow biblioteka, skirta mašininio mokymosi eksperimento stebėjimui
  • Pandas biblioteka, skirta duomenų apdorojimui ir analizei, taip pat mlflow.sklearn paketas, skirtas Scikit-Learn modeliams integruoti
  • Ketvirta eilutė importuoja „įspėjimų“ biblioteką, kad būtų pašalintos klaidos
  • ParameterGrid klasė tinklelio paieškai sklearn.model_selection modulyje
  • „GridSearchCV“ ir „GradientBoostingClassifier“ iš sklearn.model_selection ir „ensemble“, skirti tinklelio paieškai ir gradiento didinimo klasifikatorių modeliams
  • Accuracy_score ir classification_report funkcijos iš sklearn.metrics modulio, kad apskaičiuotų modelio tikslumą ir generuotų klasifikavimo ataskaitas
  • Kodas importuoja OS modulį ir nustato aplinkos kintamąjį GIT_PYTHON_REFRESH į tylų.

Kodo fragmentas:

# I žingsnis Importuokite reikalingas bibliotekas
importuoti mlflow
importuoti mlflow.sklearn
importuoti įspėjimus kaip įspėjimas
importuoti pandas kaip panda_obj
iš sklearn.model_selection importuoti train_test_split kaip tts, ParameterGrid kaip pg, GridSearchCV kaip gscv
importuoti mus
iš sklearn.ensemble importuoti GradientBoostingClassifier kaip GBC
iš sklearn.metrics importuoti accuracy_score kaip acs, klasifikacijos_ataskaita kaip cr
os.environ[ „GIT_PYTHON_REFRESH“ ] = 'tylus'

2 veiksmas: nustatykite stebėjimo URI

MLflow serverio stebėjimo URI nustatytas naudojant mlflow.set_tracking_uri() funkciją, užtikrinančią vietinį kompiuterį 5000 prievade eksperimentams ir modeliams.

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

3 veiksmas: įkelkite ir paruoškite priėmimo duomenų rinkinį

Importuokite Pandas biblioteką kaip panda_obj, kad galėtumėte apdoroti ir analizuoti duomenis. Funkcija read_csv() taikoma norint įkelti priėmimo duomenų rinkinį. Kelias į duomenų rinkinį yra vienintelis argumentas, kurio reikalauja funkcija read_csv(). Kelias į duomenų rinkinį šiuo atveju yra std_admission_dataset.csv. Naudojant funkciją read_csv(), duomenų rinkinys įkeliamas į Pandas DataFrame.

Stulpelis Admission_Status iš std_admissions_data DataFrame pirmiausia pašalinamas pagal kodą. Kadangi šiame stulpelyje yra tikslinis kintamasis, išankstinis apdorojimas nėra būtinas.

Tada kodas sukuria du naujus kintamuosius: „F“ ir „t“. Funkcijos yra „F“ kintamajame, o tikslinis kintamasis yra „t“ kintamajame.

Tada duomenys paskirstomi į testavimo ir mokymo rinkinius. Tai atliekama naudojant tts() funkciją iš sklearn.model_selection paketo. Funkcijos, tikslinis kintamasis, testo dydis ir atsitiktinė būsena yra keturi argumentai, kurių reikia funkcijai tts(). Parametras test_size nurodo duomenų dalį, kuri naudojama bandymo tikslais. Kadangi šiuo atveju testo dydis nustatytas į 0,2, testui bus naudojama 20 % duomenų.

Parinktis random_state nurodo atsitiktinių skaičių generatoriaus sėklą. Tai daroma siekiant užtikrinti, kad duomenys būtų atskirti atsitiktinai. Mokymo ir testavimo rinkiniai dabar saugomi kintamuosiuose F_training, F_testing, t_training ir t_testing. Šie rinkiniai gali būti naudojami mašininio mokymosi modeliams įvertinti ir mokyti.

Kodo fragmentas:

# 3 veiksmas: įkelkite priėmimo duomenų rinkinį
std_admissions_data = panda_obj.read_csv( „std_admission_dataset.csv“ )

# Iš anksto apdorokite duomenis ir suskirstykite į funkcijas (F) ir tikslą (t)
F = std_admissions_data.drop([ 'Priėmimo_statusas' ], ašis= 1 )
t = std_priėmimo_duomenys[ 'Priėmimo_statusas' ]

# Konvertuokite kategorinius kintamuosius į skaitinius naudodami vienkartinę kodavimą
F = panda_obj.get_dummies(F)
F_mokymas, F_testavimas, t_mokymas, t_testavimas = tts(F, t, test_size= 0.2 , atsitiktinė_būsena= 42 )

4 veiksmas: nustatykite MLflow eksperimento pavadinimą

adm_eksperimento_pavadinimas = 'Universitetas_stojimo_eksperimentas'
mlflow.set_experiment(adm_experiment_name)

5 veiksmas: apibrėžkite gradiento didinimo klasifikatorių

Gradiento didinimo klasifikatoriaus modelis dabar saugomas kintamajame gbc_obj. Priėmimo duomenų rinkinys gali būti naudojamas šiam modeliui išbandyti ir mokyti. Argumento random_state reikšmė yra 42. Tai garantuoja, kad modelis yra apmokytas naudojant tą pačią atsitiktinių skaičių generatoriaus sėklą, dėl kurios rezultatai yra pakartojami.

gbc_obj = GBC(atsitiktinė_būsena= 42 )

6 veiksmas: apibrėžkite hiperparametrų tinklelį

Kodas iš pradžių sukuria param_grid žodyną. Hiperparametrai, koreguojami naudojant tinklelio paiešką, yra šiame žodyne. Trys raktai sudaro param_grid žodyną: n_estimators, learning_rate ir max_depth. Tai yra gradiento didinimo klasifikatoriaus modelio hiperparametrai. Medžių skaičius modelyje nurodomas hiperparametru n_estimators. Modelio mokymosi greitis nurodomas per mokymosi greičio hiperparametrą. Hiperparametras max_depth apibrėžia didžiausią įmanomą modelio medžių gylį.

Kodo fragmentas:

param_grid = {

„n_estimators“ :[ 100 , 150 , 200 ],

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

„maksimalus_gylis“ :[ 4 , 5 , 6 ]

}

7 veiksmas: Atlikite tinklelio paiešką naudodami MLflow stebėjimą

Tada kodas kartojamas per param_grid žodyną. Kiekvienam žodyno hiperparametrų rinkiniui kodas atlieka šiuos veiksmus:

  • Pradeda naują MLflow paleidimą
  • Konvertuoja hiperparametrus į sąrašą, jei jie dar nėra sąrašo
  • Registruoja hiperparametrus į MLflow
  • Moko tinklelio paieškos modelį su nurodytais hiperparametrais
  • Gauna geriausią modelį iš tinklelio paieškos
  • Numato geriausio modelio testavimo duomenis
  • Skaičiuoja modelio tikslumą
  • Spausdina hiperparametrus, tikslumą ir klasifikavimo ataskaitą
  • Registruoja tikslumą ir modelį į MLflow

Kodo fragmentas:

su warn.catch_warnings():
warn.filterwarnings( 'ignoruoti' , category=Vartotojo įspėjimas, modulis= '.*distutil.*' )
parametrams pg(param_grid):
su mlflow.start_run(run_name= „Admissions_Status Run“ ):
# Konvertuokite atskiras reikšmes į sąrašus
params = {raktas: [reikšmė], jei ne isinstance(reikšmė, sąrašas) kita rakto reikšmė, reikšmė params.items()}
mlflow.log_params(params)
grid_search = gscv(gbc_obj, param_grid=params, cv= 5 )
grid_search.fit(F_treniruotė, t_treniruotė)
std_best_model = grid_search.best_estimator_
model_predictions = std_best_model.predict(F_testing)
model_accuracy_score = acs(t_testing, model_predictions)
spausdinti ( 'Hiperparametrai:' , parametrai)
spausdinti ( 'Tikslumas:' , model_accuracy_score)
# Aiškiai nepaisykite UndefinedMetricWarning
su warn.catch_warnings():
warn.filterwarnings( 'ignoruoti' , kategorija = įspėjimas)
spausdinti ( 'Klasifikavimo ataskaita:' )
print(cr(t_testing, model_predictions, zero_division= 1 ))
mlflow.log_metric( 'tikslumas' , model_accuracy_score)
mlflow.sklearn.log_model(std_best_model, 'gb_classifier_model' )

8 veiksmas: paleiskite programą naudodami Python

Štai išvestis MLflow serveryje:

Išvada

MLflow tinklelio paieškos įrankis automatizuoja koregavimą, rezultatų stebėjimą ir hiperparametrų modifikavimą mašininio mokymosi modeliuose. Tai padeda nustatyti idealius hiperparametrus ir užtikrina patikimus rezultatus, tačiau gali būti brangu atliekant didelius hiperparametrų eksperimentus.