Scikit-learn Modellerini Pickle ile Kaydetme ve Yükleme

Scikit-learn ile eğittiğin bir modeli her seferinde yeniden eğitmek zaman kaybı. Modeli pickle formatında kaydedip ihtiyaç duyduğunda yüklemek çok daha akılcı.

Pickle, Python nesnelerini binary formatında diske yazıp okumaya yarayan standart bir kütüphanedir. Scikit-learn modelleri tam da bu şekilde saklanmaya uygun. Eğitim süresi uzunsa, özellikle büyük veri setleriyle çalışıyorsan, modeli bir kez eğit, kaydet, sonra istediğin zaman yükle.

Aşağıda iris veri seti üzerinde basit bir örnek var. Önce bir Random Forest modeli eğitiyoruz, pickle ile kaydediyoruz, sonra yüklüyoruz.

1import pickle
2from sklearn.datasets import load_iris
3from sklearn.model_selection import train_test_split
4from sklearn.ensemble import RandomForestClassifier
5
6# Veri yükleme
7iris = load_iris()
8X_train, X_test, y_train, y_test = train_test_split(
9iris.data, iris.target, test_size=0.2, random_state=42
10)
11
12# Model eğitme
13model = RandomForestClassifier(n_estimators=100, random_state=42)
14model.fit(X_train, y_train)
15
16print(f"Eğitim doğruluğu: {model.score(X_train, y_train):.4f}")
17
18# Modeli kaydetme
19with open('iris_model.pkl', 'wb') as f:
20pickle.dump(model, f)
21
22print("Model kaydedildi: iris_model.pkl")

Beklenen çıktı:

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1Eğitim doğruluğu: 1.0000
2Model kaydedildi: iris_model.pkl

Şimdi kaydedilen modeli yükleyelim ve test et:

1import pickle
2
3# Modeli yükleme
4with open('iris_model.pkl', 'rb') as f:
5loaded_model = pickle.load(f)
6
7# Test verisi üzerinde tahmin
8test_accuracy = loaded_model.score(X_test, y_test)
9print(f"Test doğruluğu: {test_accuracy:.4f}")
10
11# Yeni veri üzerinde tahmin
12yeni_veri = [[5.1, 3.5, 1.4, 0.2]] # Iris özellikleri
13tahmin = loaded_model.predict(yeni_veri)
14print(f"Tahmin: {tahmin[0]} (sınıf indeksi)")

Beklenen çıktı:

1Test doğruluğu: 1.0000
2Tahmin: 0 (sınıf indeksi)

Sık yapılan hatalardan biri: modeli kaydederken 'wb' (write binary) modu, yüklerken 'rb' (read binary) modu kullanmamak. Metin modu seçersen hata alırsın. Ayrıca, modeli kaydettikten sonra sklearn sürümünü değiştirirsen uyumsuzluk çıkabilir, özellikle büyük projelerde joblib kullanmayı düşün; daha güvenilir ve sıkıştırma seçeneği sunuyor.

Pickle güvenlik açısından da dikkat gerektiriyor: güvenilmediğin kaynaklardan indirdiğin.pkl dosyalarını yükleme; zararlı kod içerebilir.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz