Režģa meklēšana ar MLflow

Rezga Meklesana Ar Mlflow



Mašīnmācīšanās modeļu hiperparametri tiek optimizēti, izmantojot režģa meklēšanas pieeju. Lietotājs var ātri salīdzināt vairākus hiperparametru iestatījumus un atrast, kuri no tiem darbojas vislabāk, jo MLflow seko režģa meklēšanas eksperimentu rezultātiem. Programmā MLflow režģa meklēšanas eksperimentu var ātri koplietot ar citiem komandas dalībniekiem. Izmantojot MLflow, var izvietot visefektīvāko modeli no režģa meklēšanas eksperimenta.

Režģa meklēšanas priekšrocības

  • Automātiskā hiperparametru regulēšana: Režģa meklēšana automatizē hiperparametru regulēšanu, kas ļauj veikt sistemātisku izpēti bez manuālas izmēģinājuma un kļūdas.
  • Reproducējamība: režģa meklēšana nodrošina testa derīgumu, reproducējami iegūstot reproducējamus rezultātus, kas uzlabo saziņu un uzticamību.
  • Pilnīga meklēšana: GS efektīvi atrod optimālos hiperparametrus modelim, izsmeļoši meklējot kombinācijas.
  • Izturība: Režģa meklēšana ir stabils paņēmiens, kas ir izturīgs pret datu troksni, kas samazina pārmērīgu pielāgošanu.
  • Vienkārši lietojams: Režģa meklēšana ir vienkārši lietojama un saprotama, kas padara to par dzīvotspējīgu metodi hiperparametru regulēšanai.
  • Modeļu salīdzinājumi: režģa meklēšana vienkāršo modeļu salīdzināšanu un novērtēšanas metrikas izvēli.

Režģa meklēšanas trūkumi

  • Aprēķinu izmaksas: Režģa meklēšana ir skaitļošanas ziņā dārga, lai pielāgotu lielu skaitu hiperparametru.
  • Laikietilpīgs: Sarežģīta hiperparametru pielāgošana ir laikietilpīga.
  • Ne vienmēr nepieciešams: Tagad tas vienmēr ir vajadzīgs; izlases veida meklēšana ir labākā alternatīva tai.

Piemērs: labāko modeļa iestatījumu atrašana universitātes uzņemšanas sistēmai

Apskatīsim režģa meklēšanas piemēru hiperparametru regulēšanai tiešsaistes universitāšu uzņemšanas sistēmas ietvaros. Šajā piemērā mēs izmantojam scikit-learn un vienkāršu Gradient Boosting Classifier (GBC) klasifikatoru, lai prognozētu studenta iespējamību tikt uzņemtam universitātē, pamatojoties uz tādiem faktoriem kā GPA punkti, SAT rādītāji, ACT rezultāti un ārpusstundu aktivitātes. Režģa meklēšanai GBC vietā ir pieejamas vairākas opcijas, tostarp loģistikas regresijas (LR), SVM (atbalsta vektora mašīna) utt.

Ģenerējiet izlases datus tiešsaistes uzņemšanas sistēmai, izmantojot MLflow režģa meklēšanai

Python Pandas un izlases pakotnes var izmantot, lai izveidotu fiktīvu datu kopu uzņemšanas sistēmai. Ar nejaušām vērtībām kolonnām APP_NO, GPA, SAT Score, ACT Score, Extracurricular Activity un Uzņemšanas statuss, šis kods ģenerē sintētisku uzņemšanas datu kopu. Mainīgais num_students nosaka, cik rindu ir datu kopā.







Pieņemšanas statuss tiek nejauši iestatīts, pamatojoties uz 70% pieņemšanas līmeni, un izlases modulis tiek izmantots, lai iegūtu izlases vērtības vairākām kolonnām. Demonstrācijas nolūkos tālāk norādītā koda daļa izveido viltotu uzņemšanas datu kopu ar nejaušām vērtībām un tiek saglabāta failā std_admission_dataset.csv:



Koda fragments:



# Importējiet Panda un Random bibliotēkas
importēt pandas kā panda_obj
importēt nejauši kā random_obj

# Iestatiet ģenerējamo studentu datu kopas ierakstu skaitu
studentu_ieraksti = 1000

# Izveidojiet sarakstus datu glabāšanai
std_application_numbers = [ 'APP-' + str(random_obj.randint( 1000 , 9999 )) _ diapazonā(studentu_rekordi)]
std_gpa = [round(random_obj.uniform( 2.5 , 4.0 ), 2 ) _ diapazonā(studentu_rekordi)]
std_sat_scores = [random_obj.randint( 900 , 1600 ) _ diapazonā(studentu_rekordi)]
std_act_scores = [random_obj.randint( divdesmit , 36 ) _ diapazonā(studentu_rekordi)]
std_extra_curriculars = [random_obj.choice([ 'Jā' , 'Nē' ]) _ diapazonā(studentu_rekordi)]

# Aprēķiniet uzņemšanas statusu, pamatojoties uz nejaušu pieņemšanas līmeni
std_admission_status = [ 1 if random_obj.random() < 0.7 cits 0 _ diapazonā(studentu_rekordi)]

# Izveidojiet vārdnīcu studentu datu glabāšanai
std_data = {

'APPLICATION_NO' : std_application_numbers,

'GPA' : std_gpa,

'SAT_Score' : std_sat_scores,

'ACT_Score' : std_act_scores,

'Ārpusklases pasākumi' : std_extra_curricuculars,

'Ieņemšanas_statuss' : std_admission_status

}

# Izveidojiet DataFrame DataFrame_Student no vārdnīcas
DataFrame_Student = panda_obj.DataFrame(std_data)

# Saglabājiet DataFrame DataFrame_Student CSV failā ar nosaukumu std_admission_dataset.csv
DataFrame_Student.to_csv( 'std_admission_dataset.csv' , indekss = False)
drukāt ( 'Studentu dati veiksmīgi eksportēti uz CSV failu!' )

Koda izpilde:

Izmantojiet komandu Python, lai apkopotu kodu, pēc tam izmantojiet komandu pip, lai instalētu konkrētu moduli, ja rodas moduļa kļūda. Izmantojiet pip3 instalēšanas komandu, lai instalētu norādīto bibliotēku, ja Python ir versija 3.X vai jaunāka.





Veiksmīga izpilde:



Ekrānuzņēmuma datu paraugs:

1. darbība. Importējiet bibliotēkas

  • MLflow bibliotēka mašīnmācīšanās eksperimentu izsekošanai
  • Pandas bibliotēka datu apstrādei un analīzei, kā arī mlflow.sklearn pakotne Scikit-Learn modeļu integrēšanai
  • Ceturtajā rindā tiek importēta “brīdinājumu” bibliotēka, lai novērstu kļūdas
  • ParameterGrid klase režģa meklēšanai modulī sklearn.model_selection
  • GridSearchCV un GradientBoostingClassifier no sklearn.model_selection un ensemble attiecīgi režģa meklēšanas un gradienta pastiprināšanas klasifikatoru modeļiem
  • Funkcijas accuracy_score un classification_report no moduļa sklearn.metrics, lai aprēķinātu modeļa precizitāti un ģenerētu klasifikācijas pārskatus.
  • Kods importē OS moduli un iestata vides mainīgo GIT_PYTHON_REFRESH uz klusu.

Koda fragments:

# I solis Importēt nepieciešamās bibliotēkas
importēt mlflow
importēt mlflow.sklearn
importēt brīdinājumus kā brīdināt
importēt pandas kā panda_obj
no sklearn.model_selection importēt train_test_split kā tts, ParameterGrid kā pg, GridSearchCV kā gscv
importēt mūs
no sklearn.ensemble importējiet GradientBoostingClassifier kā GBC
no sklearn.metrics importēt accuracy_score kā acs, classification_report kā cr
os.environ[ 'GIT_PYTHON_REFRESH' ] = 'kluss'

2. darbība: iestatiet izsekošanas URI

MLflow servera izsekošanas URI tiek iestatīts, izmantojot funkciju mlflow.set_tracking_uri(), nodrošinot eksperimentiem un modeļiem vietējo mašīnu portā 5000.

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

3. darbība: ielādējiet un sagatavojiet uzņemšanas datu kopu

Importējiet Pandas bibliotēku kā panda_obj datu manipulēšanai un analīzei. Funkcija read_csv() tiek lietota, lai ielādētu uzņemšanas datu kopu. Ceļš uz datu kopu ir vienīgais arguments, kas nepieciešams funkcijai read_csv(). Ceļš uz datu kopu šajā gadījumā ir std_admission_dataset.csv. Izmantojot funkciju read_csv(), datu kopa tiek ielādēta Pandas DataFrame.

Kolonna Admission_Status no std_admissions_data DataFrame vispirms tiek noņemta ar kodu. Tā kā šajā kolonnā ir mērķa mainīgais, priekšapstrāde nav nepieciešama.

Pēc tam kods izveido divus jaunus mainīgos: “F” un “t”. Funkcijas ir ietvertas mainīgajā “F”, savukārt mērķa mainīgais ir ietverts mainīgajā “t”.

Pēc tam dati tiek sadalīti testēšanas un apmācības komplektos. Tas tiek paveikts, izmantojot funkciju tts() no sklearn.model_selection pakotnes. Funkcijas, mērķa mainīgais, testa lielums un nejaušais stāvoklis ir četri argumenti, kas nepieciešami funkcijai tts(). Parametrs test_size nosaka datu daļu, kas tiek izmantota pārbaudes nolūkiem. Tā kā testa lielums šajā gadījumā ir iestatīts uz 0,2, pārbaudei tiks izmantoti 20% datu.

Opcija random_state norāda nejaušo skaitļu ģeneratora sēklu. Tas tiek darīts, lai nodrošinātu, ka dati tiek atdalīti nejauši. Apmācības un testēšanas komplekti tagad tiek saglabāti mainīgajos F_training, F_testing, t_training un t_testing. Šīs kopas var izmantot, lai novērtētu un apmācītu mašīnmācīšanās modeļus.

Koda fragments:

# 3. darbība: ielādējiet uzņemšanas datu kopu
std_admissions_data = panda_obj.read_csv( 'std_admission_dataset.csv' )

# Iepriekš apstrādājiet datus un sadaliet tos objektos (F) un mērķī (t)
F = std_admissions_data.drop([ 'Ieņemšanas_statuss' ], ass= 1 )
t = std_pieņemšanas_dati[ 'Ieņemšanas_statuss' ]

# Konvertējiet kategoriskos mainīgos uz skaitliskiem, izmantojot vienreizēju kodējumu
F = panda_obj.get_dummies(F)
F_apmācība, F_testēšana, t_apmācība, t_testēšana = tts(F, t, testa_izmērs= 0.2 , random_state= 42 )

4. darbība: iestatiet MLflow eksperimenta nosaukumu

adm_eksperimenta_nosaukums = 'Universitātes_uzņemšanas_eksperiments'
mlflow.set_experiment(adm_experiment_name)

5. darbība: definējiet gradienta pastiprināšanas klasifikatoru

Gradienta paaugstināšanas klasifikatora modelis tagad tiek saglabāts mainīgajā gbc_obj. Uzņemšanas datu kopu var izmantot, lai pārbaudītu un apmācītu šo modeli. Argumenta random_state vērtība ir 42. Tas garantē, ka modelis tiek apmācīts, izmantojot tieši to pašu nejaušo skaitļu ģeneratora sēklu, kas padara rezultātus atkārtojamus.

gbc_obj = GBC(gadījuma_stāvoklis= 42 )

6. darbība: definējiet hiperparametru režģi

Sākotnēji kods izveido vārdnīcu param_grid. Hiperparametri, kas tiek pielāgoti, izmantojot režģa meklēšanu, ir ietverti šajā vārdnīcā. Param_grid vārdnīcu veido trīs atslēgas: n_estimators, learning_rate un max_depth. Šie ir gradientu paaugstinošā klasifikatora modeļa hiperparametri. Koku skaitu modelī nosaka hiperparametrs n_estimators. Modeļa mācīšanās ātrums tiek norādīts, izmantojot hiperparametru learning_rate. Hiperparametrs max_depth nosaka lielāko iespējamo modeļa koku dziļumu.

Koda fragments:

param_grid = {

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

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

'max_depth' :[ 4 , 5 , 6 ]

}

7. darbība: Veiciet režģa meklēšanu, izmantojot MLflow izsekošanu

Pēc tam kods atkārtojas vārdnīcā param_grid. Katrai hiperparametru kopai vārdnīcā kods veic šādas darbības:

  • Sāk jaunu MLflow palaišanu
  • Pārvērš hiperparametrus par sarakstu, ja tie vēl nav saraksts
  • Reģistrē hiperparametrus MLflow
  • Apmāca režģa meklēšanas modeli ar norādītajiem hiperparametriem
  • Iegūst labāko modeli no režģa meklēšanas
  • Izdara prognozes par testēšanas datiem, kas darbojas vislabākajā modelī
  • Aprēķina modeļa precizitāti
  • Drukā hiperparametrus, precizitāti un klasifikācijas atskaiti
  • Reģistrē precizitāti un modeli MLflow

Koda fragments:

ar warn.catch_warnings():
warn.filterwarnings( 'ignorēt' , category=UserWarning, module= '.*distutils.*' )
parametriem pg(param_grid):
ar mlflow.start_run(run_name= 'Admissions_Status Run' ):
# Konvertējiet atsevišķas vērtības sarakstos
params = {atslēga: [vērtība] ja nav isinstance(vērtība, saraksts) cits atslēgas vērtība, vērtība 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_testēšana, modeļa_prognozes)
drukāt ( 'Hiperparametri:' , parametri)
drukāt ( 'Precizitāte:' , model_accuracy_score)
# Skaidri ignorējiet UndefinedMetricWarning
ar warn.catch_warnings():
warn.filterwarnings( 'ignorēt' , kategorija = Brīdinājums)
drukāt ( 'Klasifikācijas ziņojums:' )
print(cr(t_testing, model_predictions, nulles_division= 1 ))
mlflow.log_metric( 'precizitāte' , model_accuracy_score)
mlflow.sklearn.log_model(std_best_model, 'gb_classifier_model' )

8. darbība: izpildiet programmu, izmantojot Python

Šeit ir izvade MLflow serverī:

Secinājums

MLflow režģa meklēšanas rīks automatizē pielāgošanu, rezultātu izsekošanu un hiperparametru modificēšanu mašīnmācīšanās modeļos. Tas palīdz noteikt ideālos hiperparametrus un nodrošina ticamus rezultātus, bet var būt skaitļošanas ziņā dārgi plašiem hiperparametru eksperimentiem.