2015-11-03 8 views
7

私はsklearnを使ってSVMをトレーニングするサンプルプログラムを作った。コードはこちらsklarnはjoblibを使用してモデルをダンプし、複数のファイルをダンプします。どちらが正しいモデルですか?

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') 

私はモデルファイルをダンプすると、この量のファイルが得られます。 :

[ 'clf.pkl'、 'clf.pkl_01.npy'、 'clf.pkl_02.npy'、 'clf.pkl_03.npy'、 'clf.pkl_04.npy'、「clf.pkl_05。 clf.pkl_07.npy '、' clf.pkl_08.npy '、' clf.pkl_09.npy '、' clf.pkl_10.npy '、' clf.pkl_11.npy ' ]

何か問題があった場合は混乱します。それともこれは普通ですか? * .npyファイルとは何ですか?そしてなぜ11があるのですか?

+3

ものが、あなたのデータのための 'numpy'アレイは、ある'バックロードjoblib' '.pkl'はそれらの' np'配列を探して、私はちょうど実現したモデルデータ – EdChum

+1

をバックロードすること私が使用している場合joblib.dump(clf、 'clf.pkl'、compress = 9)私はclf.pklファイルを1つだけ取得します。だから私はあなたがそれらが貧弱な配列であると述べたと仮定します。ロード中に手動でロードするか、自動的にロードしますか? –

+0

私はそれらが自動的にロードされることを期待して、それを試してください – EdChum

答えて

11

1つのファイルにすべてを保存するには、圧縮をTrueまたは任意の数値(たとえば1)に設定する必要があります。

しかし、joblib dump/loadの主な機能には、np配列の分離した表現が必要であることを知っておく必要があります。この分離された表現のためにjoblibはPickleよりも高速にnp配列でオブジェクトをロードして保存できます。 memmap numpy配列でオブジェクトを正しく保存して読み込みます。あなたは、オブジェクト全体の1つのファイルのシリアル化をしたい(そしてmemmapのnp配列を保存したくない)場合 - Pickle、AFAIKを使用する方が良いと思います。この場合、joblibのダンプ/ロード機能はピクルスおそらく

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 
関連する問題