Carian Grid dengan MLflow

Carian Grid Dengan Mlflow



Hiperparameter dalam model pembelajaran mesin dioptimumkan menggunakan pendekatan carian grid. Pengguna boleh membandingkan berbilang tetapan hiperparameter dengan pantas dan mencari mana yang berprestasi terbaik kerana MLflow menjejaki hasil percubaan carian grid. Dalam MLflow, percubaan carian grid boleh dikongsi dengan ahli pasukan lain dengan cepat. Menggunakan MLflow, model paling berkesan daripada percubaan carian grid boleh digunakan.

Faedah Carian Grid

  • Penalaan Hiperparameter Automatik: Carian grid mengautomasikan penalaan hiperparameter yang membolehkan penerokaan sistematik tanpa percubaan dan ralat manual.
  • Kebolehulangan: Carian grid memastikan kesahan ujian dengan memperoleh semula hasil yang boleh dihasilkan semula yang meningkatkan komunikasi dan kebolehpercayaan.
  • Carian Lengkap: GS cekap mencari hiperparameter optimum untuk model dengan mencari gabungan secara menyeluruh.
  • Kekukuhan: Carian grid ialah teknik teguh yang tahan terhadap hingar data yang mengurangkan overfitting.
  • Mudah digunakan: Carian grid mudah digunakan dan difahami yang menjadikannya kaedah yang berdaya maju untuk penalaan hiperparameter.
  • Perbandingan Model: Carian grid memudahkan perbandingan model dan pemilihan metrik penilaian.

Kelemahan Carian Grid

  • Kos pengiraan: Carian grid adalah mahal dari segi pengiraan untuk menala sejumlah besar hiperparameter.
  • Mengambil masa: Ia memakan masa untuk pelarasan hiperparameter yang kompleks.
  • Tidak semestinya perlu: Ia kini sentiasa diperlukan; carian rawak adalah alternatif terbaik untuknya.

Contoh: Mencari Tetapan Model Terbaik untuk Sistem Kemasukan Universiti

Mari lihat contoh carian grid untuk penalaan hiperparameter dalam rangka kerja sistem kemasukan universiti dalam talian. Dalam contoh ini, kami menggunakan pengelas scikit-learn dan Gradient Boosting Classifier (GBC) yang mudah untuk meramalkan kemungkinan pelajar diterima ke universiti berdasarkan faktor seperti mata GPA, skor SAT, skor ACT dan aktiviti kokurikulum. Pelbagai pilihan tersedia untuk carian grid dan bukannya GBC termasuk Regresi Logistik (LR), SVM (Mesin Vektor Sokongan), dsb.

Hasilkan Data Rawak untuk Sistem Kemasukan Dalam Talian Menggunakan MLflow untuk Carian Grid

Panda Python dan pakej rawak boleh digunakan untuk mencipta set data rekaan untuk sistem kemasukan. Dengan nilai rawak untuk lajur APP_NO, GPA, SAT Score, ACT Score, Aktiviti Ekstrakurikuler dan Status Kemasukan, kod ini menjana set data kemasukan sintetik. Pembolehubah num_students mengawal bilangan baris yang terdapat dalam set data.







Status kemasukan ditetapkan secara rawak berdasarkan kadar penerimaan 70%, dan modul rawak digunakan untuk menghasilkan nilai rawak untuk beberapa lajur. Untuk tujuan demonstrasi, sekeping kod berikut mencipta set data kemasukan palsu dengan nilai rawak dan disimpan ke fail std_admission_dataset.csv:



Coretan Kod:



# Import perpustakaan Panda dan Rawak
import panda sebagai panda_obj
import rawak sebagai random_obj

# Tetapkan bilangan rekod untuk set data pelajar untuk dijana
rekod_pelajar = 1000

# Buat senarai untuk menyimpan data
std_application_numbers = [ 'APLIKASI-' + str(random_obj.randint( 1000 , 9999 )) untuk _ dalam julat(rekod_pelajar)]
std_gpa = [bulat(random_obj.uniform( 2.5 , 4.0 ), 2 ) untuk _ dalam julat(rekod_pelajar)]
std_sat_scores = [random_obj.randint( 900 , 1600 ) untuk _ dalam julat(rekod_pelajar)]
std_act_scores = [random_obj.randint( dua puluh , 36 ) untuk _ dalam julat(rekod_pelajar)]
std_extra_curriculars = [random_obj.choice([ 'Ya' , 'Tidak' ]) untuk _ dalam julat(rekod_pelajar)]

# Kira status kemasukan berdasarkan kadar penerimaan rawak
std_admission_status = [ 1 jika random_obj.random() < 0.7 lain 0 untuk _ dalam julat(rekod_pelajar)]

# Buat kamus untuk menyimpan data pelajar
std_data = {

'APPLICATION_NO' : std_application_numbers,

'GPA' : std_gpa,

'SAT_Score' : skor_std_sat,

'ACT_Score' : std_act_scores,

'Aktiviti ko-kurikulum' : std_extra_curriculars,

'Status_Penerimaan' : std_admission_status

}

# Buat DataFrame DataFrame_Student daripada kamus
DataFrame_Student = panda_obj.DataFrame(std_data)

# Simpan DataFrame DataFrame_Student ke fail CSV bernama std_admission_dataset.csv
DataFrame_Student.to_csv( 'std_admission_dataset.csv' , indeks=Salah)
cetak( 'Data Pelajar Berjaya Mengeksport ke Fail CSV!' )

Pelaksanaan Kod:

Gunakan arahan Python untuk menyusun kod, kemudian gunakan arahan pip untuk memasang modul tertentu jika anda menghadapi ralat modul. Gunakan arahan pemasangan pip3 untuk memasang pustaka yang diberikan jika Python adalah versi 3.X atau lebih tinggi.





Perlaksanaan yang Berjaya:



Contoh Tangkapan Skrin Data:

Langkah 1: Import Perpustakaan

  • Pustaka MLflow untuk penjejakan percubaan pembelajaran mesin
  • Pustaka Pandas untuk mengendalikan pemprosesan dan analisis data, serta pakej mlflow.sklearn untuk menyepadukan model Scikit-Learn
  • Baris keempat mengimport perpustakaan 'amaran' untuk menyekat ralat
  • Kelas ParameterGrid untuk carian grid dalam modul sklearn.model_selection
  • GridSearchCV dan GradientBoostingClassifier daripada sklearn.model_selection dan ensemble, masing-masing, untuk carian grid dan model pengelas peningkatan kecerunan
  • The accuracy_score dan classification_report berfungsi daripada modul sklearn.metrics untuk mengira ketepatan model dan menjana laporan pengelasan
  • Kod mengimport modul OS dan menetapkan pembolehubah persekitaran GIT_PYTHON_REFRESH kepada senyap.

Coretan Kod:

# Langkah-I Import Perpustakaan Diperlukan
import mlflow
import mlflow.sklearn
amaran import sebagai amaran
import panda sebagai panda_obj
daripada sklearn.model_selection import train_test_split sebagai tts, ParameterGrid sebagai pg, GridSearchCV sebagai gscv
import kami
daripada sklearn.ensemble import GradientBoostingClassifier sebagai GBC
daripada sklearn.metrics import accuracy_score sebagai acs, classification_report sebagai cr
os.environ[ 'GIT_PYTHON_REFRESH' ] = 'senyap'

Langkah 2: Tetapkan URI Penjejakan

URI penjejakan pelayan MLflow ditetapkan menggunakan fungsi mlflow.set_tracking_uri(), memastikan mesin setempat pada port 5000 untuk eksperimen dan model.

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

Langkah 3: Muatkan dan Sediakan Set Data Kemasukan

Import pustaka Pandas sebagai panda_obj untuk manipulasi dan analisis data. Fungsi read_csv() digunakan untuk memuatkan set data kemasukan. Laluan ke set data ialah satu-satunya hujah yang diperlukan oleh fungsi read_csv(). Laluan ke set data dalam contoh ini ialah std_admission_dataset.csv. Dengan menggunakan fungsi read_csv(), set data dimuatkan ke dalam Pandas DataFrame.

Lajur Admission_Status daripada std_admissions_data DataFrame pertama kali dialih keluar oleh kod. Memandangkan lajur ini mengandungi pembolehubah sasaran, prapemprosesan tidak diperlukan.

Kemudian, kod mencipta dua pembolehubah baharu: “F” dan “t”. Ciri-ciri terkandung dalam pembolehubah 'F', manakala pembolehubah sasaran terkandung dalam pembolehubah 't'.

Data kemudiannya diedarkan ke dalam set ujian dan latihan. Ini dicapai menggunakan fungsi tts() daripada pakej sklearn.model_selection. Ciri, pembolehubah sasaran, saiz ujian dan keadaan rawak ialah empat argumen yang diperlukan oleh fungsi tts(). Parameter test_size menetapkan bahagian data yang digunakan untuk tujuan ujian. Memandangkan saiz ujian dalam keadaan ini ditetapkan kepada 0.2, 20% daripada data akan digunakan untuk ujian.

Pilihan random_state menentukan benih penjana nombor rawak. Ini dilakukan untuk memastikan data diasingkan secara rawak. Set latihan dan ujian kini disimpan dalam pembolehubah F_training, F_testing, t_training, dan t_testing. Set ini boleh digunakan untuk menilai dan melatih model pembelajaran mesin.

Coretan Kod:

# Langkah-3: Muatkan set data kemasukan
std_admissions_data = panda_obj.read_csv( 'std_admission_dataset.csv' )

# Praproses data dan bahagikan kepada ciri (F) dan sasaran (t)
F = std_admissions_data.drop([ 'Status_Penerimaan' ], paksi= 1 )
t = std_admissions_data[ 'Status_Penerimaan' ]

# Tukar pembolehubah kategori kepada angka menggunakan pengekodan satu panas
F = panda_obj.get_dummies(F)
F_training, F_testing, t_training, t_testing = tts(F, t, test_size= 0.2 , random_state= 42 )

Langkah 4: Tetapkan Nama Eksperimen MLflow

adm_experiment_name = 'Percubaan_Penerimaan_Universiti'
mlflow.set_experiment(adm_experiment_name)

Langkah 5: Tentukan Pengelas Peningkatan Kecerunan

Model pengelas penggalak kecerunan kini disimpan dalam pembolehubah gbc_obj. Set data kemasukan boleh digunakan untuk menguji dan melatih model ini. Nilai hujah random_state ialah 42. Ini menjamin bahawa model dilatih menggunakan benih penjana nombor rawak yang sama yang menjadikan hasil boleh diulang.

gbc_obj = GBC(random_state= 42 )

Langkah 6: Tentukan Grid Hiperparameter

Kod pada mulanya mencipta kamus param_grid. Hiperparameter yang dilaraskan melalui carian grid terkandung dalam kamus ini. Tiga kunci membentuk kamus param_grid: n_estimators, learning_rate dan max_depth. Ini ialah hiperparameter model pengelas peningkat kecerunan. Bilangan pokok dalam model ditentukan oleh hiperparameter n_estimators. Kadar pembelajaran model ditentukan melalui hiperparameter kadar_pembelajaran. Hiperparameter max_depth mentakrifkan kedalaman setinggi mungkin bagi pokok model.

Coretan Kod:

param_grid = {

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

'kadar_pembelajaran' :[ 0.01 , 0.1 , 0.2 ],

'max_depth' :[ 4 , 5 , 6 ]

}

Langkah 7: Lakukan Carian Grid dengan Penjejakan MLflow

Kod itu kemudiannya berulang pada kamus param_grid. Untuk setiap set hiperparameter dalam kamus, kod melakukan perkara berikut:

  • Memulakan larian MLflow baharu
  • Menukar hiperparameter kepada senarai jika ia belum menjadi senarai
  • Log hiperparameter ke MLflow
  • Melatih model carian grid dengan hiperparameter yang ditentukan
  • Mendapat model terbaik daripada carian grid
  • Menjadikan ramalan pada data ujian yang berfungsi sebagai model terbaik
  • Mengira ketepatan model
  • Mencetak laporan hiperparameter, ketepatan dan pengelasan
  • Log ketepatan dan model ke MLflow

Coretan Kod:

dengan warn.catch_warnings():
warn.filterwarnings( 'abai' , category=UserWarning, modul= '.*distutil.*' )
untuk params dalam pg(param_grid):
dengan mlflow.start_run(run_name= 'Admissions_Status Run' ):
# Tukar nilai tunggal kepada senarai
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)
skor_ketepatan_model = acs(t_testing, model_predictions)
cetak( 'Hiperparameter:' , params)
cetak( 'Ketepatan:' , skor_ketepatan_model)
# Abaikan secara eksplisit UndefinedMetricWarning
dengan warn.catch_warnings():
warn.filterwarnings( 'abai' , category=Amaran)
cetak( 'Laporan Pengelasan:' )
print(cr(t_testing, model_predictions, zero_division= 1 ))
mlflow.log_metric( 'ketepatan' , skor_ketepatan_model)
mlflow.sklearn.log_model(std_best_model, 'gb_classifier_model' )

Langkah 8: Jalankan Program Menggunakan Python

Berikut ialah output pada pelayan MLflow:

Kesimpulan

Alat carian grid MLflow mengautomasikan tweaking, menjejaki keputusan dan mengubah suai hiperparameter dalam model pembelajaran mesin. Ia membantu untuk menentukan hiperparameter yang ideal dan memastikan hasil yang boleh dipercayai tetapi boleh menjadi mahal dari segi pengiraan untuk eksperimen hiperparameter yang meluas.