Rácskeresés MLflow-val

Racskereses Mlflow Val



A gépi tanulási modellek hiperparamétereit a rácskeresési megközelítéssel optimalizálják. A felhasználó gyorsan összehasonlíthat több hiperparaméter-beállítást, és megtalálhatja, hogy melyik teljesít a legjobban, mivel az MLflow nyomon követi a rácskeresési kísérletek eredményeit. Az MLflow-ban a rácskeresési kísérlet gyorsan megosztható más csapattagokkal. Az MLflow használatával a rácskeresési kísérlet leghatékonyabb modellje telepíthető.

A rácskeresés előnyei

  • Automatikus hiperparaméter hangolás: A rácskeresés automatizálja a hiperparaméter-hangolást, amely lehetővé teszi a szisztematikus feltárást manuális próbálkozások és hibák nélkül.
  • Reprodukálhatóság: A rácskeresés biztosítja a teszt érvényességét azáltal, hogy reprodukálhatóan megkapja a reprodukálható eredményeket, ami javítja a kommunikációt és a megbízhatóságot.
  • Kimerítő keresés: A GS hatékonyan találja meg a modell optimális hiperparamétereit a kombinációk kimerítő keresésével.
  • Robusztusság: A rácskeresés egy robusztus technika, amely ellenáll az adatzajnak, ami csökkenti a túlillesztést.
  • Egyszerűen használható: A rácskeresés egyszerűen használható és áttekinthető, így életképes módszer a hiperparaméterek hangolására.
  • Modell-összehasonlítások: A rácskeresés leegyszerűsíti a modell-összehasonlítást és az értékelési metrikák kiválasztását.

A Grid Search hátrányai

  • Számítási költség: A rácskeresés számításilag költséges nagyszámú hiperparaméter hangolásához.
  • Időigényes: Az összetett hiperparaméter-beállítások időigényesek.
  • Nem mindig szükséges: Most már mindig szükséges; A véletlenszerű keresés a legjobb alternatíva.

Példa: Az egyetemi felvételi rendszer legjobb modellbeállításainak megkeresése

Nézzünk meg egy rácskeresési példát a hiperparaméterek hangolására egy online egyetemi felvételi rendszer keretein belül. Ebben a példában a scikit-learn és az egyszerű Gradient Boosting Classifier (GBC) osztályozót használjuk annak előrejelzésére, hogy a hallgató milyen valószínűséggel kerül felvételre az egyetemre olyan tényezők alapján, mint a GPA-pontok, a SAT-pontszámok, az ACT-pontszámok és a tanórán kívüli tevékenységek. A GBC helyett több lehetőség is rendelkezésre áll a rácskereséshez, beleértve a logisztikai regressziót (LR), az SVM-et (Support Vector Machine) stb.

Véletlenszerű adatokat generál az online felvételi rendszerhez az MLflow segítségével a rácskereséshez

A Python Pandái és véletlenszerű csomagjai használhatók fiktív adatkészlet létrehozására a felvételi rendszer számára. Az APP_NO, a GPA, a SAT pontszám, az ACT pontszám, a tanórán kívüli tevékenységek és a felvételi állapot oszlopok véletlenszerű értékeivel ez a kód szintetikus felvételi adatkészletet generál. A num_students változó szabályozza, hogy hány sor legyen az adatkészletben.







A felvételi státusz véletlenszerűen van beállítva 70%-os elfogadási arány alapján, és a véletlenszerű modul segítségével véletlenszerű értékeket állítanak elő több oszlophoz. Demonstrációs célból a következő kódrészlet véletlenszerű értékekkel hamis belépési adatkészletet hoz létre, és elmenti az std_admission_dataset.csv fájlba:



Kódrészlet:



# Importálja a Panda és a Random könyvtárakat
importáljon pandákat panda_obj néven
véletlenszerű importálás random_obj néven

# Állítsa be a létrehozandó tanulói adatkészlet rekordjainak számát
tanulók_rekordjai = 1000

# Hozzon létre listákat az adatok tárolására
std_application_numbers = [ 'APP-' + str(random_obj.randint( 1000 , 9999 )) for _ in range(students_records)]
std_gpa = [round(random_obj.uniform( 2.5 , 4.0 ), 2 ) for _ in range(students_records)]
std_sat_scores = [random_obj.randint( 900 , 1600 ) for _ in range(students_records)]
std_act_scores = [random_obj.randint( húsz , 36 ) for _ in range(students_records)]
std_extra_curriculars = [random_obj.choice([ 'Igen' , 'Nem' ]) for _ in range(students_records)]

# Számítsa ki a felvételi állapotot a véletlenszerű elfogadási arány alapján
std_admission_status = [ 1 if random_obj.random() < 0.7 más 0 for _ in range(students_records)]

# Hozzon létre egy szótárt a tanulói adatok tárolására
std_data = {

„APPLICATION_NO” : std_application_numbers,

'GPA' : std_gpa,

'SAT_Score' : std_sat_scores,

'ACT_Score' : std_act_scores,

'Tanórán kívüli tevékenységek' : std_extra_curriculars,

'Felvételi_státusz' : std_admission_status

}

# Hozzon létre egy DataFrame DataFrame_Student-et a szótárból
DataFrame_Student = panda_obj.DataFrame(std_data)

# Mentse a DataFrame DataFrame_Student egy std_admission_dataset.csv nevű CSV-fájlba
DataFrame_Student.to_csv( 'std_admission_dataset.csv' , index=hamis)
nyomtatás( 'A tanulói adatok sikeresen exportálhatók CSV-fájlba!' )

Kód végrehajtása:

A Python paranccsal fordítsa le a kódot, majd a pip paranccsal telepítsen egy adott modult, ha modulhibát észlel. Használja a pip3 install parancsot az adott könyvtár telepítéséhez, ha a Python 3.X vagy magasabb verziójú.





Sikeres végrehajtás:



Mintaadatok képernyőképe:

1. lépés: Importálja a könyvtárakat

  • Az MLflow könyvtár a gépi tanulási kísérletek nyomon követéséhez
  • A Pandas könyvtár az adatfeldolgozás és -elemzés kezeléséhez, valamint az mlflow.sklearn csomag a Scikit-Learn modellek integrálásához
  • A negyedik sor a „figyelmeztetések” könyvtárat importálja, hogy elnyomja a hibákat
  • A ParameterGrid osztály rácskereséshez a sklearn.model_selection modulban
  • GridSearchCV és GradientBoostingClassifier a sklearn.model_selection és ensemble oldalról a rácskereséshez és a gradiensnövelő osztályozó modellekhez
  • Az accuracy_score és classification_report függvények a sklearn.metrics modulból a modell pontosságának kiszámításához és osztályozási jelentések generálásához
  • A kód importálja az operációs rendszer modult, és csendesre állítja a GIT_PYTHON_REFRESH környezeti változót.

Kódrészlet:

# I. lépés: Importálja a szükséges könyvtárakat
import mlflow
import mlflow.sklearn
figyelmeztetések importálása figyelmeztetés szerint
importáljon pandákat panda_obj néven
innen: sklearn.model_selection import train_test_split mint tts, ParameterGrid mint pg, GridSearchCV mint gscv
importálni minket
a sklearn.ensemble-ből importálja a GradientBoostingClassifier-t GBC-ként
innen: sklearn.metrics import accuracy_score mint acs, classification_report mint cr
os.environ[ 'GIT_PYTHON_REFRESH' ] = 'csendes'

2. lépés: Állítsa be a nyomkövetési URI-t

Az MLflow szerver nyomkövetési URI-jét az mlflow.set_tracking_uri() függvény segítségével állítjuk be, biztosítva a helyi gépet az 5000-es porton a kísérletekhez és a modellekhez.

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

3. lépés: Töltse be és készítse elő a felvételi adatkészletet

Importálja a Pandas könyvtárat panda_obj néven az adatok kezeléséhez és elemzéséhez. A read_csv() függvényt alkalmazza a belépési adatkészlet betöltésére. Az adatkészlet elérési útja az egyetlen argumentum, amelyre a read_csv() függvénynek szüksége van. Az adatkészlet elérési útja ebben a példányban a std_admission_dataset.csv. A read_csv() függvény használatával az adatkészlet betöltődik egy Pandas DataFrame-be.

A kód először eltávolítja az Admission_Status oszlopot az std_admissions_data DataFrame-ből. Mivel ez az oszlop tartalmazza a célváltozót, nincs szükség előfeldolgozásra.

Ezután a kód két új változót hoz létre: „F” és „t”. A jellemzőket az „F” változó, míg a célváltozót a „t” változó tartalmazza.

Az adatokat ezután tesztelési és képzési készletekbe osztják fel. Ez a sklearn.model_selection csomag tts() függvényével érhető el. A jellemzők, a célváltozó, a tesztméret és a véletlenszerű állapot az a négy argumentum, amelyekre a tts() függvénynek szüksége van. A test_size paraméter meghatározza az adatok tesztcélokra felhasznált részét. Mivel a teszt mérete ebben az esetben 0,2, az adatok 20%-a lesz felhasználva a teszthez.

A random_state beállítás megadja a véletlenszám-generátor magját. Ez azért történik, hogy az adatok véletlenszerűen legyenek szétválasztva. A képzési és tesztelési készletek most az F_training, F_testing, t_training és t_testing változókban vannak tárolva. Ezek a készletek a gépi tanulási modellek értékelésére és betanítására használhatók.

Kódrészlet:

# 3. lépés: Töltse be a felvételi adatkészletet
std_admissions_data = panda_obj.read_csv( 'std_admission_dataset.csv' )

# Az adatok előfeldolgozása és felosztása jellemzőkre (F) és célpontokra (t)
F = std_admissions_data.drop([ 'Felvételi_státusz' ], tengely= 1 )
t = std_felvételi_adatok[ 'Felvételi_státusz' ]

# Konvertálja a kategorikus változókat numerikussá egy gyors kódolással
F = panda_obj.get_dummies(F)
F_képzés, F_tesztelés, t_képzés, t_teszt = tts(F, t, teszt_méret= 0.2 , random_state= 42 )

4. lépés: Állítsa be az MLflow kísérlet nevét

adm_experiment_name = 'Egyetemi_felvételi_kísérlet'
mlflow.set_experiment(adm_experiment_name)

5. lépés: Határozza meg a Gradient Boosting Classifier-t

A gradiensnövelő osztályozó modell most a gbc_obj változóban van tárolva. A felvételi adatkészlet felhasználható ennek a modellnek a tesztelésére és betanítására. A random_state argumentum értéke 42. Ez garantálja, hogy a modell pontosan ugyanazt a véletlenszám-generátor magját használja, amely megismételhetővé teszi az eredményeket.

gbc_obj = GBC(random_state= 42 )

6. lépés: Határozza meg a hiperparaméter-rácsot

A kód először létrehozza a param_grid szótárt. A rácskereséssel beállított hiperparamétereket ez a szótár tartalmazza. Három kulcs alkotja a param_grid szótárat: n_estimators, learning_rate és max_depth. Ezek a gradiensnövelő osztályozó modell hiperparaméterei. A modellben lévő fák számát az n_estimators hiperparaméter határozza meg. A modell tanulási sebességét a learning_rate hiperparaméter határozza meg. A max_depth hiperparaméter határozza meg a modell fáinak lehető legnagyobb mélységét.

Kódrészlet:

param_grid = {

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

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

'maximális mélység' :[ 4 , 5 , 6 ]

}

7. lépés: Végezze el a rácskeresést az MLflow Tracking segítségével

A kód ezután ismétlődik a param_grid szótárban. A szótárban található minden egyes hiperparaméter-készlet esetében a kód a következőket teszi:

  • Új MLflow futtatást indít el
  • Listává alakítja a hiperparamétereket, ha még nem listák
  • Naplózza a hiperparamétereket az MLflow-ba
  • Betanít egy rácskeresési modellt a megadott hiperparaméterekkel
  • Lekéri a legjobb modellt a rácskeresésből
  • Előrejelzéseket készít a legjobb modellben működő tesztelési adatokról
  • Kiszámítja a modell pontosságát
  • Kinyomtatja a hiperparamétereket, a pontosságot és az osztályozási jelentést
  • Naplózza a pontosságot és a modellt az MLflow-ba

Kódrészlet:

with warn.catch_warnings():
warn.filterwarnings( 'figyelmen kívül hagyni' , category=UserWarning, modul= '.*distutil.*' )
paraméterekhez a pg(param_grid):
az mlflow.start_run(run_name= 'Admissions_Status Run' ):
# Konvertálja az egyes értékeket listákká
params = {kulcs: [érték], ha nem isinstance(érték, lista) else értéke a kulcshoz, értéke a params.items()-ben}
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)
nyomtatás( 'Hiperparaméterek:' , paraméterek)
nyomtatás( 'Pontosság:' , model_accuracy_score)
# Az UndefinedMetricWarning kifejezetten figyelmen kívül hagyása
with warn.catch_warnings():
warn.filterwarnings( 'figyelmen kívül hagyni' , category=Figyelmeztetés)
nyomtatás( 'Osztályozási jelentés:' )
print(cr(t_testing, model_predictions, zero_division= 1 ))
mlflow.log_metric( 'pontosság' , model_accuracy_score)
mlflow.sklearn.log_model(std_best_model, 'gb_classifier_model' )

8. lépés: Futtassa a programot Python használatával

Íme a kimenet az MLflow szerveren:

Következtetés

Az MLflow rácskereső eszköze automatizálja a módosítást, az eredmények nyomon követését és a hiperparaméterek módosítását a gépi tanulási modellekben. Segít meghatározni az ideális hiperparamétereket és biztosítja a megbízható eredményeket, de számításilag költséges lehet kiterjedt hiperparaméteres kísérleteknél.