Saving and Loading Models

Kategori: Machine Learning , 08 Ocak 2020 , JanFranco


Şu zamana kadar yaptığımız uygulamalarda, kullandığımız veri setleri düşük boyutluydu. Bu veri setlerinin boyutu çok büyük olabilir. Bir modeli 2 saniyede değil de haftalarca train edebiliriz. Bu train aşamasından sonra, tekrar tekrar train edip bilgisayarı yormamak için, kaynak harcamamak için eğittiğimiz modelleri kaydetmek isteyebiliriz. Örneğin bir KNN modelini eğittik. Daha sonra bu modeli kaydettik. Bu kayıt etme işlemi diske yapılıyor. Başka bir zaman diliminde bu kaydettiğimiz modeli başka bir projemizde alıp kullanabilir, direk olarak prediction, tahmin yapabiliriz. Python üzerinden bir örnek yapalım. İlk olarak veriyi ve kütüphaneyi alalım:


import pickle
import pandas as pd
from sklearn.impute import SimpleImputer
from sklearn.metrics import confusion_matrix
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, OneHotEncoder

df = pd.read_csv('veriler.csv')
İlk satırda pickle kütüphanesini dahil ettik. Bu kütüphane ile modelleri kaydedebilir, save edebilir, geri yükleyebiliriz. Daha önce KNN ile bir uygulama yapmıştık. Aynı kodları direk olarak aldığım için tekrar açıklamıyorum, önceki yazıları okuyabilirsiniz:


missing = SimpleImputer()
age = df.iloc[:, [3]].values
age = missing.fit_transform(age)
age = pd.DataFrame(data=age, columns=['age'])

labelEncoder = LabelEncoder()
gender = df.iloc[:, [4]].values
gender = labelEncoder.fit_transform(gender.ravel())
gender = pd.DataFrame(data=gender, columns=['gender'])

oneHotEncoder = OneHotEncoder()
country = df.iloc[:, [0]].values
country = oneHotEncoder.fit_transform(country).toarray()
country = pd.DataFrame(data=country, columns=['fr', 'tr', 'us'])

hw = df.iloc[:, [1, 2]].values
hw = pd.DataFrame(data=hw, columns=['height', 'weight'])

df = pd.concat([country, hw, age, gender], axis=1)
print(df)

x = df.iloc[:, [3, 4, 5]]
y = df.iloc[:, [6]]
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=.33, random_state=0)
*** Veri ön işleme aşamasını tamamladık. Modeli oluşturalım, fit edelim. Daha sonra pickle.dump() methodu ile modeli kaydedelim:


knn = KNeighborsClassifier(n_neighbors=3, metric='euclidean')
knn.fit(x_train, y_train.values.ravel())
pickle.dump(knn, open('knn.model', 'wb'))
dump methodu parametre olarak modeli ve bir file descriptor'ı alır. Burada open fonksiyonu ile knn.model adında bir dosya oluşturduk, dosya modunu wb belirleyerek, binary şeklinde write edileceğini söyledik. Şimdi bu kaydettiğimiz modeli, pickle.load() methodu ile geri alalım ve predict yapalım:


loadedKNN = pickle.load(open('knn.model', 'rb'))
knnRes = loadedKNN.predict(x_test)
Bu şekilde load methodunu da kullanmış olduk. Dosya modunu rb belirleyerek binary şeklinde read, okuma yapacağımızı belirttik. Daha sonra sonuçları görebiliriz:


confusionMatrix = confusion_matrix(y_true=y_test, y_pred=knnRes)
print("***** Confusion Matrix *****")
print("     E   K")
print("E   ", confusionMatrix[0][0], " ", confusionMatrix[0][1])
print("K   ", confusionMatrix[1][0], " ", confusionMatrix[1][1])

>>

***** Confusion Matrix *****
     E   K
E    1   0
K    0   7


Yorumlar

Henüz bir yorum bulunmuyor.