Python sklearn转储模型使用joblib,转储多个文件。哪一个是正确的型号?

Python sklearn转储模型使用joblib,转储多个文件。哪一个是正确的型号?,python,machine-learning,scikit-learn,joblib,Python,Machine Learning,Scikit Learn,Joblib,我用sklearn做了一个样本程序来训练SVM。这是密码 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, 'c

我用sklearn做了一个样本程序来训练SVM。这是密码

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.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']


如果我做错了什么,我会感到困惑。还是这很正常?什么是*.npy文件。为什么有11个?

要将所有内容保存到一个文件中,您应该将压缩设置为True或任意数字(例如1)

但是您应该知道,np数组的分离表示对于joblib dump/load的主要功能是必要的,由于这种分离表示,joblib可以比Pickle更快地使用np数组加载和保存对象,与Pickle相反,joblib可以使用memmap numpy数组正确地保存和加载对象。如果您想对整个对象进行一个文件序列化(并且不想保存memmap np数组),我认为最好使用Pickle,在本例中,AFAIK的joblib dump/load功能将以与Pickle相同的速度工作

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

大概这些是数据的
numpy
数组,
joblib
在加载
时.pkl
将查找那些
np
数组并加载回模型数据。我刚刚意识到,如果使用joblib.dump(clf,'clf.pkl',compress=9),我只会得到一个clf.pkl文件。所以我假设,正如你所说的,这些是numpy数组。在加载过程中,我手动加载了所有文件,还是自动加载了?我希望它们会自动加载,请尝试一下。这是真的。我不加载*.npy格式,只加载.pkl。你知道如果我使用参数压缩,它会影响非常大的数据集的数组吗?基本上,它会以读/写为代价影响pickle数据的大小,所以这取决于你的优先级是什么是的,这是有效的。我将compress设置为1,并将其保存到一个文件中。