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 pickle2from sklearn.datasets import load_iris3from sklearn.model_selection import train_test_split4from sklearn.ensemble import RandomForestClassifier56# Veri yükleme7iris = load_iris()8X_train, X_test, y_train, y_test = train_test_split(9iris.data, iris.target, test_size=0.2, random_state=4210)1112# Model eğitme13model = RandomForestClassifier(n_estimators=100, random_state=42)14model.fit(X_train, y_train)1516print(f"Eğitim doğruluğu: {model.score(X_train, y_train):.4f}")1718# Modeli kaydetme19with open('iris_model.pkl', 'wb') as f:20pickle.dump(model, f)2122print("Model kaydedildi: iris_model.pkl")Beklenen çıktı:
1Eğitim doğruluğu: 1.00002Model kaydedildi: iris_model.pklŞimdi kaydedilen modeli yükleyelim ve test et:
1import pickle23# Modeli yükleme4with open('iris_model.pkl', 'rb') as f:5loaded_model = pickle.load(f)67# Test verisi üzerinde tahmin8test_accuracy = loaded_model.score(X_test, y_test)9print(f"Test doğruluğu: {test_accuracy:.4f}")1011# Yeni veri üzerinde tahmin12yeni_veri = [[5.1, 3.5, 1.4, 0.2]] # Iris özellikleri13tahmin = loaded_model.predict(yeni_veri)14print(f"Tahmin: {tahmin[0]} (sınıf indeksi)")Beklenen çıktı:
1Test doğruluğu: 1.00002Tahmin: 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.
0 yorum