web-dev-qa-db-fra.com

sklearn dumping model using joblib, dumps multiple files. Lequel est le bon modèle?

J'ai fait un exemple de programme pour former un SVM en utilisant sklearn. Voici le code

from sklearn import svm
from sklearn import datasets
from sklearn.externals import joblib

clf = svm.SVC()
iris = datasets.load_iris()
X, y = iris.data, iris.target
clf.fit(X, y)

print(clf.predict(X))
joblib.dump(clf, 'clf.pkl') 

Lorsque je vide le fichier modèle, j'obtiens cette quantité de fichiers. :

['clf.pkl', 'clf.pkl_01.npy', 'clf.pkl_02.npy', 'clf.pkl_03.npy', 'clf.pkl_04.npy', 'clf.pkl_05.npy' , 'clf.pkl_06.npy', 'clf.pkl_07.npy', 'clf.pkl_08.npy', 'clf.pkl_09.npy', 'clf.pkl_10.npy', 'clf.pkl_11.npy'])

Je suis confus si j'ai fait quelque chose de mal. Ou est-ce normal? Qu'est-ce que les fichiers * .npy. Et pourquoi il y en a 11?

12
kcc__

Pour tout enregistrer dans 1 fichier, vous devez définir la compression sur True ou n'importe quel nombre (1 par exemple).

Mais vous devez savoir que la représentation séparée des tableaux np est nécessaire pour les principales caractéristiques du vidage/chargement de joblib, joblib peut charger et enregistrer des objets avec des tableaux np plus rapidement que Pickle en raison de cette représentation séparée, et contrairement à Pickle joblib peut enregistrer et charger correctement objets avec des tableaux nummap nummap. Si vous voulez avoir un seul fichier de sérialisation de l'objet entier (et que vous ne voulez pas enregistrer les tableaux memmap np) - je pense qu'il serait préférable d'utiliser Pickle, AFAIK dans ce cas, la fonctionnalité de vidage/chargement de joblib fonctionnera à la même vitesse que Cornichon.

import numpy as np
from scikit-learn.externals import joblib

vector = np.arange(0, 10**7)

%timeit joblib.dump(vector, 'vector.pkl')
# 1 loops, best of 3: 818 ms per loop
# file size ~ 80 MB
%timeit vector_load = joblib.load('vector.pkl')
# 10 loops, best of 3: 47.6 ms per loop

# Compressed
%timeit joblib.dump(vector, 'vector.pkl', compress=1)
# 1 loops, best of 3: 1.58 s per loop
# file size ~ 15.1 MB
%timeit vector_load = joblib.load('vector.pkl')
# 1 loops, best of 3: 442 ms per loop

# Pickle
%%timeit
with open('vector.pkl', 'wb') as f:
    pickle.dump(vector, f)
# 1 loops, best of 3: 927 ms per loop
%%timeit                                    
with open('vector.pkl', 'rb') as f:
    vector_load = pickle.load(f)
# 10 loops, best of 3: 94.1 ms per loop
16
Ibraim Ganiev