MLflow ile Izgara Arama

Mlflow Ile Izgara Arama



Makine öğrenimi modellerindeki hiper parametreler, ızgara arama yaklaşımı kullanılarak optimize edilir. MLflow, ızgara arama deneylerinin sonuçlarını takip ettiğinden, kullanıcı birden fazla hiper parametre ayarını hızlı bir şekilde karşılaştırabilir ve hangilerinin en iyi performansı gösterdiğini bulabilir. MLflow'ta ızgara arama deneyi diğer ekip üyeleriyle hızlı bir şekilde paylaşılabilir. MLflow kullanılarak bir ızgara arama deneyinin en etkili modeli dağıtılabilir.

Izgara Aramanın Faydaları

  • Otomatik Hiperparametre Ayarı: Izgara araması, manuel deneme yanılma olmadan sistematik araştırmaya olanak tanıyan hiperparametre ayarlamasını otomatikleştirir.
  • Tekrarlanabilirlik: Izgara araması, iletişimi ve güvenilirliği artıran tekrarlanabilir sonuçları tekrarlanabilir bir şekilde elde ederek test geçerliliğini sağlar.
  • Ayrıntılı arama: GS, kombinasyonları kapsamlı bir şekilde arayarak bir model için en uygun hiperparametreleri verimli bir şekilde bulur.
  • Sağlamlık: Izgara araması, aşırı uyumu azaltan veri gürültüsüne dayanıklı, sağlam bir tekniktir.
  • Kullanımı kolay: Grid aramanın kullanımı ve kavranması basittir, bu da onu hiperparametre ayarlaması için uygun bir yöntem haline getirir.
  • Model Karşılaştırmaları: Izgara araması, model karşılaştırmasını ve değerlendirme metriklerinin seçimini basitleştirir.

Izgara Aramanın Dezavantajları

  • Hesaplamalı maliyet: Izgara araması, çok sayıda hiper parametrenin ayarlanması için hesaplama açısından pahalıdır.
  • Zaman tükeniyor: Karmaşık hiperparametre ayarlamaları zaman alıcıdır.
  • Her zaman gerekli değildir: Artık her zaman gereklidir; rastgele arama buna en iyi alternatiftir.

Örnek: Üniversiteye Giriş Sistemi İçin En İyi Model Ayarlarını Bulma

Çevrimiçi üniversite kabul sistemi çerçevesinde hiperparametre ayarlaması için bir tablo arama örneğine bakalım. Bu örnekte, bir öğrencinin GPA puanları, SAT puanları, ACT puanları ve müfredat dışı etkinlikler gibi faktörlere dayalı olarak bir üniversiteye kabul edilme olasılığını tahmin etmek için scikit-learn ve basit bir Gradient Boosting Classifier (GBC) sınıflandırıcısını kullanıyoruz. Lojistik Regresyon (LR), SVM (Destek Vektör Makinesi), vb. dahil olmak üzere GBC yerine ızgara araması için birden fazla seçenek mevcuttur.

Izgara Arama için MLflow'u Kullanarak Çevrimiçi Giriş Sistemi için Rastgele Veri Oluşturma

Python'un Pandaları ve rastgele paketleri, kabul sistemi için hayali bir veri seti oluşturmak için kullanılabilir. APP_NO, GPA, SAT Puanı, ACT Puanı, Ders Dışı Etkinlikler ve Kabul Durumu sütunları için rastgele değerlerle bu kod, sentetik bir kabul veri kümesi oluşturur. num_students değişkeni veri kümesinde kaç satır bulunduğunu kontrol eder.







Kabul durumu, %70 kabul oranına göre rastgele ayarlanır ve rastgele modül, birkaç sütun için rastgele değerler üretmek için kullanılır. Gösterim amacıyla, aşağıdaki kod parçası rastgele değerlere sahip sahte bir kabul veri kümesi oluşturur ve std_admission_dataset.csv dosyasına kaydedilir:



Kod Parçacığı:



# Panda ve Random kütüphanelerini içe aktarın
pandaları panda_obj olarak içe aktar
rastgele_obj olarak rastgele içe aktar

# Öğrenci veri kümesinin oluşturulacak kayıt sayısını ayarlayın
öğrenciler_kayıtları = 1000

# Verileri depolamak için listeler oluşturun
std_application_numbers = [ 'UYGULAMA-' + str(random_obj.randint( 1000 , 9999 )) aralıktaki _ için(öğrenci_kayıtları)]
std_gpa = [round(random_obj.uniform( 2.5 , 4.0 ), 2 ) aralıktaki _ için(öğrenci_kayıtları)]
std_sat_scores = [random_obj.randint( 900 , 1600 ) aralıktaki _ için(öğrenci_kayıtları)]
std_act_scores = [random_obj.randint( yirmi , 36 ) aralıktaki _ için(öğrenci_kayıtları)]
std_extra_curriculars = [random_obj.choice([ 'Evet' , 'HAYIR' ]) aralıktaki _ için(öğrenci_kayıtları)]

# Rastgele kabul oranına göre kabul durumunu hesaplayın
std_admission_status = [ 1 if random_obj.random() < 0,7 başka 0 aralıktaki _ için(öğrenci_kayıtları)]

# Öğrenci verilerini tutacak bir sözlük oluşturun
std_veri = {

'APPLICATION_NO' : std_application_numbers,

'GPA' : std_gpa,

'SAT_Score' : std_sat_scores,

'ACT_Score' : std_act_scores,

'Müfredat dışı etkinlikler' : std_extra_curriculars,

'Kabul_Durumu' : std_admission_status

}

# Sözlükten bir DataFrame DataFrame_Student oluşturun
DataFrame_Student = panda_obj.DataFrame(std_data)

# DataFrame DataFrame_Student'i std_admission_dataset.csv adlı bir CSV dosyasına kaydedin
DataFrame_Student.to_csv( 'std_admission_dataset.csv' , dizin=Yanlış)
Yazdır( 'Öğrenci Verileri Başarıyla CSV Dosyasına Aktarıldı!' )

Kod Yürütme:

Kodu derlemek için Python komutunu kullanın, ardından bir modül hatasıyla karşılaşırsanız belirli bir modülü yüklemek için pip komutunu kullanın. Python sürüm 3.X veya daha yüksekse, verilen kitaplığı yüklemek için pip3 install komutunu kullanın.





Başarılı Uygulama:



Örnek Veri Ekran Görüntüsü:

1. Adım: Kitaplıkları İçe Aktarın

  • Makine öğrenimi deneme takibi için MLflow kitaplığı
  • Veri işleme ve analizini gerçekleştirmek için Pandas kütüphanesinin yanı sıra Scikit-Learn modellerini entegre etmek için mlflow.sklearn paketi
  • Dördüncü satır, hataları bastırmak için 'uyarılar' kütüphanesini içe aktarır
  • Sklearn.model_selection modülünde ızgara araması için ParameterGrid sınıfı
  • Izgara arama ve degrade artırıcı sınıflandırıcı modelleri için sırasıyla sklearn.model_selection ve ensemble'dan GridSearchCV ve GradientBoostingClassifier
  • Model doğruluğunu hesaplamak ve sınıflandırma raporları oluşturmak için sklearn.metrics modülündeki doğruluk_score ve sınıflandırma_report işlevleri
  • Kod, işletim sistemi modülünü içe aktarır ve GIT_PYTHON_REFRESH ortam değişkenini sessiz olarak ayarlar.

Kod Parçacığı:

# Adım-I Gerekli Kitaplıkları İçe Aktarın
mlflow'u içe aktar
mlflow.sklearn'i içe aktar
uyarıları uyarı olarak içe aktar
pandaları panda_obj olarak içe aktar
sklearn.model_selection'dan train_test_split'i tts olarak, ParameterGrid'i pg olarak, GridSearchCV'yi gscv olarak içe aktarın
bizi ithal et
sklearn.ensemble'dan GradientBoostingClassifier'ı GBC olarak içe aktarın
sklearn.metrics'ten, doğruluk_score'unu acs olarak, class_report'u cr olarak içe aktarın
işletim sistemi.ortam[ 'GIT_PYTHON_REFRESH' ] = 'sessizlik'

2. Adım: İzleme URI'sini ayarlayın

MLflow sunucusunun izleme URI'si mlflow.set_tracking_uri() işlevi kullanılarak ayarlanır ve deneyler ve modeller için 5000 numaralı bağlantı noktasında yerel bir makine sağlanır.

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

3. Adım: Kabul Veri Kümesini Yükleyin ve Hazırlayın

Veri işleme ve analiz için Pandas kütüphanesini panda_obj olarak içe aktarın. Kabul veri kümesini yüklemek için read_csv() işlevi uygulanır. Veri kümesinin yolu, read_csv() işlevinin gerektirdiği tek bağımsız değişkendir. Bu örnekte veri kümesinin yolu std_admission_dataset.csv'dir. Read_csv() işlevi kullanılarak veri kümesi bir Pandas DataFrame'e yüklenir.

Std_admissions_data DataFrame'deki Admission_Status sütunu ilk olarak kod tarafından kaldırılır. Bu sütun hedef değişkeni içerdiğinden ön işleme gerek yoktur.

Daha sonra kod iki yeni değişken oluşturur: “F” ve “t”. Özellikler “F” değişkeninde, hedef değişken ise “t” değişkeninde bulunur.

Veriler daha sonra test ve eğitim setlerine dağıtılır. Bu, sklearn.model_selection paketindeki tts() işlevi kullanılarak gerçekleştirilir. Özellikler, hedef değişken, test boyutu ve rastgele durum, tts() işlevinin gerektirdiği dört bağımsız değişkendir. test_size parametresi, verilerin test amacıyla kullanılan kısmını belirtir. Bu örnekte test boyutu 0,2 olarak ayarlandığından, test için verilerin %20'si kullanılacaktır.

Random_state seçeneği rastgele sayı üreteci tohumunu belirtir. Bu, verilerin rastgele ayrılmasını sağlamak için yapılır. Eğitim ve test setleri artık F_training, F_testing, t_training ve t_testing değişkenlerinde depolanıyor. Bu kümeler, makine öğrenimi modellerini değerlendirmek ve eğitmek için kullanılabilir.

Kod Parçacığı:

# Adım-3: Kabul veri setini yükleyin
std_admissions_data = panda_obj.read_csv( 'std_admission_dataset.csv' )

# Verileri önceden işleyin ve özelliklere (F) ve hedefe (t) bölün
F = std_admissions_data.drop([ 'Kabul_Durumu' ], eksen= 1 )
t = std_admissions_data[ 'Kabul_Durumu' ]

# One-hot kodlamayı kullanarak kategorik değişkenleri sayısala dönüştürün
F = panda_obj.get_dummies(F)
F_training, F_testing, t_training, t_testing = tts(F, t, test_size= 0,2 , rastgele_durum= 42 )

4. Adım: MLflow Deneme Adını Ayarlayın

adm_experiment_name = 'Üniversite_Kabul_Deney'
mlflow.set_experiment(adm_experiment_name)

Adım 5: Gradyan Arttırma Sınıflandırıcısını Tanımlayın

Gradyan artırıcı sınıflandırıcı modeli artık gbc_obj değişkeninde saklanıyor. Kabul veri kümesi bu modeli test etmek ve eğitmek için kullanılabilir. Random_state argümanının değeri 42'dir. Bu, modelin, sonuçların tekrarlanabilir olmasını sağlayan tamamen aynı rastgele sayı üreteci tohumu kullanılarak eğitildiğini garanti eder.

gbc_obj = GBC(random_state= 42 )

Adım 6: Hiperparametre Izgarasını Tanımlayın

Kod başlangıçta param_grid sözlüğünü oluşturur. Izgara araması aracılığıyla ayarlanan hiperparametreler bu sözlükte yer almaktadır. Param_grid sözlüğünü üç anahtar oluşturur: n_estimators, öğrenme_oranı ve max_derinlik. Bunlar gradyan artırıcı sınıflandırıcı modelinin hiperparametreleridir. Modeldeki ağaçların sayısı n_estimators hiperparametresi tarafından belirtilir. Modelin öğrenme oranı, öğrenme_oranı hiper parametresi aracılığıyla belirtilir. Maksimum_derinlik hiperparametresi, model ağaçlarının mümkün olan en yüksek derinliğini tanımlar.

Kod Parçacığı:

param_grid = {

'n_tahmin ediciler' :[ 100 , 150 , 200 ],

'öğrenme oranı' :[ 0,01 , 0,1 , 0,2 ],

'Maksimum derinlik' :[ 4 , 5 , 6 ]

}

Adım 7: MLflow İzleme ile Izgara Aramasını Gerçekleştirin

Kod daha sonra param_grid sözlüğü üzerinde yinelenir. Sözlükteki her hiperparametre kümesi için kod aşağıdakileri yapar:

  • Yeni bir MLflow çalıştırması başlatır
  • Zaten bir liste değillerse hiperparametreleri bir listeye dönüştürür
  • Hiperparametreleri MLflow'a kaydeder
  • Belirtilen hiper parametrelerle bir ızgara arama modelini eğitir
  • Izgara aramasından en iyi modeli alır
  • En iyi modeli çalıştırarak test verileri üzerinde tahminlerde bulunur
  • Modelin doğruluğunu hesaplar
  • Hiperparametreleri, doğruluğu ve sınıflandırma raporunu yazdırır
  • Doğruluğu ve modeli MLflow'a kaydeder

Kod Parçacığı:

warn.catch_warnings() ile:
warn.filterwarnings( 'görmezden gelmek' , kategori=KullanıcıUyarısı, modül= '.*distutil.*' )
pg(param_grid) cinsinden parametreler için:
mlflow.start_run(run_name= ile) 'Kabul_Durum Çalıştırması' ):
# Tek değerleri listelere dönüştürün
params = {anahtar: [değer] if not isinstance(value, list) else anahtar için değer, params.items() içindeki değer}
mlflow.log_params(paramlar)
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)
Yazdır( 'Hiperparametreler:' , parametreler)
Yazdır( 'Kesinlik:' , model_accuracy_score)
# UnDefinitionMetricWarning'i açıkça göz ardı edin
warn.catch_warnings() ile:
warn.filterwarnings( 'görmezden gelmek' , kategori=Uyarı)
Yazdır( 'Sınıflandırma Raporu:' )
print(cr(t_testing, model_predictions, sıfır_bölüm= 1 ))
mlflow.log_metric( 'kesinlik' , model_accuracy_score)
mlflow.sklearn.log_model(std_best_model, 'gb_classifier_model' )

Adım 8: Programı Python Kullanarak Çalıştırın

MLflow sunucusundaki çıktı şöyle:

Çözüm

MLflow'un ızgara arama aracı, makine öğrenimi modellerinde ince ayar yapmayı, sonuçları izlemeyi ve hiperparametreleri değiştirmeyi otomatikleştirir. İdeal hiperparametrelerin belirlenmesine yardımcı olur ve güvenilir sonuçlar sağlar ancak kapsamlı hiperparametre deneyleri için hesaplama açısından pahalı olabilir.