Pencarian Grid dengan MLflow

Pencarian Grid Dengan Mlflow



Hyperparameter dalam model pembelajaran mesin dioptimalkan menggunakan pendekatan pencarian grid. Pengguna dapat dengan cepat membandingkan beberapa pengaturan hyperparameter dan menemukan mana yang berkinerja terbaik karena MLflow melacak hasil eksperimen pencarian grid. Di MLflow, eksperimen pencarian grid dapat dibagikan dengan anggota tim lainnya dengan cepat. Dengan menggunakan MLflow, model paling efektif dari eksperimen penelusuran grid dapat diterapkan.

Manfaat Pencarian Grid

  • Penyetelan Hyperparameter Otomatis: Pencarian grid mengotomatiskan penyetelan hyperparameter yang memungkinkan eksplorasi sistematis tanpa coba-coba manual.
  • Reproduksibilitas: Pencarian grid memastikan validitas tes dengan memperoleh hasil yang dapat direproduksi secara dapat direproduksi sehingga meningkatkan komunikasi dan keandalan.
  • Pencarian Lengkap: GS secara efisien menemukan hyperparameter optimal untuk suatu model dengan mencari kombinasi secara mendalam.
  • Kekokohan: Pencarian grid adalah teknik tangguh yang tahan terhadap gangguan data sehingga mengurangi overfitting.
  • Mudah digunakan: Pencarian grid mudah digunakan dan dipahami sehingga menjadikannya metode yang layak untuk penyetelan hyperparameter.
  • Perbandingan Model: Pencarian grid menyederhanakan perbandingan model dan pemilihan metrik evaluasi.

Kelemahan Pencarian Grid

  • Biaya komputasi: Pencarian grid secara komputasi mahal untuk menyetel hyperparameter dalam jumlah besar.
  • Memakan waktu: Penyesuaian hyperparameter yang rumit memerlukan waktu lama.
  • Tidak selalu diperlukan: Sekarang hal ini selalu diperlukan; pencarian acak adalah alternatif terbaik untuk itu.

Contoh: Menemukan Pengaturan Model Terbaik untuk Sistem Penerimaan Universitas

Mari kita lihat contoh pencarian grid untuk penyetelan hyperparameter dalam kerangka sistem penerimaan universitas online. Dalam contoh ini, kami menggunakan scikit-learn dan pengklasifikasi Gradient Boosting Classifier (GBC) untuk memperkirakan kemungkinan siswa diterima di universitas berdasarkan faktor-faktor seperti poin IPK, skor SAT, skor ACT, dan kegiatan ekstra kurikuler. Beberapa opsi tersedia untuk pencarian grid alih-alih GBC termasuk Regresi Logistik (LR), SVM (Support Vector Machine), dll.

Hasilkan Data Acak untuk Sistem Pendaftaran Online Menggunakan MLflow untuk Pencarian Grid

Pandas Python dan paket acak dapat digunakan untuk membuat kumpulan data fiktif untuk sistem penerimaan. Dengan nilai acak untuk kolom APP_NO, IPK, Skor SAT, Skor ACT, Kegiatan Ekstrakurikuler, dan Status Penerimaan, kode ini menghasilkan kumpulan data penerimaan sintetis. Variabel num_students mengontrol berapa banyak baris yang ada dalam kumpulan data.







Status penerimaan ditetapkan secara acak berdasarkan tingkat penerimaan 70%, dan modul acak digunakan untuk menghasilkan nilai acak untuk beberapa kolom. Untuk tujuan demonstrasi, potongan kode berikut membuat kumpulan data penerimaan palsu dengan nilai acak dan disimpan ke file std_admission_dataset.csv:



Cuplikan Kode:



# Impor perpustakaan Panda dan Acak
impor panda sebagai panda_obj
impor acak sebagai random_obj

# Tetapkan jumlah catatan yang akan dihasilkan oleh kumpulan data siswa
catatan_siswa = 1000

# Buat daftar untuk menyimpan data
std_application_numbers = [ 'APLIKASI-' + str(acak_obj.randint( 1000 , 9999 )) untuk _ dalam rentang(students_records)]
std_gpa = [bulat(acak_obj.seragam( 2.5 , 4.0 ), 2 ) untuk _ dalam rentang(students_records)]
std_sat_scores = [obj_acak.randint( 900 , 1600 ) untuk _ dalam rentang(students_records)]
std_act_scores = [obj_acak.randint( dua puluh , 36 ) untuk _ dalam rentang(students_records)]
std_extra_curriculars = [obj_acak.pilihan([ 'Ya' , 'TIDAK' ]) untuk _ dalam rentang(students_records)]

# Hitung status penerimaan berdasarkan tingkat penerimaan acak
std_status_penerimaan = [ 1 jika random_obj.random() < 0,7 kalau tidak 0 untuk _ dalam jangkauan(students_records)]

# Buat kamus untuk menyimpan data siswa
std_data = {

'APLIKASI_TIDAK' : std_application_numbers,

'IPK' : std_gpa,

'SAT_Skor' : std_sat_scores,

'ACT_Skor' : std_act_scores,

'Kegiatan ekstrakulikuler' : std_extra_curriculars,

'Status_Penerimaan' : std_admission_status

}

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

# Simpan DataFrame DataFrame_Student ke file CSV bernama std_admission_dataset.csv
DataFrame_Student.to_csv( 'std_admission_dataset.csv' , indeks=Salah)
mencetak( 'Data Siswa Berhasil Diekspor ke File CSV!' )

Eksekusi Kode:

Gunakan perintah Python untuk mengkompilasi kode, lalu gunakan perintah pip untuk menginstal modul tertentu jika Anda mengalami kesalahan modul. Gunakan perintah install pip3 untuk menginstal perpustakaan yang diberikan jika Python versi 3.X atau lebih tinggi.





Eksekusi yang Berhasil:



Contoh Tangkapan Layar Data:

Langkah 1: Impor Perpustakaan

  • Pustaka MLflow untuk pelacakan eksperimen pembelajaran mesin
  • Pustaka Pandas untuk menangani pemrosesan dan analisis data, serta paket mlflow.sklearn untuk mengintegrasikan model Scikit-Learn
  • Baris keempat mengimpor perpustakaan “peringatan” untuk menekan kesalahan
  • Kelas ParameterGrid untuk pencarian grid di modul sklearn.model_selection
  • GridSearchCV dan GradientBoostingClassifier dari sklearn.model_selection dan ensemble, masing-masing, untuk pencarian grid dan model pengklasifikasi peningkatan gradien
  • Accuracy_score dan classification_report berfungsi dari modul sklearn.metrics untuk menghitung akurasi model dan menghasilkan laporan klasifikasi
  • Kode mengimpor modul OS dan menyetel variabel lingkungan GIT_PYTHON_REFRESH ke silent.

Cuplikan Kode:

# Langkah-I Impor Perpustakaan yang Diperlukan
impor mlflow
impor mlflow.sklearn
impor peringatan sebagai peringatan
impor panda sebagai panda_obj
dari sklearn.model_selection impor train_test_split sebagai tts, ParameterGrid sebagai pg, GridSearchCV sebagai gscv
impor kami
dari sklearn.ensemble impor GradientBoostingClassifier sebagai GBC
dari sklearn.metrics impor akurasi_score sebagai acs, classification_report sebagai cr
os.lingkungan[ 'GIT_PYTHON_REFRESH' ] = 'diam'

Langkah 2: Tetapkan URI Pelacakan

URI pelacakan server MLflow diatur menggunakan fungsi mlflow.set_tracking_uri(), memastikan mesin lokal pada port 5000 untuk eksperimen dan model.

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

Langkah 3: Muat dan Siapkan Kumpulan Data Penerimaan

Impor perpustakaan Pandas sebagai panda_obj untuk manipulasi dan analisis data. Fungsi read_csv() diterapkan untuk memuat dataset penerimaan. Jalur ke kumpulan data adalah satu-satunya argumen yang diperlukan oleh fungsi read_csv(). Jalur ke kumpulan data dalam contoh ini adalah std_admission_dataset.csv. Dengan menggunakan fungsi read_csv(), kumpulan data dimuat ke dalam Pandas DataFrame.

Kolom Admission_Status dari std_admissions_data DataFrame pertama kali dihapus oleh kode. Karena kolom ini berisi variabel target, prapemrosesan tidak diperlukan.

Kemudian, kode tersebut membuat dua variabel baru: “F” dan “t”. Fitur terdapat pada variabel “F”, sedangkan variabel target terdapat pada variabel “t”.

Data tersebut kemudian didistribusikan ke dalam set pengujian dan pelatihan. Hal ini dilakukan dengan menggunakan fungsi tts() dari paket sklearn.model_selection. Fitur, variabel target, ukuran pengujian, dan status acak adalah empat argumen yang diperlukan oleh fungsi tts(). Parameter test_size menetapkan porsi data yang digunakan untuk tujuan pengujian. Karena ukuran pengujian dalam contoh ini diatur ke 0,2, 20% data akan digunakan untuk pengujian.

Opsi random_state menentukan benih penghasil nomor acak. Hal ini dilakukan untuk memastikan bahwa data dipisahkan secara acak. Set pelatihan dan pengujian sekarang disimpan dalam variabel F_training, F_testing, t_training, dan t_testing. Kumpulan ini dapat digunakan untuk mengevaluasi dan melatih model pembelajaran mesin.

Cuplikan Kode:

# Langkah-3: Muat kumpulan data penerimaan
std_admissions_data = panda_obj.read_csv( 'std_admission_dataset.csv' )

# Memproses data terlebih dahulu dan membaginya menjadi fitur (F) dan target (t)
F = std_admissions_data.drop([ 'Status_Penerimaan' ], sumbu= 1 )
t = std_admissions_data[ 'Status_Penerimaan' ]

# Ubah variabel kategori menjadi numerik menggunakan pengkodean one-hot
F = panda_obj.get_dummies(F)
F_training, F_testing, t_training, t_testing = tts(F, t, test_size= 0,2 , keadaan_acak= 42 )

Langkah 4: Tetapkan Nama Eksperimen MLflow

adm_experiment_name = 'Universitas_Penerimaan_Eksperimen'
mlflow.set_experiment(adm_experiment_name)

Langkah 5: Tentukan Pengklasifikasi Peningkatan Gradien

Model pengklasifikasi peningkatan gradien sekarang disimpan dalam variabel gbc_obj. Kumpulan data penerimaan dapat digunakan untuk menguji dan melatih model ini. Nilai argumen random_state adalah 42. Hal ini menjamin bahwa model dilatih menggunakan benih penghasil angka acak yang sama persis sehingga hasilnya dapat diulang.

gbc_obj = GBC(keadaan_acak= 42 )

Langkah 6: Tentukan Grid Hyperparameter

Kode awalnya membuat kamus param_grid. Hyperparameter yang disesuaikan melalui pencarian grid terdapat dalam kamus ini. Tiga kunci membentuk kamus param_grid: n_estimators, learning_rate, dan max_ depth. Ini adalah hyperparameter model pengklasifikasi peningkat gradien. Jumlah pohon dalam model ditentukan oleh hyperparameter n_estimators. Kecepatan pembelajaran model ditentukan melalui hyperparameter learning_rate. Hyperparameter max_ depth menentukan kedalaman tertinggi dari pohon model.

Cuplikan Kode:

param_grid = {

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

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

'kedalaman_maks' :[ 4 , 5 , 6 ]

}

Langkah 7: Lakukan Pencarian Grid dengan Pelacakan MLflow

Kode kemudian mengulangi kamus param_grid. Untuk setiap kumpulan hyperparameter dalam kamus, kode melakukan hal berikut:

  • Memulai proses MLflow baru
  • Mengonversi hyperparameter menjadi daftar jika belum menjadi daftar
  • Mencatat hyperparameter ke MLflow
  • Melatih model pencarian grid dengan hyperparameter yang ditentukan
  • Mendapatkan model terbaik dari pencarian grid
  • Membuat prediksi pada data pengujian yang menggunakan model terbaik
  • Menghitung keakuratan model
  • Mencetak laporan hyperparameter, akurasi, dan klasifikasi
  • Mencatat keakuratan dan model ke MLflow

Cuplikan Kode:

dengan peringatan.catch_warnings():
memperingatkan.filterwarnings( 'mengabaikan' , kategori=Peringatan Pengguna, modul= '.*distutil.*' )
untuk param di pg(param_grid):
dengan mlflow.start_run(run_name= 'Penerimaan_Status Jalankan' ):
# Ubah nilai tunggal menjadi daftar
params = {kunci: [nilai] jika bukan isinstance(nilai, daftar) nilai lain untuk kunci, nilai dalam 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)
mencetak( 'Hyperparameter:' , param)
mencetak( 'Ketepatan:' , model_akurasi_skor)
# Secara eksplisit abaikan UndefinisiMetricWarning
dengan peringatan.catch_warnings():
memperingatkan.filterwarnings( 'mengabaikan' , kategori=Peringatan)
mencetak( 'Laporan Klasifikasi:' )
cetak(cr(t_testing, model_predictions, zero_division= 1 ))
mlflow.log_metrik( 'ketepatan' , model_akurasi_skor)
mlflow.sklearn.log_model(std_best_model, 'gb_classifier_model' )

Langkah 8: Jalankan Program Menggunakan Python

Berikut output pada server MLflow:

Kesimpulan

Alat pencarian grid MLflow mengotomatiskan penyesuaian, pelacakan hasil, dan modifikasi hyperparameter dalam model pembelajaran mesin. Hal ini membantu menentukan hyperparameter yang ideal dan memastikan hasil yang andal, namun dapat memakan biaya komputasi yang mahal untuk eksperimen hyperparameter yang ekstensif.